项目中遇到要用xmpp做通讯,原来在的应用跑在linux上用的gloox,现在需要在android上来实现,查了下发现smack最近做了一次大升级,4.0.0发布了,最开始用了smack的库,结果在android上报错,去https://community.igniterealtime.org/ 社区问了下,原来还有个asmack,下了库文件然后写代码:

根据asmack-android-8-4.0.0-rc2.jar 的readme,另外需要dnsjava的库,我用的是dnsjava-2.1.6

最开始发现logcat有一个关于dns的报错,网上查了下发现有说要加下面一句在初始化的时候:

//System.setProperty("sun.net.spi.nameservice.provider.1","dns,dnsjava");

但是后来我发现没有这句,好像也没问题,暂时屏蔽掉了。

asmack的初始化是必须的。

mSmackAndroid = SmackAndroid.init(context);

conf = new ConnectionConfiguration( "wooxonline.com",5222);

SASLAuthentication.supportSASLMechanism("PLAIN",0);

conf.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);

conf.setCompressionEnabled(false);

// disable the built-in ReconnectionManager since we handle this

conf.setReconnectionAllowed(false);

conf.setSendPresence(false);

conf.setDebuggerEnabled(true);

XMPPConnection connection = XMPPTCPConnection(conf);

connection.login(g_email, g_password);

最开始少了sasl方式的设置,发现连接没问题,但是login的时候总是返回noresponse error,查了发现asmask对于连接出错抛的异常比较简单,不会细分。

log如下:

connect:

06-17 09:39:09.300  19344-19457/com.wooxclound.homedaemonactivity.app D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

06-17 09:39:12.500  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='1920830504' from='wooxonline.com' version='1.0' xml:lang='en'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

login:

06-17 09:39:21.500  19344-19457/com.wooxclound.homedaemonactivity.app D/SMACK﹕ SENT (0): <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AHRlc3QxMUB3b294b25saW5lLmNvbQBhYjEyMzR5eg==</auth>

06-17 09:39:21.500  19344-19344/com.wooxclound.homedaemonactivity.app I/Woox HomeDaemon﹕ onStartCommand(): Intent com.wooxclound.homedaemon.action.XMPP.CONNECTION_CHANGED

06-17 09:39:22.090  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ RCV (0): <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

06-17 09:39:22.100  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

06-17 09:39:22.490  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2952941696' from='wooxonline.com' version='1.0' xml:lang='en'><stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

06-17 09:39:22.540  19344-19346/com.wooxclound.homedaemonactivity.app D/dalvikvm﹕ GC_CONCURRENT freed 311K, 8% free 5028K/5408K, paused 4ms+3ms, total 26ms

06-17 09:39:22.560  19344-19457/com.wooxclound.homedaemonactivity.app D/SMACK﹕ SENT (0): <iq id='Aa7TB-0' type='set'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>Smack</resource></bind></iq>

06-17 09:39:23.130  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ RCV (0): <iq id='Aa7TB-0' type='result'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>test11@wooxonline.com/Smack</jid></bind></iq>

06-17 09:39:23.130  19344-19457/com.wooxclound.homedaemonactivity.app D/SMACK﹕ SENT (0): <iq id='Aa7TB-1' type='set'><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>

06-17 09:39:23.720  19344-19458/com.wooxclound.homedaemonactivity.app D/SMACK﹕ RCV (0): <iq type='result' id='Aa7TB-1'/>

06-17 09:39:23.730  19344-19454/com.wooxclound.homedaemonactivity.app D/SMACK﹕ User logged (0): test11@wooxonline.com@wooxonline.com:0/Smack

在注册新用户的时候,可以使用accountmanager也可以使用IQ package,方法如下:

public static final int REGISTER_METHOD_ACCOUNT_MANAGER = 0;

public static final int REGISTER_METHOD_IQ_PACKAGE = 1;

public static final int REGISTER_RESULT_SERVER_NO_RESULT = 0;

public static final int REGISTER_RESULT_SUCCESS = 1;

public static final int REGISTER_RESULT_ACCOUNT_EXIST = 2;

public static final int REGISTER_RESULT_FAIL = 4;

public static final int REGISTER_RESULT_NO_CONNECTION = 4;

/**

* register

*

* @param username

* @param password

* @return 1:success 0:server not return 2:account exist 3:fail 4:no connection

*/

