结束 Java Socket 的客户端连接

Posted

技术标签:

【中文标题】结束 Java Socket 的客户端连接【英文标题】:Ending Client Connection of Java Socket 【发布时间】:2013-12-05 07:00:00 【问题描述】:

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

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

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

客户:

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

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

想法?

【问题讨论】:

【参考方案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);  

【讨论】:

以上是关于结束 Java Socket 的客户端连接的主要内容,如果未能解决你的问题,请参考以下文章

java网络-Socket

java网络-Socket

socket(java)

Java 服务器和 socket.io

Socket.io 客户端在突然断开连接后无法重新连接到服务器

Socket.IO 客户端在 3g/4g 连接上无法正常工作