我在阅读InputStream
的Socket
时得到了一个奇怪的结果。当我从我的程序发送数据时,我得到一个有效的结果ONCE。当我从单独的程序中执行此操作时,我获得了有效数据,但服务器继续读取相同的消息,即使我不发送任何内容,只需连接到我得到空数组的套接字。
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:
返回:
读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,则返回-1。
您的代码完全没有检查结果。您假设所有字节都被读取,而这根本不起作用(有时)。
换句话说:总是总是,当你调用一些返回这样一个值的read()
方法时,你的代码必须检查结果,以确保通过读取实际接收(预期的)数据。
最有可能的是,这是您问题的一部分。但要确定,您需要通过更多信息来增强您的问题。