我目前正在使用C语言中的文件服务器。
当客户端从服务器请求文件时,它会写入套接字。然后,服务器回写带有标头的数据。客户端读取标头然后读取实际数据。在调试客户端时,服务器会在客户端有机会读取数据之前终止连接。
为了解决这个问题,我在客户端完成时输入代码将0
的字节写入服务器。服务器最后读取了套接字,查找该字节但是当客户端在调试器下运行时,它不会等待服务器上的读取。
在服务器上使用以下调用创建套接字:
int socketId = socket(AF_INET, SOCK_STREAM, 0);
我该怎么办?
答案 0 :(得分:0)
编写客户端 - 服务器代码存在许多挑战。在这种情况下,您也在编写协议但可能没有意识到。您的协议需要以一种方式定义,以便明确通信的每一方所期望的内容,并且这些方案非常重要。
以下是一些相关问题:
(java)basic java socket programming problem
(c)Socket Programming Problem
(c)Socket Programming -- recv() is not receiving data correctly
答案 1 :(得分:0)
如果文件包含0的字节怎么办?
你不需要这个。只需关闭插座即可。如果对等方收到一个干净的关闭,它必须已经收到整个文件。
听起来你没有在未发布的代码中检查错误。
答案 2 :(得分:0)
我们昨天发现了这个问题。由于变量被声明为错误类型,客户端写入的字节数超过服务器读取的字节数。感谢您的回复。
鲍勃