我有一个Java的TCP服务器应用程序。当客户端连接时,它会尝试从连接中读取数据包。但是,即使客户端没有发送任何内容,它也会读取。我得到的是由0初始化的字节数。我希望套接字等待,并最终超时,直到某些数据到来。
然而,它反而像这样奇怪。
这有什么问题以及如何解决这个问题?
这是我从套接字中读取的方式:
byte bytes[] = new byte[25];
socket.getInputStream().read(commandBytes);
答案 0 :(得分:-1)
.read
返回读取的字节数。您需要在使用缓冲区之前检查它。在您的情况下,可能是-1
,意思是客户端没有发送任何数据
答案 1 :(得分:-1)
我得到的是由0初始化的字节数。
您得到的是read()
方法的返回值,它告诉您读取了多少字节,或-1表示流的结束,即对等方已关闭连接。由于您忽略了此值,因此您的代码不正确。
我希望套接字等待,并最终超时,直到有些数据出现。
由于您没有设置超时,因此不会超时:它将阻塞,直到数据到达或流结束。
然而,它反而像这样奇怪。
除了你的期望外,没有什么奇怪的。