2011-03-29 130 views
0

我正在使用Java Socket API進行通信。但有時候,我正在將數據包附加到單個數據包中。我怎樣才能避免相同。有什麼方法可以解決Java NIO或Java NIO 2中的問題。我確信數據包是分開來的。但是都存儲在單個緩衝區中。Java Socket問題,緩衝區同時接收兩個數據包。

請注意,在這裏Packet只是數據的邏輯分離而已。數據由第三方系統發送。他們一一發送。但我同時收到兩個數據包。

回答

4

這是它應該工作的方式。 TCP使用數據包來傳輸數據,但它不能從高級套接字API中看到:您打開輸出流併發送儘可能多的數據。這些數據被TCP/IP協議棧分成數據包。而在接收端,你打開一個輸入流並接收數據,而不知道它已被分成數據包。

如果你想要兩個應用級數據包,然後設計一個傳輸協議,在你的數據包之間使用分隔符,或者固定大小的數據塊,或者其他任何可以區分什麼是邏輯數據包的一部分和什麼是下一個。

+0

+1:總之你只有一個字節流。數據包或消息的任何概念都是您需要添加的錯覺。 – 2011-03-29 11:12:20

+0

我的意思是包意味着消息。它是由第三方系統發送的。 – Kamahire 2011-03-29 11:25:19

+0

@Kamahire:如果他們是由第三方系統發送的,他們應該有一些格式,你需要解析它。 – axtavt 2011-03-29 11:29:30