只能从控制台读取一行输入然后没有任何反应:Java

时间:2011-10-15 07:22:34

标签: java loops console

您可以看到我发布的代码here。我的原始问题或多或少得到了解决,但现在我遇到问题标题中描述的问题。这是问题:在任何给定客户端的客户端输入命令后,我无法输入其他命令。第一个命令可以正常工作(减去/退出;还没有弄清楚它应该如何工作),之后就做不了什么。例如,我可以做/注册(登录),但之后没有别的。我可以进入客户端的另一个实例并列出所有当前用户和/ list(工作),但在此之后我再也无法输入其他命令 - 控制台将不会在第一个之后接受它们。知道可能会发生什么导致这种情况吗?

以下是我所指的地方(Code in its entirety):

while((keyboardInput = keyboardInputScanner.nextLine()) != null){
                System.out.println("Input '" + keyboardInput + "' read on client side.");
                if(keyboardInput.equals("/exit")){
                    socketOut.println("/exit");
                    socketOut.close();
                    socketIn.close();
                    serverSocket.close();
                }else{
                    socketOut.println(keyboardInput);
                }
                while((serverInput = socketIn.readLine()) != null){
                    System.out.println(serverInput);
                }
            }

我相对肯定这与没有突破内部while循环有关,但我不知道任何解决方法。如果我把那个while循环放在键盘输入循环之外,我将永远不会从服务器返回任何东西。

1 个答案:

答案 0 :(得分:1)

我认为问题在于:

while((serverInput = socketIn.readLine()) != null){
    System.out.println(serverInput);
}

这将无限循环(好吧,直到套接字在另一端关闭)。因此,您永远不会进入外循环的第二次迭代。

您可能希望将响应限制为一行,或者让服务器使用其他机制让客户端知道何时停止从socketIn读取(例如,在每个服务器的末尾发送一个空行)响应并让客户端看到内部循环时跳出内部循环。