public int register(String username, String password) {

if (!((mConnection != null) && mConnection.isConnected())) {

return REGISTER_RESULT_NO_CONNECTION;

} else {

reg_method = REGISTER_METHOD_ACCOUNT_MANAGER;

Map<String, String> attributes = new HashMap<String, String>();

attributes.put("username", username);

attributes.put("password", password);

//attributes.put("email", "");

//attributes.put("name", "");

if (reg_method == REGISTER_METHOD_ACCOUNT_MANAGER) {

try {

if (mAccountManager == null) {

mAccountManager = AccountManager.getInstance(mConnection);

}

mAccountManager.createAccount(username, password, attributes);

} catch (Exception ex) {

L.e(TAG, ex);

if (ex.toString().equalsIgnoreCase("conflict")) {

L.i(XmppManager.class, " account exist!");

return REGISTER_RESULT_ACCOUNT_EXIST;

} else {

L.i(XmppManager.class, " register fail");

return REGISTER_RESULT_FAIL;

}

}

L.i(XmppManager.class, " register success!");

return REGISTER_RESULT_SUCCESS;

} else if (reg_method == REGISTER_METHOD_IQ_PACKAGE) {

try {

Registration reg = new Registration();

reg.setType(IQ.Type.SET);

reg.setTo(mConnection.getServiceName());

reg.setAttributes(attributes);

PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()),

new PacketTypeFilter(IQ.class));

PacketCollector collector = mConnection.createPacketCollector(filter);

mConnection.sendPacket(reg);

IQ result = (IQ) collector.nextResult(SmackConfiguration.getDefaultPacketReplyTimeout());

collector.cancel();

//System.out.println(result);

if (result == null) {

L.i(XmppManager.class, " no value return by server!");

return REGISTER_RESULT_SERVER_NO_RESULT;

} else if (result.getType() == IQ.Type.ERROR) {

//<error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error>

if (result.getError().toString().equalsIgnoreCase("conflict")) {

L.i(XmppManager.class, " account exist!");

return REGISTER_RESULT_ACCOUNT_EXIST;

} else {

L.i(XmppManager.class, " register fail");

return REGISTER_RESULT_FAIL;

}

} else if (result.getType() == IQ.Type.RESULT) {

L.i(XmppManager.class, " register success!");

//Intent intent = new Intent(DaemonService.ACTION_REGISTER);

return REGISTER_RESULT_SUCCESS;

}

L.e(TAG, ":Should not go there for register process!");

} catch (Exception ex) {

L.e(TAG, ex);

}

}

L.e(TAG, ":Should not go there for register process!");

return REGISTER_RESULT_FAIL;

}

}

}

当账户存在时,返回如下包:

D/SMACK﹕ RCV (0): <iq type="error" id="EzQN5-0" from="ddnas-v2.com" to="ddnas-v2.com/c220b282"><query xmlns="jabber:iq:register"><email> </email><password>jacky</password><username>jacky</username><name> </name></query><error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

但是geterrorcode()接口似乎在4.0的asmack中被去掉了,所以只能判定error是conflict就认为是账户已经存在。

由于服务器强制使用TLS认证,所以对于连接做了新的配置,然后再openfire server上测试没有问题,但是在公司的服务器出问题了,最先我用的是asmak 4.0.0 rc2的库,在认证challenge的时候服务器似乎没有响应,log如下:

D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2936112787' from='wooxonline.com' version='1.0' xml:lang='en'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (0): <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

D/SMACK﹕ RCV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.initReaderAndWriter(XMPPTCPConnection.java:501)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:648)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:223)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:48)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:82)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.initReaderAndWriter(XMPPTCPConnection.java:501)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:648)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:223)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:48)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:82)

D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='3044304500' from='wooxonline.com' version='1.0' xml:lang='en'>

D/SMACK﹕ RCV (0): <stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (0): <auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"></auth>

D/SMACK﹕ RCV (0): <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>bm9uY2U9IjIyNzI1NzYwOTQiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>

D/SMACK﹕ SENT (0): </stream:stream>

W/XMPPConnection﹕ Connection closed with error

java.lang.NullPointerException

at com.novell.sasl.client.DigestMD5SaslClient.DigestCalcHA1(DigestMD5SaslClient.java:447)

at com.novell.sasl.client.DigestMD5SaslClient.createDigestResponse(DigestMD5SaslClient.java:646)

