python-tcp粘包
Posted benchdog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-tcp粘包相关的知识,希望对你有一定的参考价值。
tcp有粘包,udp无粘包,将超出buffer_size数据丢弃。udp只负责发数据,不管服务端有没有开启(不依赖于服务端),一样运行不报错,所以不可靠。
tcp面向流,udp面向消息报文,每个udp段都是一条消息。应用程序必须以消息为单位提取数据,不能一次提取任意字节大小的数据。
udp不需建连接,所以能提供高效率服务。
tcp是基于数据流的(不知道起始位置和结束位置),于是收发的消息不能为空,需要c/s两端添加空白消息处理机制,防止程序卡主,而udp是基于数据报的,即便输入的是空格,那也不是空消息,因为udp协议会封装上消息头。
粘包两种情况:
1)包小:面向流的通信是没有边界保护的。tcp会将多次时间间隔小,数据量小的数据合成一个数据,当成一个包进行传输,这样客户端只能收到一个包。
2)包大:接收端从缓存池接收小于包长度的固定数据大小,剩余数据留在缓存池,等待第二次接收发送端第二次发送的数据时接收到,造成粘包。
以上是关于python-tcp粘包的主要内容,如果未能解决你的问题,请参考以下文章