当前位置: 技术问答>java相关
怎样判断socket断开并自动重连?
来源: 互联网 发布时间:2015-08-20
本文导语: 在用socket通讯过程中经常会发生socket异常断开的情况,故请教各位高手 | 在每次要向服务器发送数据的时候判断socket是否断开,如果断开则连接。 如果要实现在没有向服务器发送请求的时候...
在用socket通讯过程中经常会发生socket异常断开的情况,故请教各位高手
|
在每次要向服务器发送数据的时候判断socket是否断开,如果断开则连接。
如果要实现在没有向服务器发送请求的时候也能检查是否断开,那就启一个线程,
再线程中不停的检查socket是否断开,如果是连接,则睡眠会,醒来继续检查是否断开。这样做需要消耗很多资源。如果你的系统认为保持连接非常重要的话就可采用这个办法。否则还是不要这样做的好。
如果要实现在没有向服务器发送请求的时候也能检查是否断开,那就启一个线程,
再线程中不停的检查socket是否断开,如果是连接,则睡眠会,醒来继续检查是否断开。这样做需要消耗很多资源。如果你的系统认为保持连接非常重要的话就可采用这个办法。否则还是不要这样做的好。
|
楼上的方法效率很低哦。
你可以自定义一个监听器,catch到错误的时候,通知监听器,然后建立连接。
或者也可以用while(ture)循环
你可以自定义一个监听器,catch到错误的时候,通知监听器,然后建立连接。
或者也可以用while(ture)循环
|
如果只用线程监测是否处于连接状态好像不行,资源浪费并且起不到应有的效果!
因为是否连接良好是要在通讯的过程中监测的,Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说你在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高吧)!除非你把优先级设得比较高,如果这样的话就太浪费资源了(辅助线程比主要线程的优先级高更是笑话),所以用监测线程就不大适合了。
如果你需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法是,其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)!
因为是否连接良好是要在通讯的过程中监测的,Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说你在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高吧)!除非你把优先级设得比较高,如果这样的话就太浪费资源了(辅助线程比主要线程的优先级高更是笑话),所以用监测线程就不大适合了。
如果你需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法是,其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)!
|
try catch,在异常中重连。
|
isClosed
public boolean isClosed()
Returns the closed state of the socket.
Returns:
true if the socket has been closed
Since:
1.4
See Also:
close()
不过只能在1.4上用,而且是客户端有效,服务器端无法根据此函数判断
public boolean isClosed()
Returns the closed state of the socket.
Returns:
true if the socket has been closed
Since:
1.4
See Also:
close()
不过只能在1.4上用,而且是客户端有效,服务器端无法根据此函数判断
|
你要设置超时!!!!!
网络出错不是立即就发现的!!要判断是否超时!
搞明白网络传输的原理你就明白了!
网络出错不是立即就发现的!!要判断是否超时!
搞明白网络传输的原理你就明白了!