Java Socket 死循环while如何判断客户端断开

Posted xiaobo-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Socket 死循环while如何判断客户端断开相关的知识,希望对你有一定的参考价值。

 

多线程的服务器程序 线程中等待客户端的消息 部分代码如下:
  
    boolean done=clientRequest.isConnected();//判断客户端Socket是否连接
    
    while(done)//客户端是连接的
    {
         try 
{
    input = clientRequest.getInputStream();
    Binput = new BufferedInputStream(input);
    str = "" + Binput.read();
             if(Binput.read()!= -1)//如果客户端有消息就打印出来
   {
System.out.println(str);
             }

          }
          catch (IOException e)
{
    e.printStackTrace();
}
 
         if(clientRequest.isclosed())//判断Socket是否关闭
{
   done=false;//如果关闭,就跳出无限循环(while)
}
    }

    我的代码能实现服务器与客户端的通信
    问题是: 当客户端中断或退出  以上代码却不能判断Socket中断 跳不出while的无限循环

 

解决方法:

1.  while(Binput.read()!= -1)  这种方法 能判断出客户端输入是否为空  客户端断开 能跳出死循环
                                   
2. 用下面的方法就没问题了  在死循环中加入以下代码 
try { 
socket.sendUrgentData(0); 
} catch (IOException e) { 
     done= false;    //如果抛出了异常,那么就是断开连接了  跳出无限循环

以上是关于Java Socket 死循环while如何判断客户端断开的主要内容,如果未能解决你的问题,请参考以下文章

while true 死循环判断端口按顺序启动应用

java web----socket基础

STM32 硬件I2C 死循环 自动退出

java iterator hasnext() 死循环

廖雪峰Java1-3流程控制-5循环

java基础循环语句