2016-11-23 47 views
1

如果我有兩個連接到一個服務器,需要在一個通道上多次讀取才能完成數據包,我將如何知道哪個數據包與哪個數據包一起進行?如何用Java NIO套接字重組數據包

對於被接收爲四個交錯緩衝器例如兩個數據包:

  • PacketA緩衝器part1的
  • PacketB緩衝器part1的
  • PacketA緩衝器2部分
  • PacketB緩衝器2部分

的第一部分可能有一個標題,但第二部分可以在分組的任何地方分開到達。

當收到部分數據包時,如何知道哪個緩衝區在哪裏?

我在考慮建立一個映射關聯每個通道對象與其各自的輸出緩衝區,它將保存重組的數據包。這是它應該完成的方式嗎?

回答

1

確實,典型的做法是爲每個通道分別設置緩衝區。你不一定需要一張地圖。您可以將attach extra information分配給各個SelectionKey。每個鍵都可以包含您的代碼可以稍後檢索的對象。這是存儲緩衝區或一組緩衝區的便利場所。