2011-10-17 34 views
1

我讀了this question about the error that I'm getting,我瞭解到UDP數據有效載荷不能超過64k。我讀過的建議是使用TCP,但在這種情況下這不是一種選擇。我正在通過UDP傳輸數據的外部系統進行連接,但此時我無法訪問該外部系統,所以我正在模擬它。在Java中,如何處理大於最大UDP數據負載的UDP消息?

在某些情況下,我有超過1,400,000字節的數據消息,並且需要使用UDP協議。我無法更改協議(我更願意使用TCP或基於UDP的可靠協議)。相反,我必須找到一種方法,通過UDP將測試應用程序中的大型有效負載傳輸到我正在構建的系統中,並讀取系統中正在構建的大型有效負載。我不必擔心丟包,如果我沒有收到數據報,我不在乎 - 等待下一個有效負載到達。如果它不完整或丟失,請將它全部丟棄並繼續等待。我也不知道數據報的大小(它們的範圍從幾百字節到1,400,000多字節)。

我已經將我的發送和接收緩衝區大小設置得足夠大,但這還不夠。否則我可以做什麼?

+1

他們如何發送有效載荷大於最大尺寸?我的意思是,你需要將它們編組/合併成合法大小的信息。 – 2011-10-17 13:27:48

回答

4

UDP數據包有一個16位長的字段,它與Java沒有關係,它們不能大一些,如果你所說的服務器是不可變的,那麼你就會被卡住如果你可以更改服務器和協議,你可以自己重新實現TCP,因爲UDP被定義爲不可靠的,所以你需要完全的重傳機制來處理那些正在運行的數據包在網絡上某處。所以,你必須把'消息'分成塊,發送塊,並且有一個協議來請求重傳丟失的塊。

0

這是一個要求......

要求也應該因此決定了打包技術。您需要有關外部系統及其協議的更多信息。請注意,一旦路由器參與,最大IPv4 UDP有效負載爲65535-28字節,並且最大有效負載爲< 1500字節。