首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

socket心跳包解决办法

2012-01-10 
socket心跳包问题1:服务器要判断客户端是否保持连接,心跳包怎么实现啊,最好给点代码学习一下问题2:读写数

socket心跳包
问题1:服务器要判断客户端是否保持连接,心跳包怎么实现啊,最好给点代码学习一下
问题2:读写数据超时是用setSoTimeout()吗?


[解决办法]
1、在交互线程中设置一个Timer,每隔a秒向客户端发送一个简单的询问包,客户端收到后返回一个简单的答复语句则表示依然连接中。如发送后b秒未收到答复则表示客户端已经失去连接
2、参加API,setSoTimeout()需要在阻塞前调用,阻塞超过指定时间后会停止阻塞并抛出java.net.SocketTimeoutException
[解决办法]
有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的。

下面一段代码就可以判断远端是否断开了连接:

try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect(); //说明断开了.
}

热点排行