您可以看到我发布的代码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循环放在键盘输入循环之外,我将永远不会从服务器返回任何东西。
答案 0 :(得分:1)
我认为问题在于:
while((serverInput = socketIn.readLine()) != null){
System.out.println(serverInput);
}
这将无限循环(好吧,直到套接字在另一端关闭)。因此,您永远不会进入外循环的第二次迭代。
您可能希望将响应限制为一行,或者让服务器使用其他机制让客户端知道何时停止从socketIn
读取(例如,在每个服务器的末尾发送一个空行)响应并让客户端看到内部循环时跳出内部循环。