gpt4 book ai didi

java - 只能从控制台读取一行输入,然后什么也没有发生 : Java

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:42 24 4
gpt4 key购买 nike

你可以看到我发布的代码here 。我原来的问题或多或少得到了解决,但现在我遇到了问题标题中描述的问题。问题是:在任何给定客户端的客户端输入命令后,我无法输入其他命令。第一个命令可以正常工作(减去/exit;还没有完全弄清楚它应该如何工作),只是之后无法执行任何操作。例如,我可以执行/注册(登录),但之后就什么都没有了。我可以进入客户端的另一个实例,并使用/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 循环放在键盘输入循环之外,我将永远不会从服务器返回任何内容。

最佳答案

我认为问题出在这里:

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

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

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

关于java - 只能从控制台读取一行输入,然后什么也没有发生 : Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com