高手请进!

lzyang 2003-10-15 11:47:00
想请问高手,QQ 的整个聊天工作流程与原理是怎么样的?知道多少请告诉多少,发言有分!
...全文
39 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cysoft 2003-10-21
  • 打赏
  • 举报
回复
windinwing(潇笑) 老兄,这个协议似乎已经不在使用了,现在tencent使用的协议已经有了比较nb的加密协议,我不懂汇编,但是我用嗅探器得到的qq传输数据是的的确确经过加密的.我对这个很有兴趣,你们谁能公开有关的细节呢?
谢谢大家
lovered 2003-10-21
  • 打赏
  • 举报
回复
v
Stevetan81 2003-10-21
  • 打赏
  • 举报
回复
只知道用的是UDP协议
windinwing 2003-10-21
  • 打赏
  • 举报
回复
服务器相当于拉皮条的,如先A上线把A介绍给B ,服务器只保存在线列表和端口号
然后上线时载好友列表,每隔一定时间和服务器对比一次,来刷新列表。 发送消息
时应该是A真接发给B,当到达一定时间没有发送成功时就转交给服务器转发
lzyang 2003-10-20
  • 打赏
  • 举报
回复
To windinwing(潇笑):
那是否就说明OICQ 的工作方式是,QQ A 与QQ B 是通过服务器通讯,A 发送信息给B 需要先发到服务器,再有服务器发送给B ,而不是A 和B 直接通讯的。
lzyang 2003-10-17
  • 打赏
  • 举报
回复
请高手多多发言啊!!!
lzyang 2003-10-17
  • 打赏
  • 举报
回复
To cellblue(cellblue):
如兄台所说,那么QQ 服务器其实只是帮助QQ A 与QQ B 保存一个双方的通讯地址,当QQ A 要发送消息给QQ B 的时候就从服务器上取得QQ B 的地址,然后往这个地址发送消息,反之也是?
那请问兄台,服务器如何判断这个地址仍然正确,就是如何判断QQ A 一直在线?谢谢
windinwing 2003-10-17
  • 打赏
  • 举报
回复
老版的

公开OICQ所有通讯协议
--------------------------------------------------------------------------------

03-06-2002 18:56:33 病毒资讯网 拉登 点击:1892



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需要身份验证且不在线
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) 连接测试
lzyang 2003-10-17
  • 打赏
  • 举报
回复
顶一下
shajie 2003-10-15
  • 打赏
  • 举报
回复
我啥也不知道,不过我发言了。。。。
lzyang 2003-10-15
  • 打赏
  • 举报
回复
请详细告知"关键是服务端的客户地址以及信息服务"
bbwolfcool 2003-10-15
  • 打赏
  • 举报
回复
你不会自己希望用C# 做个QQ?
用SOCKET ,UDP协议,很容易实现客户端之间交互

关键是服务端的客户地址以及信息服务
chenqinzeng 2003-10-15
  • 打赏
  • 举报
回复
帮你顶
xingxinglzg 2003-10-15
  • 打赏
  • 举报
回复
不太清楚,帮你顶
wey1996 2003-10-15
  • 打赏
  • 举报
回复
同意楼上的!
cellblue 2003-10-15
  • 打赏
  • 举报
回复
大概模型是

QQA从本地通过使用UDP方式申请一个端口登陆服务器,服务器记录下这个QQ的公网的IP和端口(在此,这个QQ所申请的端口被各个代理或网关解析成另外一个端口,只要往这个端口写数据,就会被传递回到最原始的端口),另外一个QQB从服务器读取这个QQA的IP和端口,然后就可以通过UDP方式往这个IP和端口发送数据包,网关或代理就会把这个数据包传递给QQA所申请的端口,QQA通过监听这个端口就可以取得数据包了。
反之亦然

以前,QQ隐身的时候数据包都是往服务器走的,现在好像改善了,只有少量的数据往服务器走
hlj321 2003-10-15
  • 打赏
  • 举报
回复
接分
rengang11 2003-10-15
  • 打赏
  • 举报
回复
up
bbwolfcool 2003-10-15
  • 打赏
  • 举报
回复
服务器端需要提供给对方用户的信息,这样的目的是当一个用户希望连接另外一个用户的时候
必须提供 IP 与 端口号了

这样做,就必须有一个动态的数据库,或者数据表,当有人上线就需要通知所有好友,并且通知他们这个好友的 ip 以及端口号,有了这些信息就可以直接通过Socket 通讯,或者通过服务器转发

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