一、为什么会出现 这种现象?
当客户端和服务器完成一次数据的收发准备结束时,客户端为了感谢服务器发一封“感谢信——thanks”,此时服务器接收“感谢信”消息但是不回复。不知道你有没有和我一样的疑问,为什么?为什么客户端非要结束了还要发消息?为啥非要结束了发消息,为啥不能保持连接等一会等他发”感谢信“然后双方在关闭不行吗?
至于为什么要使用”优雅的断开“,GPT是这么说的:
我的理解就是,你把邮件发给服务器,发完了关闭了发送通道(写完信关闭了页面)。但是你仍旧可以收到服务器端给你发送的消息,例如:服务器说收到你发送的邮件,或者邮件已经寄出,对方已接收邮件等信息。
至于第二个,因为 另一端并不知道“感谢信”就是你结束语,以为是个正常数据可能导致阻塞。半关闭关注的是结束之前还有消息发送,紧扣这个问题有如下的函数帮我们优雅的断开连接。
二、shutdown()函数
#include<sys/socket.h>
int shutdown(int sock,int howto);