【问题标题】:Java - Client recieving blank messages from Server, but only over networkJava - 客户端从服务器接收空白消息,但仅通过网络
【发布时间】:2014-07-30 23:21:36
【问题描述】:

我不确定这个问题是否与网络有关,但我正在尝试让一个简单的服务器向多个客户端发送消息。在我自己的计算机上测试时它工作正常,但通过网络连接到另一台计算机时会出现问题。

客户端连接到服务器正常,发送给客户端的第一条消息应该是“服务器:你好,世界!”,但一个空白字符串通过。然后第二个字符串总是按原样读取,而所有其余的通常都作为空白字符串出现。服务器使用 autoflush 通过 PrintStream 发送信息。

下面是读取输入的客户端程序部分。我相信如果有的话,这里有一个问题,但我不确定是什么,因为我对套接字和网络事物有点陌生。服务器每 500 毫秒发送一行文本,计数到每个客户端。我尝试将此数字更改为更高的数字,但客户端仍然没有收到正确的消息。客户端应收到消息并将它们打印到屏幕上,并在 5、10、15 和 20 处回复如下所示的回复。

    try {
        socket.setSoTimeout(10);
        String line;
        while((line = input.readLine())!=null){
            if (!line.equals("")){
                // Replies
                if (output != null) {
                    if (line.endsWith(" 20")){
                        output.println("Reached 20!");
                    }else if (line.endsWith(" 15")){
                        output.println("Reached 15!");
                    }else if (line.endsWith(" 10")){
                        output.println("Reached 10!");
                    }else if (line.endsWith(" 5")){
                        output.println("Reached 5!");
                    }
                }

                messages.add(line);
                if (messages.size() >= 8){
                    messages.remove(0);
                }
            }else{
                messages.add("EMPTY STRING!!");
                if (messages.size() >= 8){
                    messages.remove(0);
                }
            }
        }
    } catch (SocketTimeoutException e){
        // Timed out
    } catch (Exception e) {
        System.err.println("Connection lost");
        break;
    }

(快速编辑:可能应该提到这是在 run 方法内的 while 循环中,因为我在我的类上实现了 Runnable。)

当使用 input.readLine() 时,我是否应该在之前检查一些内容以确保它不会只是空字符串?是因为我设置了超时吗?

提前致谢,我还要提一下我是stackoverflow的新手,如果我做错了什么,请说! :)

【问题讨论】:

  • 是的。原来它只是 .setSoTimeout(10),我把它设置为 1 秒 (1000),现在它工作正常。我想因为通过网络它要慢得多,所以需要更高的数字。我也可能会低于 1 秒,但这似乎足以满足我的需要。无论如何感谢人们。 :)
  • 可能想将您的评论放在答案中 - 您可以回答自己的问题。这样,人们就不会认为问题仍然悬而未决。

标签: java sockets jakarta-ee networking client


【解决方案1】:

好吧,好吧。原来这与超时太小有关。我把它放了一秒钟,现在它打印出来了。无论如何感谢人们:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多