• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现),smackopenfire

Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现),smackopenfire

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现),smackopenfire等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现),smackopenfire


Smack是一个开源,易于使用的XMPP(jabber)客户端类库。优点:简单的,功能强大,给用户发送信息只需三行代码便可完成。缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大。
OpenFire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
1、首先到网址 http://www.igniterealtime.org 下载OpenFire服务器和Smack jar包

2、安装OpenFire登陆到控制台

   这里设置多长时间关闭闲置连接,可以判断用户是否在线的最长反应时间

3、创建两个测试账号,先用Spark登陆一个账号

4、手机端登陆,使用Service保持连接,并与spark端发送消息,实现双向通信(代码和程序在后面)

5、关键代码

配置连接OpenFire服务器,连接成功后设置响应Linstener和Receiver,这里因业务需求设置ping间隔为10s

 1     public void connect() {
 2         Log.i(TAG, "connect()");
 3         XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
 4         configBuilder.setHost(SmackConst.XMPP_HOST);
 5         configBuilder.setServiceName(SmackConst.SERVICE_NAME);
 6         configBuilder.setUsernameAndPassword(mUsername, mPassword);
 7         configBuilder.setSecurityMode(SecurityMode.disabled);
 8         mConnection = new XMPPTCPConnection(configBuilder.build());
 9         //Set ConnectionListener here to catch initial connect();
10         mConnection.addConnectionListener(this);
11         try {
12             mConnection.connect();
13             mConnection.login();
14             if(mConnection.isAuthenticated()){//登录成功
15                 MyPingManager.setDefaultPingInterval(10);//Ping every 10 seconds
16                 MyPingManager myPingManager = MyPingManager.getInstanceFor(mConnection);
17                 //Set PingListener here to catch connect status
18                 myPingManager.registerPingFailedListener(SmackConnection.this);
19                 setupSendMessageReceiver();
20                 //Set ChatListener here to catch receive message and send NEW_MESSAGE broadcast
21                 ChatManager.getInstanceFor(mConnection).addChatListener(this);
22                 //Set ChatListener here to catch roster change and rebuildRoster
23                 //Roster.getInstanceFor(mConnection).addRosterListener(this);
24                 sendLoginBroadcast(true);
25             }else{
26                 mConnection.disconnect();
27                 Log.i(TAG, "Authentication failure");
28                 sendLoginBroadcast(false);
29             }
30         } catch (Exception e) {
31             e.printStackTrace();
32             sendLoginBroadcast(false);
33             Intent intent = new Intent(mService, mService.getClass());
34             mService.stopService(intent);
35         }
36 
37     }

 自动重连TimerTask,Ping失败后启动,重连成功后关闭

 1     private Timer reConnectTimer;
 2     private int delay = 10000;
 3     //pingFailed时启动重连线程
 4     class ReConnectTimer extends TimerTask {  
 5         @Override  
 6         public void run() {
 7             // 无网络连接时,直接返回
 8             if (getNetworkState(mService) == NETWORN_NONE) {
 9                 Log.i(TAG, "无网络连接,"+delay/1000+"s后重新连接");
10                 reConnectTimer.schedule(new ReConnectTimer(), delay);
11                 //reConnectTimer.cancel();
12                 return;
13             }
14             // 连接服务器 
15             try {
16                 mConnection.connect();
17                 if(!mConnection.isAuthenticated()){
18                     mConnection.login();
19                     reConnectTimer.cancel();
20                 }
21                 Log.i(TAG, "重连成功");
22                 Intent intent = new Intent(SmackConst.ACTION_RECONNECT_SUCCESS);
23                 mService.sendBroadcast(intent);
24             } catch (Exception e) {
25                 Log.i(TAG, "重连失败,"+delay/1000+"s后重新连接");
26                 e.printStackTrace();
27                 reConnectTimer.schedule(new ReConnectTimer(), delay);
28             } 
29             
30         }  
31     }

资源地址:https://github.com/liuhaijin/Smack-Openfire

菜鸟一枚,共同学习~~

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现),smackopenfire

相关文章

  • 2017-05-26Android 6.0 Permission权限与安全机制,androidpermission
  • 2017-05-26【开源】二维码签到手机andriod版下载!,开源签到andriod
  • 2017-05-26Android官方开发文档Training系列课程中文版:数据存储之文件存储
  • 2017-05-26Java Web 开发填坑记- 如何正确的下载 Eclipse,javaeclipse
  • 2017-05-26APK瘦身记,如何实现高达53%的压缩效果,apk53%
  • 2017-05-26Android_安卓为按钮控件绑定事件的五种方式,android按钮控件
  • 2017-05-26菜单(Menu)的三中创建方式——Android开发之路2,menuandroid
  • 2017-05-26Android之ViewPager 第二课,androidviewpager
  • 2017-05-26【腾讯Bugly干货分享】深入源码探索 ReactNative 通信机制,buglyreactnative
  • 2017-05-26Android蓝牙操作笔记,android蓝牙笔记

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android--BroadcastReceiver应用详解
    • 老人桌面===花花绿绿的桌面,老人桌面
    • Andriod GridView不改变背景色实现网格线效果
    • Android无线开发的几种常用技术综述
    • Android开源项目分类汇总(六)工具库
    • 【Android性能工具】腾讯开源工具APT,androidapt
    • 我的android学习经历13,android学习经历13
    • Android ViewTreeObserver(转载),viewtreeobserver
    • Android项目:手机安全卫士(16)—— 复杂 ListView浅析
    • 如何写一个简易的文件系统(4):umount

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有