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

时间:2009-09-27 10:06:58

标签: python sockets udp packets

我正在python中构建点对点应用程序。它将通过UDP工作。我有一个名为getHeader(packetNo,totalPackets)的函数,它返回该数据包的标题。根据标题的大小,我正在切割数据,将数据附加到标题并获得相同的数据包大小。

标题大小不固定,因为不同数字所消耗的长度不同,例如我正在为packetNo = 1编写标题为PACKET_NO=1,它的长度将因packetNo 10,100,...等而不同

我目前没有在标头中包含任何数据包。我只是包括数据包编号,我想要包含它,但是如何在计算标头大小之前不知道数据包,因为标头现在应该不包含数据包而NO_OF_PACKETS = ---可以是任何长度。

我可以通过一些函数来传递它,这个函数不会计算数据包,但这会像暴力一样,会消耗不必要的时间和处理能力。有没有聪明的方法呢?

2 个答案:

答案 0 :(得分:2)

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

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

Here's documentation

答案 1 :(得分:0)

为什么不对您的数据包进行零填充,以便标头变得固定。假设您想在消息中支持10亿个数据包:

PACKET_NO=0000000001

的长度与:

相同
PACKET_NO=1000000000

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