at com.novell.sasl.client.DigestMD5SaslClient.evaluateChallenge(DigestMD5SaslClient.java:356)

at org.jivesoftware.smack.sasl.SASLMechanism.challengeReceived(SASLMechanism.java:190)

at org.jivesoftware.smack.SASLAuthentication.challengeReceived(SASLAuthentication.java:427)

at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:252)

at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:48)

at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:82)

翻了一下asmack社区的帖子https://community.igniterealtime.org/message/240015#240015上说rc3的库解决了这个问题,down下来一试,果然,但是认证还是通不过:

D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='83599252' from='wooxonline.com' version='1.0' xml:lang='en'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (0): <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

D/SMACK﹕ RCV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.initReaderAndWriter(XMPPTCPConnection.java:501)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:648)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:223)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:48)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:82)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.initReaderAndWriter(XMPPTCPConnection.java:501)

W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:648)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:223)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:48)

W/System.err﹕ at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:82)

D/SMACK﹕ SENT (0): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='1654478887' from='wooxonline.com' version='1.0' xml:lang='en'>

D/SMACK﹕ RCV (0): <stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (0): <auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"></auth>

D/SMACK﹕ RCV (0): <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>bm9uY2U9IjI4MDgzODM5MDUiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>

D/SMACK﹕ SENT (0): <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9InRlc3QxMkB3b294b25saW5lLmNvbSIsY25vbmNlPSIwNWUxNjVlMjUxZDA2MzM3MzJmZWZjNzBjMDU4ZTkwMDU4YjM0MjE0Mjg4ZDlmNzM1NTAwMDVkOTc4NWIwNmFlIixuYz0wMDAwMDAwMSxxb3A9YXV0aCxkaWdlc3QtdXJpPSJ4bXBwL3dvb3hvbmxpbmUuY29tIixyZXNwb25zZT05YThiMzkxZjNjM2Q0MzdjOTc0MDNkYzJiNzkyNGU5MixjaGFyc2V0PXV0Zi04LG5vbmNlPSIyODA4MzgzOTA1Ig==</response>

D/SMACK﹕ RCV (0): <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>

D/SMACK﹕ SENT (1): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (1): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='3726488975' from='wooxonline.com' version='1.0' xml:lang='en'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (1): <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

D/SMACK﹕ RCV (1): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

D/SMACK﹕ SENT (1): <stream:stream to="wooxonline.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

D/SMACK﹕ RCV (1): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='4109710539' from='wooxonline.com' version='1.0' xml:lang='en'>

D/SMACK﹕ RCV (1): <stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='k0acyvEdZQ7cl5uD5FTPoiOnuaw='/><register xmlns='http://jabber.org/features/iq-register'/></stream:features>

D/SMACK﹕ SENT (1): <auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"></auth>

D/SMACK﹕ RCV (1): <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>bm9uY2U9IjQyOTQ3NjMyMTciLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>

D/SMACK﹕ SENT (1): <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9InRlc3QxMkB3b294b25saW5lLmNvbSIsY25vbmNlPSI1ODA3MGMzYjIxMTk5Yjc5MzUxYTc3ODkzNTkwYTNiNGFmZmQ2MjYwYTUwNGZjZmY5NTJkMjg1YWE3YmViY2VkIixuYz0wMDAwMDAwMSxxb3A9YXV0aCxkaWdlc3QtdXJpPSJ4bXBwL3dvb3hvbmxpbmUuY29tIixyZXNwb25zZT02Mzk5NGYyMzk0YjQxYjkyYjUwYzM3NDg0ZGFkNzQ5ZCxjaGFyc2V0PXV0Zi04LG5vbmNlPSI0Mjk0NzYzMjE3Ig==</response>

D/SMACK﹕ RCV (1): <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><not-authorized/></failure>

继续翻坛子,https://code.google.com/p/gtalksms/issues/detail?id=262有人发现登陆ID不使用@域名就没有问题,太晕了。

程序跑起来以后,使用xmpp客户端聊天消息接收没问题,但是通过CGI网页pass过来的信息接收不到,初步认为应该是packetfilter的配置不对引起的。

先抓包:

From HTML page:

D/SMACK﹕ RCV (0): <message from='test00@wooxonline.com/17837575071403770533364162' to='test12@wooxonline.com'id='3'><body>{&quot;msg&quot;:&quot;hello123&quot;}</body></message>

