Java - 客户端从服务器接收空白消息,但仅通过网络接收

时间:2014-06-10 09:02:07

标签: java sockets java-ee networking client

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

客户端连接到服务器很好,发送给客户端的第一条消息应该是“服务器:Hello,World!'”,但是会出现一个空白字符串。然后第二个字符串总是按原样读取,其余所有字符串通常都是空白字符串。服务器使用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的新手,如果我做错了请说! :)

1 个答案:

答案 0 :(得分:1)

好的,好吧。原来这是因为超时太小了。我把它放到一秒钟,现在打印出来很好。无论如何,谢谢人们:))