2013-04-25 64 views
0

好的,在任何人询问之前,TCP不是一个选项。处理零碎的UDP

所以,我通过UDP发送一些消息。每个消息在开始时都有一个4字节的长度字段。到目前为止,我一直在使用这个字段来确定我是否有完整的消息。

但我想,如果我有两个大的消息,足够大,它们都是碎片是这样的:

Message 1 
Length 1 | Fragment 1-1 | Fragment 1-2 | Fragment 1-3 

Message 2 
Length 2 | Fragment 2-1 | Fragment 2-2 | Fragment 2-3 

和我后,立即另送一个,就是他们有可能被传递交错像这样:

Length 1 | Length 2 | Fragment 1-1 | Fragment 2-1 | Fragment 1-2 | Fragment 2-2 | Fragment 1-3 | Fragment 2-3 

如果是这样,如果我没有任何控制消息是如何分散的,我怎么可能重新组装这些?

编辑:另外..它刚刚发生在我身上,UDP可能不会碎片,我看到的“碎片”可能是通过调用具有固定大小缓冲区的.receive()方法。所以也许这不是问题。任何人都可以确认如果UDP碎片?

+0

这里有两种不同的碎片类型:UDP本身的碎片和其次如何将大型消息分成多个UDP数据包。 – 2013-04-25 23:54:09

回答

3

不,这是不可能的。 UDP数据报完整且完整地传递或完全不传递。您不必担心交错或重新组装。所有你必须担心的是未送货,重复送货和乱序送货;-)

如果你认为你看到碎片,你真的看到了代码中的编程错误。

+0

感谢您确认我的怀疑(我添加了一个编辑)。我很高兴这是我所担心的“所有”。 – ConditionRacer 2013-04-26 00:40:50