python - 拆分 python 数据包?

标签 python sockets packets

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

python接收数据

它处理数据

客户端发送第一个数据包

客户端发送第二个数据包

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

我知道我可以对其进行设置,以便它发送我确认的数据,并且客户端不会发送更多数据,我已确认已处理最后一 block ,但我宁愿不发送

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

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

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

关于python - 拆分 python 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3914542/

相关文章:

python - 基于另一只 Pandas 聚合一列

linux - 线程池中的段错误

c++ - 与 Minecraft bukkit 服务器握手 - 发送服务器主机字段失败

python - 为什么我的学位争论表现得很奇怪?

python - 根据多个QComboBox的文本启用或禁用QDialogBu​​ttonBox

java - 如何在普通java项目中导入android.os.bundle格式?

java - 如何在代理链后面运行java

c++ - FD_READ : recv() returning two packets at once

python - 动态填充字典

java - 具有消费者-生产者设计的 TCP 套接字服务器 'cpu time limit exceeded'