繁体   English   中英

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

[英]Java - Client recieving blank messages from Server, but only over network

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

客户端可以很好地连接到服务器,发送给客户端的第一条消息应该是“ Server:Hello,World!”,但是会出现一个空字符串。 然后,总是按原样读取第二个字符串,其余所有通常以空白字符串形式出现。 服务器使用自动刷新功能通过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;
    }

(快速编辑:自从我在类上实现Runnable以来,应该提到这是在run方法内的while循环中。)

使用input.readLine()时,我是否应该先检查一下内容以确保它不会只是空字符串而出现? 是因为我超时了吗?

在此先感谢您,我还要提一下我是stackoverflow的新手,如果我做错了什么,请说! :)

好吧 原来这与超时时间太短有关。 我花了整整一秒钟的时间,现在可以正常打印了。 无论如何,谢谢大家:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM