服务器如何判断客户端非正常掉线-心跳连接

心跳:如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭。为什么需要心跳连接主要是判断当前连接是否是有效的、可被使用的。在实际应用中假设一段时间没有数据传输时候理论上说应该连接是没有问题的,但是网络复杂,中途出现问题也是常见的,网线被掐断了、对方进程挂掉了、频繁丢包等,这时候TCP连接是不可使用的,但是对于应用层并不知道,如果需知道网络情况则要很复杂的超时进行了解,TCP从底层就实现了这样的功能。心跳机制是TCP在一段时间间隔后发送确定连接端是否还存在,如果存在的话就会回传一个包确定网络有效,如果心跳包有问题,则通知上层应用当前网络有问题了。

  1. public void heartCheck(final ClientSocket socket){  
  2.         //心跳连接(检查断链) 服务器断线重连  
  3.         new Thread(new Runnable() {  
  4.               
  5.             public void run() {  
  6.                 while (true) {    
  7.                     if(socket.isConnectStatus()==false)break;  
  8.                     try {  
  9.                         socket.sendHeartCheck();//socket.sendUrgentData(0xFF);  
  10.                         //System.out.println("目前是正常的!");    
  11.                         Thread.sleep(10 * 1000);    
  12.                     } catch (IOException e) {  
  13.                         // TODO Auto-generated catch block  
  14.                         System.out.println("心跳检测到客户端"+socket.getServer_Id()+"掉线");  
  15.                         socket.destroy();  
  16.                         break;  
  17.                     } // 发送心跳包    
  18.                     catch (Exception e) {  
  19.                         // TODO Auto-generated catch block  
  20.                         //e.printStackTrace();  
  21.                     }  
  22.                 }    
  23.                   
  24.             }  
  25.         }).start();  
  26.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值