我正在使用 Sockets api 在 Java 中创建一个网络游戏,并遇到以下问题:
当应用程序启动时,服务器套接字开始侦听并为每个新客户端生成一个新线程(基本的东西,不需要显示此代码)。
然后客户端开始对话,发送字符串“LOGIN”。服务器接收它并以“LOGIN_OK”响应。现在对话结束了,但控制台继续打印 LOGIN_OK(发生在客户端上)。
为什么会发生这种情况?readLine() 不应该阻塞吗?感谢您的澄清!
编辑:问题出在客户端循环中。客户端正在将服务器的响应发送回服务器!刚刚注释掉那行就解决了!
服务器循环
public void run()
{
String fromClient = null;
try {
while ((fromClient = in.readLine()) != null) {
System.out.println(fromClient);
String response = SessionProtocol.handleInput(fromClient);
out.println(response);
Thread.sleep(50L);
}
} catch(IOException ex){ex.printStackTrace();}
catch(InterruptedException ex){ex.printStackTrace();}
}
客户端循环
public void run()
{
String fromServer = null;
try {
while ((fromServer = in.readLine()) != null) {
System.out.println(fromServer);
String response = SessionProtocol.handleInput(fromServer);
// next line causes the problem
//out.println(response);
Thread.sleep(50L);
}
} catch(IOException ex){ex.printStackTrace();}
catch(InterruptedException ex){ex.printStackTrace();}
}