- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
你可以看到我发布的代码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/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!