这回我们做一下聊天功能,要实现此功能,我们要做两件事,第一,我们要先了解下聊天协议,第二,画一个能收发消息的UI界面。

  ok,我们开始吧,看一下聊天协议:

00000000  FF FF C9 00 03 00 00 00  11 00 00 00 04 61 61 30   ?.... .....aa0 
00000010  32 00 00 00 00 00 00 00  04 61 61 30 31 00 00 00   2....... .aa01... 
00000020  00 00 00 00 0D 00 00 00  05 00 00 00 68 61 70 70   ........ ....happ 
00000030  79 00 00 00 00                                     y....   

  上面的byte流,就是aa02用户发给aa01的一条消息,我们先看消息头所在的前36个字节,它的消息类型是0xC9即是十进制的201,MessageID为3,整个消息体的长度是0x11即十进制的17,好的消息头都长的一样,我们只需记下与其它消息不同的MessageType为12就好,下面我们来看一下从索引位36处开始的消息体,0D 00 00 00这个int型的变量存储了描述文字消息的byte流长度,即在它后面的一个int型变量和一个string型变量所占的字节数,int型变理和string型变量分别描述聊天内容的长度和内容本身的字串。了解这些我们就可以看明白,上面的byte流中的聊天内容是happy,但在68 61 70 70 79后面为什么会多出来4个00,这个我开始是以为我写的聊天内容happy就5个字节可能会太短,协议对内容的长度有最少字节的限制要补全,但后来在我用iPhone连上去给win下的Client发消息时,怎么也不显示,只有加上这4个00才好用,这个我就没有看win下Client的代码关于这一块是怎么实现的,有兴趣的朋友可以自己看下其中的源码。  

  好,我们搞定了第一,现在来看第二,我们要画一个能收发消息的UI,有看上一篇关于在线列表实现的朋友知道,我在短时间里是做不出来一个漂亮UI的,漂亮UI真的需要时间,这里我用了acani 的开源项目 AcaniChat的UI,其地址在这里,在这里我向acani学长问好,接下来的事情只需我们依照发送登录请求和解析在线用户列表的方法便可完成任务,此处我不多废话了。

     下面是iPhone和Win下Client的消息截屏:

 

 

  这个Demo其本的功能都有了,但要想让它成为一个产品,要做的事情还有很多,以后有时间我会把它细化和重构,比如把byte流分成MessageHead和MessageBody,消息处理那块搞个MessageDispatcher,MessageHandler什么的,先这样吧,以后有时间再搞,先把公司的项目做做好。

    一个人的能力是有限的,而无论是在学习还是在工作中,我们都需要同学和同事,如果大家对把这个Demo做成产品有兴趣,请和我联系upwifi@gmail.com,我们一起搞,多谢  

作者: upwifi 发表于 2011-08-30 23:51 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"