問題:損壞的TCP段。SocketChannel.write(ByteBuffer [])「破壞」數據
我在SocketChannel中反覆發送一個ByteBuffers序列。該順序如下:
\r\n
length of chunk (example: fff)
\r\n
chunk data (rubbish, a 1000 - 5000 character long string)
\r\n
length of next chunk (example: fff)
\r\n
next chunk data (rubbish, a 1000 - 5000 character long string)
...
我希望你看到的格局。網絡級別的MTU大約是1500,所以它會創建TCP段來發送「塊數據」。
段中的問題是:以某種方式(?),隨機地(?),段(其有效載荷)首先以\ r \ n開頭,而不是先從「塊數據」中剩餘的字節開始。
所以,你得到例如:
(segment 1)
\r\n
length of chunk (example: fff)
\r\n
chunk data (456 bytes)
(segment 2)
\r\n
chunk data (remaining 156 bytes)
length of next
\r\n
相反的:
(segment 1)
\r\n
length of chunk (example: fff)
\r\n
chunk data (456 bytes)
(segment 2)
chunk data (remaining 156 bytes)
\r\n
length of next
\r\n
我想知道,如果Java代碼甚至能引起的是,知道我的「塊數據」 ByteBuffer正確發送,除了包含\ r \ n的ByteBuffer加入... 歡迎任何幫助,謝謝你的時間!
Andrew
我們看一些代碼。問題不大可能出現在Java庫,操作系統或網絡級別。 – NPE 2011-03-30 15:23:29
感謝您的回覆,但我目前只是在查找「已知問題」,因爲SocketChannel在到達使用寫入點(ByteBuffer [])之前經過了大約20個類:-( – AndrewBourgeois 2011-03-30 15:39:58
)數據如何排列ByteBuffer。我認爲每個ByteBuffer都包含一個帶有標題的完整消息,因此不可能改變數據的順序。 – 2011-03-30 15:46:37