如何拆分Python包?

1 投票
3 回答
2715 浏览
提问于 2025-04-16 05:21

有没有办法让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)

所有相关的socket数据

3 个回答

0

Netstring是一种简单的数据格式,用来发送数据包。每个数据包的格式是'长度:数据'。

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

0

有没有办法让Python区分发送的不同数据包?

可以的。使用UDP协议,而不是TCP协议。

1

基本上有两种方法:

  1. 在每个数据包的开始,先发送一个整数,告诉接收方这个数据包有多长。当你收到数据时,先读取这个整数,然后再读取那么多字节作为第一个数据包。

  2. 在数据包之间发送某种特殊标记。这个方法只有在你能保证这个标记不会出现在数据包内部时才有效。

正如S. Lott所提到的,你也可以选择使用UDP(基于数据包的方式)而不是TCP(基于流的方式),但这样你就会失去TCP提供的其他功能,比如丢包重传、按顺序接收数据包和拥塞控制。虽然自己写重传的代码并不太难,但做好拥塞控制就比较复杂了。

撰写回答