本人在做一个点菜系统,之前采用的是短连接方式,由于用户体验比较差(采用3G网络,有的时候延时比较大),老板让我用长连接的方式与服务器连接,比短连接少了个Connection的过程,稍微快一些,但是也存在一些问题,比如网络状况不好,或者断掉,我把3G网络断掉又开启(程序开着),中间也没有捕获到异常,用socket.isConnected()显示是true,还有
try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
也没捕获到异常,我是想如果检测出socket连接如果断掉的话就重新Connection一些,可是那些检测的方法貌似都不行,
socket.getInputStream() 和socket.getOutputStream()也都没有捕获到异常。请问有没有有效的检测socket连接异常的方法?如果哪位大侠用心跳的方法,能不能粘点代码,让小弟参考参考,谢了
------解决方案--------------------
如果连接断掉,读取数据和发送数据都会出现异常。
------解决方案--------------------
socket.sendUrgentData(0xFF);
这句话要执行的时候才报异常,作用就是心跳包 一次发1k数据 需要写在循环里面 不断执行
当你开着程序断掉网络的时候 他是肯定会报异常的 你再检查一下程序看有没有什么地方报异常跳过了这句话或是循环处在随眠状态,在断开网络的时候还在随眠而没有执行此句。
实在不行 可以在客户端要与服务器通信写数据的时候捕获IO异常 outputstream在断开的时候必报的异常 这时候再重新与服务器连接并通信,毕竟这种断开也不是经常发生吧,连接的时候还是占多数时候。
要不就新开一条线程,每隔几秒就向服务器发送一次数据,掉了就重连。
代码的话,我找找先 。。。。 反正这种长连接就是socket连接之后不断开 只用这一个实例与服务器通信