Java套接字很奇怪

时间:2014-12-07 15:08:13

标签: java sockets tcp tcpserver

我有一个Java的TCP服务器应用程序。当客户端连接时,它会尝试从连接中读取数据包。但是,即使客户端没有发送任何内容,它也会读取。我得到的是由0初始化的字节数。我希望套接字等待,并最终超时,直到某些数据到来。 然而,它反而像这样奇怪。
这有什么问题以及如何解决这个问题? 这是我从套接字中读取的方式:

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

2 个答案:

答案 0 :(得分:-1)

.read返回读取的字节数。您需要在使用缓冲区之前检查它。在您的情况下,可能是-1,意思是客户端没有发送任何数据

答案 1 :(得分:-1)

  

我得到的是由0初始化的字节数。

您得到的是read()方法的返回值,它告诉您读取了多少字节,或-1表示流的结束,即对等方已关闭连接。由于您忽略了此值,因此您的代码不正确。

  

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

由于您没有设置超时,因此不会超时:它将阻塞,直到数据到达或流结束。

  

然而,它反而像这样奇怪。

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