【问题标题】:Messages lost while using java sockets readUTF使用 java 套接字时丢失的消息 readUTF
【发布时间】:2016-03-19 21:38:22
【问题描述】:

我整天都在处理一个问题,我用谷歌搜索了很多不同的方法,但我找不到解决办法,所以我客人是时候问了:

我正在尝试编写两个应用程序:客户端和使用 Java 使用套接字的服务器,除了一件事之外的所有内容都可以正常工作:客户端不会收到所有消息,而只会收到配对消息。

我正在做的是循环一个二维数组,以每隔“x”时间从服务器向客户端发送一条消息,但例如,如果循环发送 8 条消息,则客户端只接收消息 2、4、6 和 8。

我在服务器端控制台中打印了输出,以验证数组是否已填充属性并且服务器显示所有消息但不显示客户端。

我正在使用这个:

    DataOutputStream out = new DataOutputStream(outToServer);
        out.writeUTF(getMACAddress());
        InputStream inFromServer = client.getInputStream();
        DataInputStream in = new DataInputStream(inFromServer);
        while (true)
        {
            String input = in.readUTF();
            if (input.equals("finish"))
            {
                System.out.println("Server has closed the connection\nGoodBye!");
                System.exit(0);
            }
            else
            {
                System.out.println("Server says " + in.readUTF());
            }
        }

【问题讨论】:

    标签: java sockets


    【解决方案1】:

    问题是您读取input 以与"finish" 进行比较,然后您读取了一个从未比较过的全新字符串。

    相反,您应该在条件的else 分支中打印input,即

    while (true) {
        String input = in.readUTF();
        if (input.equals("finish")) {
            System.out.println("Server has closed the connection\nGoodBye!");
            System.exit(0);
        } else {
            System.out.println("Server says " + input);
            //                                  ^^^^^
        }
    }
    

    【讨论】:

    • 哇,你真棒......这个“小”错误让我整个下午都停下了脚步
    • @Alecks 欢迎您!如果这解决了您的问题,请考虑通过单击旁边的复选标记来接受答案。这会让其他网站访问者知道您不再寻找改进的答案,并为您赢得 Stack Overflow 上的新徽章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2017-02-16
    相关资源
    最近更新 更多