最近项目需要,在Javaweb项目中使用smack4.3.4作为xmpp的客户端,连接openfire服务端。过程中遇到许多问题,资料较少,特意整理出来。
一、连接服务器+登录

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder().setUsernameAndPassword(username, password) // 固定源,不固定将随机.setResource(Resourcepart.from("Smack"))// 开启通讯压缩.setCompressionEnabled(true)// 超时// .setConnectTimeout(1000 * 10)// 关闭.setSecurityMode(SecurityMode.disabled)// 必须设置.setXmppDomain(JidCreate.domainBareFrom(serverName))// 设置离线状态// .setSendPresence(false)// 调试// .setDebuggerFactory(SmackConfiguration.getDefaultSmackDebuggerFactory())// 主机.setHost(hostName).setPort(port).build();mConnection = new XMPPTCPConnection(config);mConnection.connect();if (mConnection.isConnected()) {// 登录到服务器SASLMechanism sm = new SASLPlainMechanism();SASLAuthentication.registerSASLMechanism(sm.instanceForAuthentication(mConnection, config));Presence presence2 = new Presence(Presence.Type.available);presence2.setType(Type.available);presence2.setStatus("在线");mConnection.sendStanza(presence2);mConnection.login(username, password);}

二、监听:ConnectionListener +RosterListener+包监听
懒得写了。。。
三、主要问题
问题:
客户端连接上openfire后,客户端检查连接状态,一段时间后,客户端检测在线,而openfire显示已下线。即:mConnection.isConnected() && mConnection.isAuthenticated() 校验不起作用。
原因:
openfire默认隔360秒检测闲置连接,会发送ping给客户端,要求客户端响应,否则关闭连接(我响应了。。。。还是被关掉了,也许是响应的内容不对?)。
解决办法:

①增加ping,使用smack的PingManager设置ping的频率以及失败重连,(发现不起作用,还是会掉线)。
②在ConnectionListener中的connectionClosedOnError和connectionClosed中重连。
③在StanzaListener中监听如果接收的是用户下线的包,则重连。
④以上不放心,增加TimerTask任务,每30分钟检查连接状态,连接已断开则重连。
⑤重连操作使用TimerTask,以便失败10秒后重连。
⑥将①②③关于监听的都放在连接之前,即mConnection.connect()之前设置。

smack4.3.4相关推荐

  1. android下的XMPP对应smack-4.2.1,实现登录,注册,发单聊,加聊天室,发群聊等简单功能

    1.API地址:点击打开链接 2.openfire,spark下载:点击打开链接 3.效果图 4.引用的JAR: compile files('libs/fscontext.jar') compile ...

  2. openfire+smack4.2.3

    openfire+smack4.2.3 https://blog.csdn.net/qq_36020545/article/details/80802300 在学习openfire中 其中openfi ...

  3. Android IQ自定义扩展(smack-4.1.9)

    Android IQ自定义扩展(smack-4.1.9) 本文是基于smack-4.1.9上的IQ自定义扩展.别的版本如有区别应该也是在继承IQ后,重写方法上的区别. 首先,来看看需要扩展的IQ的格式 ...

  4. tigase客户端之smack4.3用法【草稿】

    项目介绍 sureim 项目地址: sureim项目地址 git clone https://git.tigase.tech/sureim.git demo网站: tigase im spark 源码 ...

  5. smack android 示例代码,Android smack4.2的简单使用

    1.使用背景 在搭建即时通讯的时候,一般采用Openfire+smack实现(如:第三方环信 ).由于Asmack已经废弃.所以先使用官方最新库 : GitHub上的指导 2.使用大致流程 2.1新建 ...

  6. smack+openfire实现Android实时通信(实现大部分基本功能)

    1. 开发环境 smack-4.3.4 openfire-4.6.3 开发工具:AndroidStudio openfire下载及安装: 官网:https://igniterealtime.org/p ...

  7. Android使用smack连接openfire(本地+远程)

    1. 依赖 使用smack4.3.4,实测这两条足矣 implementation "org.igniterealtime.smack:smack-tcp:4.3.4" imple ...

  8. 【码云周刊第 3 期】来自国内开发者的实战项目,开源让通讯从未如此简单!...

    为什么80%的码农都做不了架构师?>>>    类型:即时通讯 "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头-- " 春节将至,思乡心切,小一情不自禁的想 ...

  9. java smack 例子_关于JAVA利用smack连接openfire的jar依赖问题

    一.GitHub上的maven依赖 直接使用maven依赖 二.关于smack-4.3.4的jar包相关依赖 有两种方式 ①.引入maven依赖,比4.2.0版本多了一项 ②.可以在https://w ...

最新文章

  1. ubuntu chrome java插件_在Ubuntu中为Chrome安装Java插件
  2. Git 面对不同的场景的命令使用
  3. 对“js变量作用域的疑问”的解答
  4. 对大量转载贴识别算法的研究
  5. Java黑皮书课后题第6章:*6.2(求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。使用下面的方法头:public static int sumDigits(long n)
  6. SAP UI5 oSelectedItem.getBindingContext(json)
  7. 以个人身份加入.NET基金会
  8. CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection
  9. flink 三种时间机制_Flink的时间类型和watermark机制
  10. 会员编号生成规则_单据编号规则浅析
  11. 函数式编程基础---高阶函数和偏函数
  12. 学子商城电子产品销售系统
  13. android直播刷礼物特效,Android直播送礼物发消息页面(仿印客直播)
  14. 失控的滴滴:以为问题出在流程,其实问题出在人
  15. 算法注册机编写扫盲之续篇---第二课
  16. 永恒之蓝ms17_010漏洞利用攻击
  17. moses 编译_Ubuntu 8.10下moses测试平台搭建全记录
  18. 广东2022年养老金计发基数为8682元,人们都能领这样多养老金吗
  19. IE浏览器代理出问题导致的程序网络不可用
  20. 【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调

热门文章

  1. Android OMA 引入
  2. 互联网35岁是个坎,博士可不可以干到40岁?
  3. 银行ATM系统(IO存储、GUI界面)
  4. LVGL PC模拟器(1)
  5. 打开Word文档显示只读解决
  6. heisenberg mysql_分享下去年底写的mysql分库分表中间件heisenberg_MySQL
  7. 安卓手机主题软件_安卓主题壁纸app下载-安卓主题壁纸软件下载v9.0.7
  8. Android 实现App状态栏颜色 白色、透明色
  9. BUUCTF——[GXYCTF2019]BabySQli
  10. 天津计算机专业专科大学排名,天津计算机专业大学排名