服务器没有收到来自客户端的多次写入

Server doesn't receive multiple write from client

下面的代码是simplified.I有一个带循环的服务器:

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":

connection();
connection();

但是如果我在我的客户端中这样做,服务器将只接收 "hello" 而不是 "I am Bob":

connection();
send_another_message();

服务器没有收到消息。

当我使用send_another_message时,我没有建立新的连接(因为它之前是通过之前的函数调用连接的)。

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

您的服务器仅在连接上读取和写入一次,然后下一次循环迭代再次调用 accept,这将阻塞直到有新连接或 return 错误值。在任何一种情况下,您都会覆盖文件描述符 fd_c。因此服务器不再能够与旧连接通信。

接受一次连接,并保留文件描述符直到连接关闭,这样您就可以将其重新用于对 readwrite 的调用。