Java 套接字 - 接收空白缓冲区
Java Sockets - receiving blank buffer
我在阅读 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.
您的代码只是 根本没有 检查该结果。您假设所有字节都已读取,但这根本行不通(有时)。
换句话说:always always always,当你调用一些read()
方法得到returns这样的值时,你的代码absolutely必须检查结果确保通过读取实际接收到(预期的)数据。
这很可能是您问题的一部分。但要真正确定,您需要使用更多信息来增强您的问题。
我在阅读 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.
您的代码只是 根本没有 检查该结果。您假设所有字节都已读取,但这根本行不通(有时)。
换句话说:always always always,当你调用一些read()
方法得到returns这样的值时,你的代码absolutely必须检查结果确保通过读取实际接收到(预期的)数据。
这很可能是您问题的一部分。但要真正确定,您需要使用更多信息来增强您的问题。