结束Java Socket的客户端连接

时间:2013-11-21 00:45:44

标签: java sockets system.exit

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

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

我试图将它放在我认为我从服务器返回输出的位置,请参阅下面的客户端,在while循环中有一个if循环查找“已注销”响应:

客户端:

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

在客户端服务器的while循环中没有if循环,一切都运行良好,但是在那里使用if循环,它需要一次命令,然后不再提示命令,并保持连接打开。在它不断提示用户输入命令并保持连接打开之前。

思想?

1 个答案:

答案 0 :(得分: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);  
}