【发布时间】:2017-04-11 14:42:57
【问题描述】:
我目前正在使用 C 语言编写文件服务器。
当客户端向服务器请求文件时,它会写入一个套接字。然后服务器写回带有标题的数据。客户端读取标头,然后读取实际数据。在调试客户端时,服务器在客户端有机会读取数据之前终止连接。
为了解决这个问题,我编写了代码,在客户端完成后将一个字节 0 写入服务器。服务器最终读取套接字,寻找那个字节,但是当客户端在调试器下运行时,它不会等待服务器上的读取。
通过服务器上的以下调用创建套接字:int socketId = socket(AF_INET, SOCK_STREAM, 0);
我该怎么办?
【问题讨论】:
-
您是否尝试在服务器套接字上添加读取超时?这样它会等待一段时间让客户端发送 0 字节。
-
@KellyS.French 如果您不设置读取超时,它将永远等待。您的建议的要点不清楚。
-
EJP,据我了解,如果您不设置读取超时,它将永远等待。但是,它没有。
-
它会等到数据到达。 Ergo, 如果它没有等待,数据已到达,或流结束,或错误。没有其他可能。我建议您忽略代码中的流结束和/或错误。发布它。
-
EJP 或其他任何人,我正在使用此套接字进行双向通信。也就是说,服务器和客户端都在套接字上读写。如果服务器正在执行写入然后执行读取,我假设它不会读取它刚刚写入的数据。我希望它读取从客户端发送的数据。我有这个权利吗?谢谢,鲍勃
标签: c sockets network-programming