我在localhost上測試我的程序,當我想從客戶端發送到服務器文件時,例如jpg,我想用我的頭將數據拆分爲100byte片段在我的548片段之後出現這樣的錯誤。服務器打印接收的內容。Java UDP服務器 - 客戶端通信 - 發送片段(片段發送失敗)
RECEIVED: 43749 | 1 | 546 | 1176 | jpg
RECEIVED: 60251 | 1 | 547 | 1176 | jpg
RECEIVED: 53346 | 1 | 548 | 1176 | jpg
RECEIVED: 55018 | 1 | 737 | 1176 | jpg
第一個是校驗和第二個消息第三個分片第四個分片的最大個數和最後一個文件類型。到這一點,一切都正確sening正在較小的文件。什麼可能是錯誤的任何想法嗎?
是的,但它不能發生在本地主機上 – user3396072
實際上,它可以,規範沒有說任何關於「本地主機」的額外保證,所以根據你的OS網絡堆棧的實現以及你所使用的機器類型運行(例如多核或多CPU),你仍然可能不按順序獲取數據報。 請參閱http://stackoverflow.com/questions/2533873/why-do-i-get-udp-datagrams-out-of-order-even-with-processes-runnning-locally 甚至可以放鬆其中的一些 http://stackoverflow.com/questions/3034680/reliability-of-udp-on-localhost – zeppelin
注意這並不意味着你的問題是在網絡堆棧,它可能是一個應用程序級別的編程錯誤,沒有提供足夠的細節來說明這一點。 但問題是,你不能依賴UDP數據報以特定的順序傳送,或者根本無法傳送。 – zeppelin