判断网络远端服务器是否断开连接(心跳连接:socket.sendUrgentData)

Posted 庚拓天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断网络远端服务器是否断开连接(心跳连接:socket.sendUrgentData)相关的知识,希望对你有一定的参考价值。

1.socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,这些方法都是本地端的状态,无法判断远端是否已经断开连接。

2.是否可以通过OutputStream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping。但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。

3.回到socket类,发现有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的。正是我们需要的!

于是,心跳连接的写法

try{
      socket.sendUrgentData(0xFF);
}catch(Exception ex){
      reconnect();
}





以上是关于判断网络远端服务器是否断开连接(心跳连接:socket.sendUrgentData)的主要内容,如果未能解决你的问题,请参考以下文章

Linux中TCP通信中 send函数 如何判断 何时断开连接了

socket 如何判断远端服务器的连接状态?连接断开,需重连

netty 心跳包和断线重连机制

Linux SO_KEEPALIVE属性,心跳

如何用C语言检测网络是不是连接上、已连接、已断开状态

JAVA 判断Socket 远程端是否断开连接