代码之家  ›  专栏  ›  技术社区  ›  Xinus

如何将数据拆分为具有可变头大小的等大小数据包。

  •  0
  • Xinus  · 技术社区  · 15 年前

    我正在用Python构建对等应用程序。它将在UDP上工作。我调用了函数 getHeader(packetNo,totalPackets) 它将返回该数据包的头。根据头的大小,我正在切碎数据,将数据附加到头上并获取相同的数据包大小。

    头大小不固定,因为不同位数所消耗的长度不同,例如,我将packetno=1的头写入为 PACKET_NO=1 ,其长度对于10号、100号包装不同。等

    我目前不包括头中的任何数据包。我只包括包号,我想包括它,但是在计算头的大小之前,我怎么知道没有包,因为头现在应该不包含任何包,并且没有任何长度的包。

    我可以通过一些函数来传递它,这些函数将计算包的数量,但这将类似于蛮力,并且会消耗不必要的时间和处理能力。有什么聪明的方法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Cat Plus Plus    15 年前

    不要使用纯文本。使数据包的头成为两个压缩的4字节(或8字节,取决于您期望的数据包数量)整数,例如。

    import struct
    header = struct.pack('!II', packetNo, totalPackets)
    

    Here's documentation 对于 struct 模块。

        2
  •  0
  •   PaulMcG    15 年前

    为什么不零填充数据包的数量,这样头就固定了。假设您希望在一条消息中支持10亿个数据包:

    PACKET_NO=0000000001
    

    与以下长度相同:

    PACKET_NO=1000000000
    

    当然,这将在可能的数据包数量上创建一个上限,但是必须 一些 上限,不是吗?