现在的位置: 首页 > 综合 > 正文

关于XMPP协议android客户端和openfire的连接问题

2018年04月22日 ⁄ 综合 ⁄ 共 2275字 ⁄ 字号 评论关闭

今晚写了一个关于XMPP协议的即时通信客户端,结果遇到了一箩筐的问题,首先是手贱升级了ADT到17版本,结果发现导入的asmack.jar竟然出现这样奇葩的问题,

02-05 21:50:09.648: E/dalvikvm(19473): Could not find class 'org.jivesoftware.smack.ConnectionConfiguration', referenced from method com.Connet.XmppConn.openConnection
02-05 21:50:09.649: E/AndroidRuntime(19473): FATAL EXCEPTION: Thread-621622
02-05 21:50:09.649: E/AndroidRuntime(19473): java.lang.NoClassDefFoundError: org.jivesoftware.smack.ConnectionConfiguration
02-05 21:50:09.649: E/AndroidRuntime(19473):  at com.Connet.XmppConn.openConnection(XmppConn.java:10)
02-05 21:50:09.649: E/AndroidRuntime(19473):  at com.Connet.XmppConn.getConnection(XmppConn.java:25)
02-05 21:50:09.649: E/AndroidRuntime(19473):  at com.registAndlogin.Register$2.run(Register.java:54)
02-05 21:50:09.649: E/AndroidRuntime(19473):  at java.lang.Thread.run(Thread.java:838)

百度找了很久,终于发现了一篇博客有介绍,我靠,全是英文的,发个链接http://lvyaojia.sinaapp.com/2012/05/asmack/

历经千辛万苦终于解决了,后来发现有中文的办法。。。这个链接很详细http://mikewang.blog.51cto.com/3826268/820743/

本以为成功了,谁知一运行,又出现这样的错误

02-05 22:31:24.358: E/AndroidRuntime(8864): FATAL EXCEPTION: Thread-633699
02-05 22:31:24.358: E/AndroidRuntime(8864): java.lang.IllegalStateException: Not connected to server.
02-05 22:31:24.358: E/AndroidRuntime(8864):  at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:488)
02-05 22:31:24.358: E/AndroidRuntime(8864):  at com.registAndlogin.Register.register(Register.java:88)
02-05 22:31:24.358: E/AndroidRuntime(8864):  at com.registAndlogin.Register.access$2(Register.java:76)
02-05 22:31:24.358: E/AndroidRuntime(8864):  at com.registAndlogin.Register$2.run(Register.java:55)
02-05 22:31:24.358: E/AndroidRuntime(8864):  at java.lang.Thread.run(Thread.java:838)

在调用connect()的方法时候出现了错误。然后百度,查文档,里面有的朋友说需要设置openfire里面的服务器设置——>安全设置——>客户端安全连接中的非必须改为自定义,要入图这样子

后来发现,还是不行,试了几次发现只要在电脑客户端spark能正常通信,服务器就基本没问题了,除了偶尔ip地址变动会出错外。那怎么办,这问题还是要解决的,然后有朋友说

ConnectionConfiguration config = new ConnectionConfiguration("192.155.1.102", 5222);
  //configuration设置,可以不用设置  
  /*config.setReconnectionAllowed(true);  
  config.setCompressionEnabled(false);  
  config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);  
  config.setSASLAuthenticationEnabled(false);  */

发现还是不行,后来试了,不管有没有加,都是可以的。

那怎么办,最后检查发现竟然忘记权限了,没有写internet权限,接着试了试,我靠,还是不行,啥情况啊,快奔溃了,不气馁。接着继续,发现如果使用手机调试必须是连接wifi为局域网才可以连接,否则是不行的,最后的最后,利用模拟器试了试和连接wifi试了试都成功了,此时的我已经吐血了

抱歉!评论已关闭.