我正在尝试为服务器实现套接字编程,它也可以作为客户端使用。
我尝试这样做的方式是在运行服务器时,如果我输入命令提示参数"连接IP PORT",它将作为客户端连接到相应的地址。
它确实有效,但不能同时工作。
如果我想在此程序通过传入客户端连接之前连接到服务器,则在与客户端建立连接之前它不会响应。
这是program.c的代码:
#include "clientAPI.h"
#include "serverAPI.h"
int sfd; //socket file descriptor
int listenv; //if listen
struct sockaddr_in serverAddress; //server address
int connectv;
int main(int argc, char * argv[]) { //argv[0] == server //argv[1] == port number
char buffer[256];
int connection;
int csfd;
int n;
char a1[5], a2[5], a3[5];
char m1[2], m2[10], m3[50]; //command arg 1, command arg 2, arg command 3
int * index;
char * info;
struct cEnQuery * ieq;
...
listenv = setServer(argv[1],&serverAddress,&sfd);
while (listenv == 0) {
connectv = connector(&sfd);
//while connected
bzero(buffer,256);
fgets(buffer,256,stdin);
sscanf(buffer,"%s %s %50[0-9a-zA-Z .]",a1,a2,a3);
if (strcmp(a1,"connect") == 0) {
//cip = atoi(m2); cport = atoi(m3);
connection = connectToServer(&csfd,a2,a3);
if(connection == 1) {
printf("Please enter the message: "); //command prompt requests [send file/ get file / send struct]
bzero(buffer,256);
fgets(buffer,255,stdin);
//request message to server
n = write(csfd, buffer, strlen(buffer)); //send prompt request to server to take its actions
sscanf(buffer,"%s %s %50[0-9a-zA-Z .]",m1,m2,m3);
if(n < 0) {
cerror("ERROR writing to socket");
}
else{
//connection stuff
}
}
}
}
}
clientAPI和serverAPI只是包含函数的头文件。
在听取连接时,我有什么方法可以调用clientAPI吗?
setServer()处理服务器与主机的绑定并侦听连接。
connector()接受连接并创建一个线程并处理相应的连接。
connectToServer()创建一个套接字并连接到可用的服务器。