处理碎片UDP

时间:2013-04-25 23:35:23

标签: network-programming udp

好的,在有人要求之前,TCP不是一个选项。

所以,我正在通过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片段吗?

1 个答案:

答案 0 :(得分:3)

不,不可能。 UDP数据报是完整的,完整的或根本不传递。您不必担心交错或重组。您需要担心的是未送货,重复送货和无序送货; - )

如果您认为自己看到了碎片,那么您的代码中确实会看到编程错误。