角色
asmack-android-8-4.0.0.jar
Openfire 3.9.1
PHP 5.3.28 (cli) (built: Dec 15 2013 17:43:05)
android 4.1
剧情
某日,某同学需要在android上开发一个IM聊天室应用,采用了 asmack←XMPP协议→openfire 的组合。加入聊天室需要一个昵称和头像才有资格进去,为了达到目的,该同学把昵称和头像组合起来作为一个身份进入聊天室,聊天室内展示该身份时,再将昵称和头像分开。举例来说,“XX:OO"这个身份是由昵称“XX”和头像“OO”组成的。
由于该同学脑筋异常,昵称XX非要从服务器获取不可,于是他特意用PHP写了个网页,专门用来返回昵称。他的PHP是这样写的:
<?php
echo 'XX';
?>
于是当他访问这个网页的时候,返回了
XX
·
再于是,经过昼夜编码,android可以登陆聊天室了。但是很奇怪的,每次加入聊天室都会得到一个NoResponse的异常。这位同学检查了各种可能,甚至包括XMPP是否运行在安全模式下。
最终在排查报文时,偶然发现打印的日志是这样的
D/SMACK(6274): SENT (0): <presence id='jRtGU-4' to='199@conference.im/OO
D/SMACK(6274): :XX'><x xmlns="http://jabber.org/protocol/muc"></x></presence>
D/SMACK(6481): RCV (0): <presence id="jRtGU-4" to="d1c6b13a@imhere/d1c6b13a" from="210@conference.im/OO :XX"><x xmlns="http://jabber.org/protocol/muc#user"><item jid="d1c6b13a@imhere/d1c6b13a" affiliation="none" role="participant"/></x></presence>
几秒后又是一个异常:
就是说,服务器把
XX
:OO
变成了
OO :XX
但是居然还能正常发送和接收聊天室的消息。
该同学把获取OO的服务器代码改成了
<?php
echo 'XX';
exit();
?>
额..终于可以消灭NoResponse异常了..
剧终
很囧是不是,我也这样觉得...哈哈