OICQ技术的分析和实现攻略
2005-10-26 作者:向东 来源:中央民大
文章关键字:Web,数据库技术 模仿QQ的实现
一、引言
OICQ目前中国最大的计算机通讯软件,它的使用遍及几乎所有的中国地区。它极大地推动了网络的发展,已经成为Internet中最流行、最主要的信息聊天服务方式。它把各种类型的信息资源,如静态图象、文本、数据、视频和音频有机地结合起来,使用户能够在电脑上浏览、查询和共享以及建立在WWW服务器所有站点上的超媒体信息,渐渐成为通讯行业的QQ帝国。目前QQ使用的通讯技术与数据库管理(DBMS)相互融合的研究领域已成为热点方向之一,数据库厂家和相关的公司也纷纷推出各自的软件产品和中间件支持OICQ技术和相关服务技术的融合,将两者取长补短,发挥各自的优势,使用户可以在OICQ平台上方便地检索数据库的内容。所谓OICQ系统是指基于INTERNET客户端和服务器模式信息服务,充分发挥DBMS高效的数据存储和管理能力,以Web浏览器 /服务器(B/S)和客户端/服务器(C/S)混合模式为平台,将客户端
统一的超大服务平台,为用户提供使用简便、内容丰富的服务。
二、分析Oicq的协议报文
我个人认为在此基础上大型数据库管理系统必将成为Internet和Intranet提供的核心服务,为Internet上的软件开发提供技术支持。在此,本人将对OICQ的相关通讯协议作分析和自己个人见解和有关的实现方式作一定的介绍,重点是介绍他的服务器技术和本人的的一点见解!
它的数据传送没有经过加密,于是对OICQ服务器系统网络捕包分析及其通讯协议分析研究成为可能,如下:
协议:协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。
OICQ用户到OICQ服务器的通讯协议引导符(0x81+0x0A+0x01)报文类型报文内容报文说明
0x01昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许
0x02服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身
0x03服务号(L)+对方服务号(L)+内容(S)发送信息到某人
0x04服务号(L)+组号(L)+内容(S)广播信息,组号=0为全体
0x05服务号(L)+朋友服务号(L)查看朋友资料
0x06服务号(L)+组名称(S)增加组
0x07服务号(L)+组编号(T)+组名称(S)修改组名称
0x08服务号(L)+组编号(T)删除组
0x09服务号(L)+移动人数(T)+{朋友服务号(L)+目的组号(T)}移动组成员
0x0a服务号(L)+起始编号(L)+回传个数(T)+查找标志(T)看谁在线上
查找标志1=向小找2=向大找
0x0b服务号(L)+SQL语句(S)自定义查找
0x0c服务号(L)+朋友服务号(L)增加好友
0x0d服务号(L)+朋友服务号(L)+加入原因(S)请求加入好友
0x0e服务号(L)+朋友服务号(L)删除好友
0x10服务号(L)+显示模式(T)更改显示方式1上线2隐藏3免打扰4离线
0x11服务号(L)+监视服务号(L)监视某人谈话
0x12服务号(L)+昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)更改用户基本信息
0x13服务号(L)+朋友服务号(L)+文件名(S)+文件长度(L)请求发送文件
0x14服务号(L)+朋友服务号(L)+允许/拒绝是否允许发送文件
0x15服务号(L)+朋友服务号(L)+文件内容(B)发送文件
0x16服务号(L)连接测试报文
0x17服务号(L)+朋友服务号(L)+同意标志(T)应答对方请求加入好友
0=拒绝
1=同意
OICQ服务器到OICQ的通讯协议
报文类型报文内容报文说明
0x01成功/失败(T)+服务号(L)新用户注册结果返回
0x02成功/失败(T)+组个数(T)+{组名称(S)+组编号(T)+朋友个数(T)+{朋友服务号(L)+肖像编号(T)+朋友状态(T)+朋友昵称(S)}老用户注册结果返回
朋友状态
1=上线=2隐藏=3免打扰4离线
0x03标志(T)+朋友服务号(L)+信息(S)+信息类型(T)标志1=系统2=用户
发送消息,服务号=0是系统消息
1=用户某某已经把你加为好友
2=用户某某请求你通过身份验证
3=用户某某同意了你的验证要求
4=用户某某拒绝了你的验证请求
0x04成功/失败(T)+朋友服务号(L)+昵称(S)+肖像(M)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S) +地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)朋友信息回送
0x05成功/失败(T)+组编号(T)+组名称(S)增加组结果回送1/0
0x06成功/失败(T)+组编号(T)+组名称(S)修改组名称结果回送1/0
0x07成功/失败(T)+组编号(T)删除组结果回送1/0
0x08成功/失败(T)移动组成员结果回送1/0
0x09成功/失败(T)+在线个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)}查找在线人员结果回送
0x0a成功/失败(T)+找到个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)}自定义查找结果回送(最多50)
0x0b标志(T)+朋友服务号(L)增加好友结果回送标志
0=数据库失败
=1成功
=2需要身份验证
=3对方不允许加入
=4需要身份验证且不在线OICQ服务器系统通讯协议- -
0x0c朋友服务号(L)+昵称(S)+肖像号(M)+朋友状态(T)给在线用户增加好友
0x0e成功/失败(T)+朋友服务号(L)删除好友结果回送
0x10服务号(L)+显示模式(T)显示模式回送=1上线=2隐藏=3免打扰4离线
0x11成功/失败更改用户基本信息结果回送
0x12朋友服务号(L)+文件名(S)+文件长度(L)请求发送文件
0x13朋友服务号(L)+允许/拒绝是否允许发送文件1允许0拒绝
0x14朋友服务号(L)+文件内容(B)发送文件
0x15朋友服务号(L)+当前状态(T)朋友状态回送(系统发送)=1上线=2隐藏=3免打扰4离线
0x16服务号(L)连接测试
二.我的OICQ实现方案:
于是,针对OICQ的特性和定位分析如下:
1. 它是一个服务和客户都是超大规模的,同时要多用户的多人点对点操作!
2. 它是一个需要很高效能的服务和客服的系统级别的程序!
3. 它还要高效性能和满足广大群体的需求!
我得出如下结论:
1. 它必须是要用非常高效的计算机语言编写,高效才能有好的表现!
2. 大型的数据库支持和服务器集群。
3. 虽然说现在流行B/s模式,但是考虑到服务器的承受能力,还是要用到C/S!
4. 客服之间的通讯不可经过服务器端,独立以便进一步减少服务器的负担!
5. 客服端要美观大方好安装操作!(如下图)
一个项目的开发,往往牵扯到很多的东西,大致考虑如下五点:
1. 服务端和客服端编程语言的选择2.性能和开发周期3.数据库的选择3.通讯协议的方式4.安全的考虑5。是否跨平
台!
.......论文数据保密
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/179/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!