“Javaclient端怎么判断server端socket是否已经断开”:
关键词:javaclient 端 怎么 判断 server 端 socket 是否 已经 断开
java client端如何判断server端socket是否已经断开
最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。
首先想到socket类的方法isclosed()、isconnected()、isinputstreamshutdown()、isoutputstreamshutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。
然后想到是否可以通过outputstream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping,但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。
最后又回到socket类,发现有一个方法sendurgentdata,查看文档后得知它会往输出流发送一个字节的数据,只要对方socket的so_oobinline属性没有打开,就会自动舍弃这个字节,而so_oobinline属性默认情况下就是关闭的,太好了,正是我需要的!
于是,下面一段代码就可以判断远端是否断开了连接:
try{
socket.sendurgentdata(0xff);
}catch(exception ex){
reconnect();
}