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/8/xslt/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
Linux C客户端接收0字节,而服务器不发送任何内容_C_Sockets - Fatal编程技术网

Linux C客户端接收0字节,而服务器不发送任何内容

Linux C客户端接收0字节,而服务器不发送任何内容,c,sockets,C,Sockets,我有一个客户端和服务器应用程序,我观察到奇怪的行为: 客户端发送数据,80微秒后执行recvfrom,返回0, 在客户端执行recvfrom之后,服务器接收数据并发送响应。这只是来自服务器的一次发送 问题:这是客户端代码的问题还是代码正常? 从revcfrom的手动页面中,我可以看到当对等方关闭连接时recvfrom返回0-但我在服务器端没有看到任何关闭的连接-我做了服务器和客户端的扫描: 客户端: 16:06:08.206571 sendto(16, "initialize\r\n", 12,

我有一个客户端和服务器应用程序,我观察到奇怪的行为:

客户端发送数据,80微秒后执行recvfrom,返回0, 在客户端执行recvfrom之后,服务器接收数据并发送响应。这只是来自服务器的一次发送

问题:这是客户端代码的问题还是代码正常? 从revcfrom的手动页面中,我可以看到当对等方关闭连接时recvfrom返回0-但我在服务器端没有看到任何关闭的连接-我做了服务器和客户端的扫描:

客户端:

16:06:08.206571 sendto(16, "initialize\r\n", 12, MSG_NOSIGNAL, NULL, 0) = 12
16:06:08.206654 recvfrom(16, "", 256, 0, NULL, NULL) = 0
服务器端:

16:06:08.209998 recvfrom(11, "initialize\r\n", 256, 0, NULL, NULL) = 12
16:06:08.215474 sendto(11, "1\n", 2, MSG_NOSIGNAL, NULL, 0) = 2
我有点迷失了问题所在


提前感谢您的建议

recvfrom()/recv()无论是服务器还是客户端都是一样的,所以0(闭合连接)的意思是一样的。

这是UDP协议吗?但是如果我在服务器端看不到任何闭合,怎么办?您必须查找它。在你的例子中,你的客户机发送,你的服务器接收,然后你的服务器发送,然后你的客户机应该接收。如果在此之后没有调用另一个套接字相关函数,您将看不到它。套接字的故障排除非常棘手,就像多线程一样。如果您只是在服务器上插入另一个recv()或recfrom()(仅用于故障排除),您实际上应该得到一个小于0的值。哦,然后查找设置并打印errno。我甚至无法解释它在早期对你有多大的好处。