From XMPP client:

D/SMACK﹕ RCV (0): <message from='test12@wooxonline.com/Gajim'to='test12@wooxonline.com/Smack' xml:lang='en' type='chat'id='30'><body>sajdhs</body><thread>DXPNsxrROrFFuvBNxxOJgaqbFeRNQYKy</thread></message>

但是从http://xmpp.org/extensions/xep-0201.html   xmpp协议上来看似乎,所有的message都应该有type和thread段。

最后将filter的配置改了一下,就能抓到了。

//PacketFilter filter = new MessageTypeFilter(Message.Type.chat);

PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class));

转载于:https://blog.51cto.com/wb127/1427370

asmack xmpp应用遇到的问题相关推荐

  1. asmack xmpp 获取离线消息

    原文:http://plplum.blog.163.com/blog/static/31032400201503015345948/ 注意事项: 1.登录前要将状态设置为离线: ConnectionC ...

  2. 基于XMPP协议的aSmack源码分析

    在研究如何实现Pushing功能期间,收集了很多关于Pushing的资料,其中有一个androidnp开源项目用的人比较多,但是由于长时间没有什么人去维护,听说bug的几率挺多的,为了以后自己的产品稳 ...

  3. Android平台基于asmack实现XMPP协议中的PubSub机制

    Android平台基于asmack实现XMPP协议中的PubSub机制 本文主要介绍,在Android平台上基于asmack包,实现的PubSub机制,在PubSub中最重要的概念是节点Node,几乎 ...

  4. XMPP协议和asmack

    更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) ...

  5. Android xmpp开发 asmack获取离线在线添加好友消息 及 好友上线下线通知

    如下文章引用自:http://www.apkbus.com/android-144433-1-1.html 公司项目要求实现消息推送及即时聊天功能,考虑再三,选择了openfire.因为也是第一次接触 ...

  6. android asmack和xmpp的关系,Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

    XMPP 消息格式 Jabber/XMPP 系统使用 XML 流在不同实体之间相互传输数据.在两个实体的连接期间,XML 流将从一个实体传送到另一个实体.在实体间,有三个顶层的 XML 元素: ,和. ...

  7. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 即时通讯:XMPP基础

    即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习资料 1. XMPP 简介 XMPP(Extensible Messaging and ...

  9. Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]

    http://blog.csdn.net/shimiso/article/details/8156439 前面几篇给大家系统讲解的有关xmpp openfire smack asmack相关的技术和使 ...

最新文章

  1. Intent以及IntentFilter详解
  2. linux中mfsort用法,Linux命令――sort
  3. 将前端文件和Go程序打包
  4. Android Studio开发基础之Activity之间参数传递
  5. RedHat6.7安装教程,图解,超详细
  6. wikioi 1306 机智Trie树
  7. 高等微積分(高木貞治) 1.4節 例2
  8. 如何判断对方列表里是不是好友_微信如何快速查看是否为好友关系
  9. SQA定义、质量模型、SQA与测试的关系
  10. mybatis update 不为空的_详解MyBatis-Plus updateById方法更新不了空字符串/null解决方法...
  11. oracle 的逻辑结构设计,浅谈Oracle数据库逻辑结构
  12. jQuery-1.9.1源码分析系列(十一) DOM操作续——克隆节点
  13. 用nginx转发请求tomcat 如何配置访问日志获取真实ip
  14. C51单片机实验——7段数码管实验
  15. 赵铁安烧饼机器人_河南农民发明烧饼机器人历时六年花费达60万元,有人出20万想买...
  16. 为什么引入非线性激励函数?
  17. 艺赛旗RPA开发金蝶ERP自动化流程的技巧
  18. sql注入在线检测(sqlmapapi)
  19. Laplace变换的引入
  20. 欢迎观看Toni_hou的#生活6

热门文章

  1. 【Python】SNMP的安装及Python的调用
  2. Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
  3. 如何:删除Word 2010中的“向下箭头”
  4. mysql 数据库中根据当前系统时间,取前后几秒 几分钟 几小时 几天
  5. spring boot 处理自定义注解
  6. CentOS 7下使用chkconfig添加的服务无法使用/etc/profile里面的环境变量
  7. webstorm license key
  8. Windows服务器:切断默认共享通道七招
  9. RHEL5 安装VMware tools
  10. 统计无符号整数二进制中 1 的个数(Hamming Weight)