2014-12-07 49 views
0

我有一个在Java中的TCP服务器应用程序。当客户端连接时,它会尝试从连接中读取数据包。但是,即使客户端没有发送任何内容,它也会读取。我得到的是由0初始化的字节数。我期望套接字等待,并最终超时,直到有数据到达。但是,相反,它表现得很奇怪。
这是怎么回事,我该如何解决它?
以下是我从套接字读取:爪哇套接字行为奇怪

byte bytes[] = new byte[25]; 
socket.getInputStream().read(commandBytes); 
+0

我们可以看到代码吗? – Dima 2014-12-07 15:22:23

+0

当然。看我的帖子。 – Pavol 2014-12-07 15:34:16

回答

-1

.read返回读取的字节数。您需要在使用缓冲区之前检查它。你的情况,这是大概,-1,这意味着,客户端未发送任何数据

+0

-1的返回值意味着对等关闭了连接。 – EJP 2014-12-07 15:45:53

+0

是的,确切地说。关闭连接而不发送任何数据。 – Dima 2014-12-07 15:46:45

-1

我得到的是阿雷由0

初始化的字节你得到的是一个回报来自read()方法的值,告诉您读取了多少个字节,或者-1表示流的结束,即对等关闭了连接。由于你忽略了这个值,你的代码是不正确的。

我希望套接字等待,并最终超时,直到有一些数据来。

由于您没有设置超时,所以不会超时:它会阻塞,直到数据到达或流结束发生。

但是,相反,它表现得很奇怪。

没有什么奇怪的,除了你的期望。