如何将数据分割成具有可变头部大小的相等大小数据包?

0 投票
2 回答
983 浏览
提问于 2025-04-15 14:38

我正在用Python开发一个点对点的应用程序,这个程序会通过UDP协议工作。我有一个叫做 getHeader(packetNo,totalPackets) 的函数,它会给我返回这个数据包的头部信息。根据头部的大小,我会切割数据,把数据附加到头部上,确保数据包的大小保持一致。

头部的大小并不是固定的,因为不同数字所占的长度是不同的。例如,我为数据包编号为1写的头部是 PACKET_NO=1,而数据包编号为10或100时,头部的长度就会不同。

目前我在头部中没有包含数据包的总数,我只包含了数据包的编号。我想把总数也加进去,但我该如何在计算头部大小之前知道数据包的总数呢?因为头部现在需要包含总数,而 NO_OF_PACKETS=--- 的长度是不可预知的。

我可以通过某个函数来计算数据包的总数,但那样就像是暴力破解,会浪费不必要的时间和处理能力。有没有什么更聪明的方法呢?

2 个回答

0

为什么不在你的数据包数量前面加零,这样头部的长度就固定了呢?假设你想在一条消息中支持10亿个数据包:

PACKET_NO=0000000001

这个长度和:

PACKET_NO=1000000000

是一样的。

当然,这样做会给可能的数据包数量设定一个上限,但总得有个上限吧,对吧?

2

不要使用纯文本。把数据包的头部设计成两个打包的4字节(或者8字节,具体看你预计会有多少个数据包)整数,比如:

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

这里是关于 struct 模块的文档。

撰写回答