我正在编写试图执行以下操作的应用程序:
这就是问题所在。当我尝试运行应用程序时,TCP交换如下:
前三个数据包建立three-way handshake,第四个和第五个数据包是服务器写入的数据及其确认的传输。
正如预期的那样,服务器套接字发送一个设置了FIN
标志的数据包,表明它正在关闭它的连接结束。客户端确认这一点,然后尝试将其数据写入套接字。服务器立即发送RST
数据包,过早终止连接。
为什么会这样?
注意:上述捕获是在Windows 8.1上完成的。
答案 0 :(得分:1)
发件人无法在[FIN]后发送数据。这样的动作将导致接收者发出[RST]。
答案 1 :(得分:1)
FIN可能表示服务器已完全关闭两个方向的连接。在这种情况下,如果它在连接上接收到任何进一步的数据,它将发出RST。这表明您的应用程序协议错误。如果服务器发送回复然后关闭套接字,则客户端无法通过该连接发送任何其他内容。
可能您需要服务器使用shutdown()
调用SHUT_WR
,然后在关闭套接字之前从客户端读取其他内容。或者你可能只是做错了。