【问题标题】:Split up python packets?拆分python数据包?
【发布时间】:2010-10-13 00:56:54
【问题描述】:

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

所有相关的套接字数据

【问题讨论】:

    标签: python sockets packets


    【解决方案1】:

    基本上有两种方法:

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

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

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

    【讨论】:

      【解决方案2】:

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

      是的。使用 UDP 而不是 TCP。

      【讨论】:

        【解决方案3】:

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

        Python 网络框架,例如 twisted 直接支持 网络字符串。

        【讨论】:

          猜你喜欢
          • 2018-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          相关资源
          最近更新 更多