我在读取 Socket
的 InputStream
时得到了奇怪的结果。
当我从程序发送数据时,我会得到一次有效的结果。
当我从单独的程序中执行此操作时,我得到了有效数据,但服务器继续读取相同的消息,即使我不发送任何内容,只需连接到套接字我就会得到空数组。
in = socket.getInputStream();
out = socket.getOutputStream();
dIn = new DataInputStream(in);
while(this.isAlive()) {
try {
dIn.read(buffer);
StringBuilder builder = new StringBuilder();
for(int i = 0; i < buffer.length; i++) {
builder.append(buffer[i]).append(" ");
}
builder.append("\n");
System.out.println(builder.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
输出(仅连接到套接字):
0 0 0 0 0 0 0 0
最佳答案
引用 read() 的 javadoc :
Returns:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
您的代码根本不检查该结果。您假设所有字节都已读取,但这根本不起作用(有时)。
换句话说:总是总是总是,当您调用某个返回此类值的 read()
方法时,您的代码绝对必须检查结果以确保(预期的)数据通过读取实际收到了。
这很可能是您问题的一部分。但为了真正确定,您需要使用更多信息来增强您的问题。
关于Java Sockets - 接收空白缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52320055/