Python 黏包及黏包解决方案
粘包现象 说粘包之前,我们先说两个内容,1.缓冲区、2.windows下cmd窗口调用系统指令 1 缓冲区(下面粘包现象的图里面还有关于缓冲区的解释) 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。 write() / send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。 TCP协议独立于 write() / send() 函数,数据有可能刚被写入缓冲区就发送到网络,也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,这取决于当时的网络情况、当前线程是否空闲等诸多因素,不由程序员控制。 read() / recv() 函数也是如此,也从输入缓冲区中读取数据,而不是直接从网络中读取。 这些I / O缓冲区特性可整理如下: 1.I/ O缓冲区在每个TCP套接字中单独存在; 2.I/ O缓冲区在创建套接字时自动生成; 3 .即使关闭套接字也会继续传送输出缓冲区中遗留的数据; 4 .关闭套接字将丢失输入缓冲区中的数据。 输入输出缓冲区的默认大小一般都是 8K,可以通过 getsockopt() 函数获取: 1 .unsigned