Java套接字-接收空白缓冲区
读取Java套接字-接收空白缓冲区,java,sockets,serversocket,Java,Sockets,Serversocket,读取Socket的InputStream时,我得到了一个奇怪的结果。 当我从我的程序发送数据时,我得到一次有效的结果。 当我从单独的程序中执行此操作时,我会得到有效的数据,但服务器会继续读取相同的消息,即使我不发送任何内容,只要连接到一个套接字,我就会得到一个空数组 in = socket.getInputStream(); out = socket.getOutputStream(); dIn = new DataInputStream(in); while(this.isAlive())
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();
}
}
引用javadoc用于:
返回:
读取到缓冲区的总字节数,如果由于到达流的结尾而没有更多数据,则为-1
您的代码根本不检查结果。假设所有字节都已读取,但这根本不起作用(有时)
换句话说:总是,当您调用某个返回该值的read()
方法时,您的代码绝对必须检查结果,以确保(预期的)数据是通过读取实际收到的
很可能,这是你问题的一部分。但确实,您需要用更多信息来增强您的问题。您的代码至少包含一个重要的但是(这可能会导致各种各样的麻烦),但是您一定要阅读并增强您的问题。例如:缓冲区数组从哪里来?我很欣赏快速接受!谢谢,它现在可以工作了,我想它会阻塞线程并等待有一些字节可以读取,所以在这种情况下它不会打印出空数据。
0 0 0 0 0 0 0 0