Java 套接字 - 接收空白缓冲区

Java Sockets - receiving blank buffer

我在阅读 SocketInputStream 时得到了一个奇怪的结果。 当我从我的程序发送数据时,我得到了一次有效结果。 当我从单独的程序执行此操作时,我获得了有效数据,但服务器继续读取相同的消息,即使我不发送任何内容,只需连接到套接字我得到空数组。

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必须检查结果确保通过读取实际接收到(预期的)数据。

这很可能是您问题的一部分。但要真正确定,您需要使用更多信息来增强您的问题。