拆分python数据包?

时间:2010-10-12 12:17:17

标签: python sockets packets

python有没有办法区分正在发送的数据包? e.g。

python接收数据

它处理数据

客户端发送第一个数据包

客户端发送第二个数据包

python接收数据,我可以接收第一个数据包而不是缓冲区中的所有信息

我知道我可以设置它以便它发送数据我确认并且客户端不会发送更多数据我已经确认已经处理了最后一块但是我宁愿不

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("", 2000))
sock.listen(5)

所有相关套接字数据

3 个答案:

答案 0 :(得分:1)

基本上有两种方法:

  1. 在每个数据包的开头,发送一个整数,指定该数据包的长度。当您接收数据时,首先读取整数,然后读取更多的字节作为第一个数据包。

  2. 在数据包之间发送一些特殊标记。仅当您可以保证标记不能在数据包中出现时,此方法才有效。

  3. 正如S. Lott指出的那样,你可以改为使用UDP(基于数据包)而不是TCP(基于流),但是你放弃了TCP提供的其他功能(重传丢弃的数据包,顺序包和拥塞控制)。编写自己的重传代码并不困难,但拥塞控制很难做到。

答案 1 :(得分:0)

  

python是否可以区分正在发送的数据包?

是。使用UDP而不是TCP。

答案 2 :(得分:0)

  

Netstring是一个简单的序列化   用于发送数据包的格式。每   数据包的形式   “长度:数据”。   http://en.wikipedia.org/wiki/Netstring

     

像Python这样的Python网络框架   扭曲有直接的支持   净字符串。