本人在做一个点菜系统,之前采用的是短连接方式,由于用户体验比较差(采用3G网络,有的时候延时比较大),老板让我用长连接的方式与服务器连接,比短连接少了个Connection的过程,稍微快一些,但是也存在一些问题,比如网络状况不好,或者断掉,我把3G网络断掉又开启(程序开着),中间也没有捕获到异常,用socket.isConnected()显示是true,还有try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
也没捕获到异常,我是想如果检测出socket连接如果断掉的话就重新Connection一些,可是那些检测的方法貌似都不行,
socket.getInputStream() 和socket.getOutputStream()也都没有捕获到异常。请问有没有有效的检测socket连接异常的方法?如果哪位大侠用心跳的方法,能不能粘点代码,让小弟参考参考,谢了
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
也没捕获到异常,我是想如果检测出socket连接如果断掉的话就重新Connection一些,可是那些检测的方法貌似都不行,
socket.getInputStream() 和socket.getOutputStream()也都没有捕获到异常。请问有没有有效的检测socket连接异常的方法?如果哪位大侠用心跳的方法,能不能粘点代码,让小弟参考参考,谢了
解决方案 »
- 平板老是假死
- 两个Activity之间传值问题
- Android TabWidget问题,各位大侠帮帮忙
- 解码器移植android的问题
- 怎样设置服务器的ip 才能使我的手机可以访问到?
- JNI消息如何自动传递给java呢?
- android 2.2平台搭建成功,但模拟器只能启动一次?请问怎么回事?
- android客户端与服务器交互,在模拟器能够得到服务器的响应,但是在真机得不到服务器的响应,请问怎么回事?程序如下:
- OkHttp post后返回404的问题
- 如何在Android的Application里创建文件呀?
- 程序上如何开关:设置-无线网络-移动网络-已启用数据
- 初学android,请教登录构建好的model要储存在哪里?
这句话要执行的时候才报异常,作用就是心跳包 一次发1k数据 需要写在循环里面 不断执行
当你开着程序断掉网络的时候 他是肯定会报异常的 你再检查一下程序看有没有什么地方报异常跳过了这句话或是循环处在随眠状态,在断开网络的时候还在随眠而没有执行此句。
实在不行 可以在客户端要与服务器通信写数据的时候捕获IO异常 outputstream在断开的时候必报的异常 这时候再重新与服务器连接并通信,毕竟这种断开也不是经常发生吧,连接的时候还是占多数时候。
要不就新开一条线程,每隔几秒就向服务器发送一次数据,掉了就重连。
代码的话,我找找先 。 反正这种长连接就是socket连接之后不断开 只用这一个实例与服务器通信
这个时候肯定要outputstream.write();
如果socket断了 这句一定报IO异常 楼主试着捕获一下 捕获到就重连
那就只能采取向服务器发心跳包,也就是每2秒发一条固定数据,服务器接到后返回固定数据,如果客户短5秒内每有接收到服务器的返回 就主动断开此次连接 并 重新连接 (不过这样有可能废流量 最好好好计算下。)我做过一个项目也是3G网络通信 访问webservices的 要求没有点菜实时性高 而且环境是在室外 信号很强 网络状况都很好 而且就算一次通信失败 再次通信就行了 =,= 所以我只能提供点思路 没有代码 就想帮忙