2010-10-12 53 views
1

python可以区分发送的数据包吗?例如拆分python数据包?

蟒接收数据

它处理数据

客户发送第一分组

客户端发送第二分组

蟒接收数据,我可以接收第一分组而不是所有的信息在缓冲区

我知道我可以设置它,所以它发送数据我确认和客户端不会发送更多的数据我T I证实,已处理过的最后一块,但我宁愿不

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

所有相关的套接字数据

回答

1

基本上有两种方法:

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

  2. 发送数据包之间的某种特殊标记。这只有在你能保证标记不能在分组内发生的情况下才有效。

由于·洛指出,你也可以使用UDP(这是基于数据包的),而不是TCP(这是基于数据流的),但你放弃TCP提供的其他功能(重发丢包,顺序包和拥塞控制)。编写自己的代码进行重传并不难,但拥塞控制难以正确进行。

0

有没有办法Python中的数据包可以区分正在发送?

是的。使用UDP而不是TCP。

0

Netstring是一种简单的序列化格式,用于发送数据包的格式为 。每个 数据包的格式为 'length:data'。 http://en.wikipedia.org/wiki/Netstring

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