0

我在单个客户端和服务器之间有一个套接字连接。我已经在服务器端实现了登录、注销、发送和创建新用户等功能,然后向服务器和客户端输出不同的消息。

当用户使用注销功能同时服务器端仍在运行时,我需要实现连接关闭。我认为System.exit(0)在客户端的正确位置可以做到这一点,但我在实现它时遇到的麻烦比我想象的要多。

我试图把它放在我认为我从服务器获取输出的地方,见下面的客户端,在 while 循环中有一个 if 循环寻找“注销”响应:

客户:

                if(ins.readLine().contains("Logged Out"))
                {
                     System.exit(0);
                }
                else
                {
                     System.out.println(ins.readLine());
                }

如果客户端服务器的 while 循环中没有 if 循环,一切都可以正常工作,但是如果有 if 循环,它需要一次命令,然后不再提示输入命令,并保持连接打开。在它不断提示用户输入命令并保持连接打开之前。

想法?

4

1 回答 1

1

你读了两行而不是一行。一个在这里检查你从服务器得到什么:

if(ins.readLine().contains("Logged Out"))

另一个显示您从服务器获得的内容:

System.out.println(ins.readLine());

要解决此问题,请将服务器响应存储在变量中:

String serverResponse = ins.readLine();
if (serverResponse.contains("Logged Out")) {
  System.exit(0);
} else {
  // reuse serverResponse instead of reading another line...
  System.out.println(serverResponse);  
}
于 2013-11-21T00:52:17.850 回答