1

有没有办法python可以区分正在发送的数据包?例如

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)

所有相关的套接字数据

4

3 回答 3

1

基本上有两种方法:

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

  2. 在数据包之间发送某种特殊标记。仅当您可以保证标记不会出现在数据包中时,这才有效。

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

于 2010-10-12T15:30:14.917 回答
0

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

是的。使用 UDP 而不是 TCP。

于 2010-10-12T15:04:32.460 回答
0

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

像 twisted 这样的 Python 网络框架直接支持 netstring。

于 2010-10-12T16:56:54.850 回答