Sockets Unix网络编程-从客户端读取消息后程序卡住
我目前正在为Windows和Unix编写一个简单的客户端和服务器程序。此时,我只想创建一个简单的客户机和服务器,服务器将在其中向客户机回显消息。我已经让它在windows环境中工作,但是在Unix环境中有一个非常奇怪的问题。似乎在收到消息后,服务器会将其打印出来,但随后似乎会卡住。它不会尝试将消息发送回客户端,甚至不会在消息发送后打印其他内容。我已经附加了用于服务器的无止境循环。我在windows版本中使用了相同的代码,它似乎能100%工作,所以我不知道为什么不能 Ps这是我的第一篇帖子,如果我遗漏了什么,很抱歉。如果有帮助的话,我还使用Cygwin来运行我的Unix代码 提前谢谢Sockets Unix网络编程-从客户端读取消息后程序卡住,sockets,unix,Sockets,Unix,我目前正在为Windows和Unix编写一个简单的客户端和服务器程序。此时,我只想创建一个简单的客户机和服务器,服务器将在其中向客户机回显消息。我已经让它在windows环境中工作,但是在Unix环境中有一个非常奇怪的问题。似乎在收到消息后,服务器会将其打印出来,但随后似乎会卡住。它不会尝试将消息发送回客户端,甚至不会在消息发送后打印其他内容。我已经附加了用于服务器的无止境循环。我在windows版本中使用了相同的代码,它似乎能100%工作,所以我不知道为什么不能 Ps这是我的第一篇帖子,如果我
for(;;)
{
char buf[1024];
int cc = recv(newsockfd, buf, sizeof(buf), 0);
if (cc == 0)
{
exit(0);
}
buf[cc] = NULL;
printf("message received: %s\n", buf);
printf("This Never Prints!");
send(newsockfd, buf, cc, 0 );
memset(&buf, '\0', sizeof(buf));
}
理查德
第二行可能不打印,因为stdout
未刷新。
如果套接字是非阻塞的,则可能是由于后续memset
中的错误会在数据发送之前损坏数据,因此send()
无法工作
尝试将最后三条语句更改为
printf("This should print!\n"); // Add a newline
fflush(stdout); // Flush the output for good measure
send(newsockfd, buf, cc, 0); // Unchanged
memset(buf, '\0', sizeof(buf)); // buf is already an address.
这会改变行为吗?嘿,亚当。我只是厌倦了你的建议,但是它并没有改变这个错误的行为。这个错误真的让我卡住了。在客户端将消息发送到你的代码后,它会关闭套接字吗?这将使
send()
失败。不,我不会关闭客户端上的套接字。看起来,程序甚至在到达发送之前就死了,因为我从来没有看到print语句printf(“thisneverports!”);。它是挂着还是退出?它是卡在send()
中还是退出了?如果在退出(0)之前添加printf(),会发生什么情况?程序不会退出。在打印服务器已接收的消息后,程序似乎挂起。示例输出将是message received:test,然后程序将挂起!所以它确实收到了信息,打印出来,然后什么也没有。如果我删除消息的打印,程序仍然挂起。我不知道为什么。