一小沫一博客

【行多久,方为执着;思多久,方为远见】

Smack,Openfire问题总结

一、Smack 4.2.3,入群时总是报无响应,还未找到原因(源码问题),已找到原因,openfire4.2.0+版本自身bug,不支持用户110状态

Exception=org.jivesoftware.smack.SmackException$NoResponseException: 
No response received within reply timeout. Timeout was 10000ms (~10s).
Waited for response using: AndFilter: (StanzaTypeFilter: Presence,
OrFilter: (AndFilter: (FromMatchesFilter (ignoreResourcepart): 
100001_ir1jbcntb@conference.192.168.1.102,
MUCUserStatusCodeFilter: status=110), AndFilter: 
(FromMatchesFilter (full): 100001_ir1jbcntb@conference.192.168.1.102/100004, 
StanzaIdFilter: id=ovR90-45, PresenceTypeFilter: type=error)))

二、加入聊天室时报错:原因,房间设置了只允许成员加入,当前账号非加入房间的成员,故报错

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from 
09agyrmgm@conference.localhost/哦哦等等: XMPPError: registration-required - auth

http://web.mit.edu/svalente/lib/smack_3_0_4/javadoc/org/jivesoftware/smack/packet/XMPPError.html

三、Openfire4.2.0+
发扩展消息时,message.addExtension,对方无法收到消息,Openfire4.1.6-正常,Openfire自身bug

四、AccountManager.getInstance(this.getXMPPConnection()).getAccountAttribute(“name”);无响应

04-21 11:36:16.788 14572-14640/com.xx W/System.err: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 10000ms (~10s). Waited for response using: StanzaIdFilter: id=nMrxy-57.
04-21 11:36:16.788 14572-14654/com.xx W/art: Long monitor contention with owner Thread-4 (14640) at void java.lang.Object.wait!(long, int)(Object.java:-2) waiters=0 in void org.jivesoftware.smackx.iqregister.AccountManager.getRegistrationInfo() for 9.936s
04-21 11:36:16.788 14572-14640/com.xx W/System.err:     at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:260)
04-21 11:36:16.788 14572-14640/com.xx W/System.err:     at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:214)
04-21 11:36:16.789 14572-14640/com.xx W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.getRegistrationInfo(AccountManager.java:370)
04-21 11:36:16.789 14572-14640/com.xx W/System.err:     at org.jivesoftware.smackx.iqregister.AccountManager.getAccountAttribute(AccountManager.java:210)

解决找了个简单的demo,使用同样的版本,在代码中登录后加入获取name的这行代码,发现没有问题。很是奇怪,是自己写代码写的有问题?于是各种尝试,先是修改Smack版本,无果。最后修改
AccountManager.getInstance(this.getXMPPConnection()).getAccountAttribute(“name”)代码的位置,竟然没有报异常了,再修改到原来的位置,又报无响应了。原来代码中我自己定义了一个向服务端某个插件发包的语句,发包后收到结果会加入群组的操作A,但是很奇怪,这些操作都是异步的,为何会影响到获取name呢,看了下获取name的实现,也是向服务端发包,但是还是不明白原因,不过把获取name的代码挪到A前面,确实没有报错了。这个问题算是解决了,后续再深究原因吧

最终分析原因:自己写的自定义XMPP协议解析有问题。已更正
文章更新于2018年4月22日 22:14

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w690333243/article/details/79969088
个人分类: xmpp smack
想对作者说点什么? 我来说一句

Oauth 2.0

OAuth 2.0

qzqanzc qzqanzc

2017-08-03 11:55:43

阅读数:374

没有更多推荐了,返回首页

不良信息举报

Smack,Openfire问题总结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