您的位置:首页 > 其它

一个回车引发的几夜不眠

2014-06-20 09:43 99 查看

角色

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聊天室应用,采用了 asmackXMPP协议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异常了..

剧终

很囧是不是,我也这样觉得...哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: