Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字-接收空白缓冲区_Java_Sockets_Serversocket - Fatal编程技术网

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