将几个DatagramPackets重组为单个字节[]

时间:2015-02-12 16:57:07

标签: java udp bytearray datagram

前言:我根本没有经验,可能犯了愚蠢的错误。请纠正这些错误并告诉我如何变得更好而不是因为无知而指责我,如果我因为缺乏知识而已经谦卑,我就不需要寻求帮助。我在互联网上搜索了一个解决方案,但也许我选择了所有错误的关键字。

我必须使用UDP而不是TCP(太长时间无法解释),我需要从客户端向服务器发送一个大字节[],它不适合单个DatagramPacket。因此,我决定在创建DatagramPackets之前将byte []拆分为不超过1024的块

问题:一旦服务器收到数据包,它们当然就会出现故障。我需要一种方法将可变数量的DatagramPackets重新组装回单个字节[]

我的计划:使用上述DatagramPacket中每个字节[]的元数据创建一个新的byte [](例如,拆分后的总数据包,特定数据包的位置,数据包组UUID)并预先挂起到每个datagramPacket。

byte[] (UUID idOfPacket + int positionOfPacket + int numberOfPackets) + byte[] data(not actual code just so you get an idea of how I want to arrange the byte[] incase my description was bad)

因为我不知道如何确定元数据何时结束并且原始数据包数据开始我认为我可以使用设置字节长度的元数据所以我总是可以在服务器上的某个点拆分并重新组合基于来自元数据的信息。

问题:这似乎是一个坏主意,因为一旦部署,我将永远无法调整元数据的格式。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的想法不错。许多协议使用它。您可以提供足够的字节以允许最坏的情况。

例如:

idOfPacket:  16 bytes (128 bits)
positionOfPacket:  4 bytes (4294967296)
numberOfPackets:  4 bytes (4294967296)

或者你可以做的是有一个字节(或字节)(让我们称之为大小字节)告诉你这些字段有多长(以字节为单位)。但那要困难得多。

sizeOfId:  1 byte (value would be 16 for this example)
sizeOfNumberOfPackets: 1 byte (value would be 4 for this example)
idOfPacket:  16 bytes (128 bits)
positionOfPacket:  4 bytes (4294967296)
numberOfPackets:  4 bytes (4294967296)