...为什么客户端调用socket发送数据还是成功的。

发布网友 发布时间:2024-09-28 09:45

我来回答

1个回答

热心网友 时间:2024-10-26 02:22

我来告诉你标准答案!进程被kill的时候,会对所有已经打开的文件描述符执行close。
而这个close发起tcp连接断开时的四次握手。
就这个例子来说
第一次:服务端发FIN给客户端。而这个FIN表示服务端已经没有数据要发送了。
第二次:客户端接受FIN后,由系统的tcp/ip协议栈自动发送ack给客户端。表示我知道你没有数据要给我了。
第三次:客户端应用程序执行close。这个是进程自己控制的。跟第一次的意义一样(我也没有数据发送了)。
第四次:服务器端发ack给客户端表示确认。
上面的步骤就说明了。在客户端执行第二步以后。是可以给服务端发数据的。具体这些数据能不能正常被处理要依赖于具体的实现。
详细的细节你可以参考《unix网络编程》2.5节TCP连接的建立和终止

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com