不要把网络编程和业务逻辑混淆起来。 注意TCP连接断开的时间和条件。
因此,在设计APP应用层时,必须考虑TCP断开时的设计。
(注意:如果关闭太早,协议栈可能会被RST分解,连接可能会重置,数据接收可能会不完整。 SO_LINGER选项可用于块IO,但不能用于非块IO )
参考: 《Windows网络编程 5.6.4顺序释放连接》
在服务器APP应用程序读取其馀数据之前,服务器主机崩溃,导致数据丢失,但客户对此一无所知。
对于面向连接的流套接字,选项SO_LINGER和SO_DONTLINGER的设置决定了调用closesocket ) )时closesocket )的操作过程。 这两个选项更改了需要在用户进程和内核之间传递linger结构的closesocket ) )的默认设置(closesocket ) ),并且在调用时,仍在队列中的数据将返回套接字) TCP以字节流形式确保字节顺序到达,不保留消息边界。
在APP应用层,必须设计用于实现TCP分包的逻辑(将字节流划分为消息),以避免直接发送到语言中的结构类型。 理由有两个。
1 )为了考虑配准,修改了全局配准方式(http://www.Sina.com/() packed ) ),破坏了abi,导致了第三方库coredump
2 )可扩展性强,添加字段后,客户端和服务端都需要升级。 TCP自连接问题。
当客户端开始连接到本地服务端时,在某些情况下可能会发生自连接。 本地主机: 54321 -本地主机: 54321参考:自连接