在以前的asmack版本中,断线重连是需要我们自己做的,原理很简单,分两种情况,一种是断网了,另外一种就是掉线了。
1.没有网络的情况下。
没有网络的情况下,如果想要在所有页面提示用户开启网络,一个一个页面写会很麻烦,其实我们可以写一个baseActivity,在这个里面做断网相关操作,其他的activity集成了这个类,那么就能在整个应用程序中弹出对话框,要想实现全局的对话框,使用这种方法挺好的。
无网络的监听主要是监听安卓系统的一个广播,叫做android.net.conn.CONNECTIVITY_CHANGE;具体逻辑如下:
*----1)在baseActivity监听系统网络改变广播:android.net.conn.CONNECTIVITY_CHANGE;
*----2)收到断网广播以后,显示无网络(Contactfragment),并提示用户打开网络(BaseActivity)。
*----3)收到网络恢复广播以后,去掉无网提示(ContactFragment)。
*
*2.有网络但是没有xmpp连接的情况下。
我们有两种处理方法,第一种就是自己写一个断线重连机制,配合闹钟使用,因为现在asmack提供了自己的断线重连,所以主要讲第二种,第二种是在初始化xmppConnection的时候,设置reconnection为true;
如下:
ConnectionConfiguration connConfig = new ConnectionConfiguration( kimHost, PubConstant.XMPP_PORT); connConfig.setReconnectionAllowed(true);
asmack的这套机制做了很多相关的处理,比如网络恢复后继续连接服务器,这样生了很多烦恼;
*----1)登录的时候注册IMConnectionListener,当网络发生改变,调用了connectionClosed或者connectionClosedOnError的时候,如果不是登陆冲突,则发送重连广播。
*----2)当调用了reconnectionFailed的时候,首先检测是不是没网络,是的话直接返回。
*----3)网络恢复,发送网络恢复广播通知ContactFragment去掉连接异常提示。
最新的asmack的jar已经帮我们实现了断线重连,内部就有一套机制对断线做了相关的处理。使用起来很简单,但是这个有一个不好的地方就是,当重连上了以后,可能只能发出消息,不能收到消息。因此,我们需要在重连成功之后,在添加一下Listener。
添加listener包括单聊和群聊的都要添加(如果有群聊功能的话),否则会导致收不到消息或者发送不出去消息;其实我做完之后发现,这个和重新登录一遍没啥两样了,但是至少效果是有了的。
本文系原创,还请装载的朋友注明原处,尊重作者劳动成果;
相关推荐
主要介绍了C# Mqtt 断线重连,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java socket client 断线重连的简单实现 有什么意见可以提哦
实现netty作为服务端,websocket连接成功,将channel保存到map集合,通过js发送心跳,服务端接收心跳信息并响应给客户端,当服务端断开时 客户端进行重连操作
SocketClient MFC 代码,实现与tcp sever的链接,实现自动断线重连
netty使用自带工具类实现断线重连和心跳包
S7.netpuls掉线重连
异步TCP传输,可以实现短线超时重连机制,代码中有详细注释
ESP8266开发,实现MQTT客户端,与MQTT服务器通信,断线重连,有软件安装、使用及详细的代码注释,方便快速搭建自己的物联网系统。
c#Socket客户端断线重连! c#Socket客户端断线重连! c#Socket客户端断线重连! c#Socket客户端断线重连!
自己写的源码,请拿去用!
3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序...
一个C#使用tcpip的教学,分为Server端和Client端,实现互相发消息通讯,和断线重连。
永不掉线自动重连多用户管理系统【服务端_客户端】 1、掉线自动重连 2、检测账号到期时间限制 3、检测账号重复登陆 4、检测软件更新 5、检测账号黑名单 7、服务端踢出用户 8、服务端与客户端交互数据 9、...
c#socket异步编程及断线重连。并怎样实现循环接受服务器的命令并处理。
mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。
c#Socket客户端断线重连封装类(可直接调用).rar
初步完成了异步TCP客户端+掉线自动重连,刚开始接触socket编程,对委托、回调、异步冒似还是似懂非懂,希望大家多多指导。http://u.download.csdn.net/images/btn_submit.png
mina客户端,服务器端的demo
netty断线重连机制及心跳,包含客户端和服务端,主要学习怎么重连和发送接收心跳,不满足心跳则关闭管道。