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();