如何将数据分割成具有可变头部大小的相等大小数据包?
我正在用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
模块的文档。