Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 服务器没有';无法从客户端接收多个写操作_C_Sockets_Server_Client Server - Fatal编程技术网

C 服务器没有';无法从客户端接收多个写操作

C 服务器没有';无法从客户端接收多个写操作,c,sockets,server,client-server,C,Sockets,Server,Client Server,以下代码已简化。我有一个带循环的服务器: while(1){ fd_c = accept(fd_skt, NULL, 0); reading = read(fd_c, buffer, 1024); writen(fd_c, send_ok, msg_length); } 以及一个具有库的客户端,该库包含一个套接字和两个函数: int fd_skt = -1; int connection(){ fd_skt = socket(AF_UNIX, SOCK_STREAM, 0) connect(f

以下代码已简化。我有一个带循环的服务器:

while(1){
fd_c = accept(fd_skt, NULL, 0);
reading = read(fd_c, buffer, 1024);
writen(fd_c, send_ok, msg_length);
}
以及一个具有库的客户端,该库包含一个套接字和两个函数:

int fd_skt = -1;
int connection(){
fd_skt = socket(AF_UNIX, SOCK_STREAM, 0)
connect(fd_skt, (struct sockaddr *) &skt_address, sizeof(skt_address))
writen("hello");
readn(); 
}

int send_another_message(){
if(fd_skt < 0)
    return error(ERR_SKT_NOT_READY);
writen("I am Bob");
readn();
}
但如果我在客户端执行此操作,服务器将只接收“hello”而不是“i am Bob”:

服务器不接收消息

当我使用“发送另一条消息”时,我不会建立新的连接(因为它以前与上一个函数调用连接过)


如果需要,我可以发布整个代码。

您的服务器在连接上只读取和写入一次,然后下一次循环迭代再次调用
accept
,它将阻塞直到出现新连接或返回错误值。在这两种情况下,您都会覆盖文件描述符
fd\u c
。因此,服务器不再能够与旧连接通信


接受连接一次,并保留文件描述符,直到连接关闭,这样您就可以将其重新用于调用
读取
写入

@这就解决了问题。现在,在客户端执行“发送另一条消息()”之后,客户端进程结束。为什么服务器中的while(1)循环收到两个“i am bob”并在退出后退出?@user4789408如果没有完整的示例代码,我无法肯定地告诉您,但是我怀疑您没有检查
read
的返回值。如果连接关闭,它将为
0
,并且缓冲区内容将从上次读取时保持不变。
connection();
connection();
connection();
send_another_message();