如何检测到socket中断连接是不是中断了

lily_better 的BLOG
用户名:lily_better
文章数:66
访问量:3575
注册日期:
阅读量:5863
阅读量:12276
阅读量:337181
阅读量:1040766
51CTO推荐博文
一般都是靠心跳包来检测java socket tcp连接判断客户端中断 心跳简单实现
最近做android程序开发,当中遇到一个问题,当客户端网络异常中断时,服务器端会抛出异常,利用这个异常可以判断客户端掉线,从而做其他的逻辑处理,但是,当类似于“悄悄”拔掉网线这样的断线,服务器端却不会抛异常,我用的是java连接池,socket长连接,在read()堵塞等待的时候也不会出问题,在网上查说是什么要两小时服务器端才会知道!
合理的解决方案就是做心跳处理,本来嫌麻烦,后来想想其实不麻烦的,只是在客户端新开一个线程,然后while,里面sleep(5000)+向网络发送一个数据,也就是每五秒发送一个数据,这个数据最好跟正常的数据分开,简单些,然后在客户端设置socket.setSoTimeout(10000);,也就是说如果10秒钟没接收到数据的话就抛异常,这样就可以了。最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。首先想到socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。然后想到是否可以通过OutputStream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping,但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。最后又回到socket类,发现有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,太好了,正是我需要的!于是,下面一段代码就可以判断远端是否断开了连接:try{
socket.sendUrgentData(0xFF);}catch(Exception ex){
reconnect();}
了这篇文章
类别:未分类┆阅读(0)┆评论(0)如何判断一个socket连接的远程服务器是否已经断开了? - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
t连接的远程服务器是否已经断开了?
里面看看就行~希望能帮到你,给个好评哦,谢谢了
您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
一种带有断开恢复功能的Socket 通信方法
下载积分:300
内容提示:一种带有断开恢复功能的Socket 通信方法一种带有
文档格式:PDF|
浏览次数:671|
上传日期: 03:50:25|
文档星级:
该用户还上传了这些文档
一种带有断开恢复功能的Socket 通信方法
官方公共微信C++ 如何判断Socket连接是否断开 ?
C++ 如何判断Socket连接是否断开 ?
09-09-23 &
连接后,把客户的socket都保存到一个数组中。保存时候最好使用键值对,键就是用户ID,值就是用户Socket   ,这样你就可以区分是哪个用户的连接了,然后在执行相映的操作
请登录后再发表评论!
蔬菜和水果富含维C,如猕猴桃、哈密瓜、青椒、黄瓜、西红柿、小白菜、鲜枣、橘子、葡萄汁、橙汁、草莓、等。其中弥猴桃,号称维C之王;其次是大枣、木瓜;果蔬中的西红柿和尖椒都含有丰富的维C。
请登录后再发表评论!&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 c socket中断处理 的文章

 

随机推荐