Java Sockets - 接收空白缓冲区

标签 java sockets serversocket

我在读取 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.

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

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

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

关于Java Sockets - 接收空白缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52320055/

相关文章:

java - 客户端(Java)未连接到服务器(Kotlin)Android Studio,出了什么问题?

java - 我可以只使用关键字段来检查是否相等吗?我可以通过子类使用 equals 吗?

java - lucene standardanalyzer是否删除停用词并具有词干提取功能?

java - 我无法在同一个文件上写入两次(java)

java - 连接到局域网

java - 通过 ServerSocket 充当服务器的 Java 类可以在线托管吗?

java -/src 文件夹之外的 Eclipse 验证

java - 从 XML 文件 java 程序中删除节点

sockets - 为什么在并发连接到服务器时接受两个相同的 5 元组套接字?

c - 套接字编程: Using fixed IP to bind server and configurable at client side