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

时间:2018-09-13 18:48:53

标签: java sockets serversocket

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

Socket

输出(仅连接到插座):

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();
        }
    }

1 个答案:

答案 0 :(得分:2)

将Javadoc引用为read()

  

返回:

     

读入缓冲区的字节总数,如果由于到达流的末尾而没有更多数据,则返回-1。

您的代码根本检查结果。您假设,所有字节均已读取,并且有时根本不起作用。

换句话说:永远总是总是,当您调用某个返回此类值的read()方法时,您的代码绝对必须检查结果以确保(预期)数据为实际上是通过阅读获得的。

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