首页 > 解决方案 > Java Sockets - 接收空白缓冲区

问题描述

我在阅读InputStreamof 时得到了一个奇怪的结果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();
        }
    }

输出(仅连接到套接字):

0 0 0 0 0 0 0 0 

标签: javasocketsserversocket

解决方案


引用 javadoc 的read()

回报:

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

您的代码根本没有检查该结果。您假设所有字节都已读取,但这根本不起作用(有时)。

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

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


推荐阅读