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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Sockets Unix网络编程-从客户端读取消息后程序卡住_Sockets_Unix - Fatal编程技术网

Sockets Unix网络编程-从客户端读取消息后程序卡住

Sockets Unix网络编程-从客户端读取消息后程序卡住,sockets,unix,Sockets,Unix,我目前正在为Windows和Unix编写一个简单的客户端和服务器程序。此时,我只想创建一个简单的客户机和服务器,服务器将在其中向客户机回显消息。我已经让它在windows环境中工作,但是在Unix环境中有一个非常奇怪的问题。似乎在收到消息后,服务器会将其打印出来,但随后似乎会卡住。它不会尝试将消息发送回客户端,甚至不会在消息发送后打印其他内容。我已经附加了用于服务器的无止境循环。我在windows版本中使用了相同的代码,它似乎能100%工作,所以我不知道为什么不能 Ps这是我的第一篇帖子,如果我

我目前正在为Windows和Unix编写一个简单的客户端和服务器程序。此时,我只想创建一个简单的客户机和服务器,服务器将在其中向客户机回显消息。我已经让它在windows环境中工作,但是在Unix环境中有一个非常奇怪的问题。似乎在收到消息后,服务器会将其打印出来,但随后似乎会卡住。它不会尝试将消息发送回客户端,甚至不会在消息发送后打印其他内容。我已经附加了用于服务器的无止境循环。我在windows版本中使用了相同的代码,它似乎能100%工作,所以我不知道为什么不能

Ps这是我的第一篇帖子,如果我遗漏了什么,很抱歉。如果有帮助的话,我还使用Cygwin来运行我的Unix代码

提前谢谢

 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,然后程序将挂起!所以它确实收到了信息,打印出来,然后什么也没有。如果我删除消息的打印,程序仍然挂起。我不知道为什么。