2011-03-29 132 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