2013-04-25 69 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