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

问题描述 投票:1回答:1

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

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 
java sockets serversocket
1个回答
2
投票

引用read()的javadoc:

返回:

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

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

换句话说:总是总是,当你调用一些返回这样一个值的read()方法时,你的代码必须检查结果,以确保通过读取实际接收(预期的)数据。

最有可能的是,这是您问题的一部分。但要确定,您需要通过更多信息来增强您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.