研究QQ的实现原理!
我是想实现QQ的原理
客户端有两个WINSOCK
一个是TCP的,与服务器连接,随时得到在线人数
一个是UDP的,用来发送信息给在线用户
TCP方式的是正常,但是用UDP的,
发送信息的时候就出现那个"连接远端被重置"的错误
是不是因为UDP方式的时候没有得到代理服务器内的IP
大家介绍一下QQ在局域网中是如何用UDP方式的,
问题点数:200、回复次数:14Top
1 楼funboy88(司令)回复于 2002-06-14 18:07:13 得分 0
没有人解决嘛?
我以前和朋友讨论过,只是在自己做的时候遇到局域网的用户的时候没法解决
它是客户端到服务器用TCP方式
客户端到客户端是UDP方式
当两客户端相互发信息时,在线就用UDP方式发送过去,不在线,就用TCP方式发送到服务器存在数据库中,当对方下次来的时候就在登录的时候检测是不否有旧信息,有,就发送过去
现在我遇到的问题主要就是UDP如何获得局域网的IP
通过代理上网的用户的IPTop
2 楼Dickson(沧海冷心)回复于 2002-06-14 18:14:48 得分 30
先做一个模块,来解决局域网IP问题,
具体是这样的:
客户一上线,便把IP用TCP发到主机,一旦有UDP TO UDP,
就用主机先把IP发去,然后再用UDP连接Top
3 楼dgz01(打工者)回复于 2002-06-14 18:26:57 得分 10
?Top
4 楼bakw(好好潜水,天天UP)回复于 2002-06-14 19:02:36 得分 80
<<<<<<<<<<<<<<<<<<<<<<<<<<<< 看看这个 >>>>>>>>>>>>>>>>>>>>>>>>>
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) 连接测试Top
5 楼funboy88(司令)回复于 2002-06-21 15:25:23 得分 0
没有高手来回答的呀Top
6 楼funboy88(司令)回复于 2002-06-21 15:26:27 得分 0
没有高手来回答的呀Top
7 楼vbfdy(地下铁的流浪者)回复于 2002-06-21 15:35:50 得分 10
我昏!看不懂!!!!!!!!!!Top
8 楼softrain(曾经的月光,现在的日光)回复于 2002-06-21 16:23:53 得分 10
我昏倒在地,幸亏被同事一盆冷水浇醒!Top
9 楼kuangxiang007(brothers,together up!)回复于 2002-06-21 17:07:04 得分 10
我以為就只有我暈﹐還好醒來看下去還有兩個Top
10 楼KAIBate(凯)回复于 2002-06-21 17:31:28 得分 10
啊。。。厉害,Top
11 楼hengxin54(火星)回复于 2002-06-21 18:14:28 得分 10
我也在等待这个问题的答案Top
12 楼QQRN(笨QQ-馊主意提供者)回复于 2002-06-21 18:14:39 得分 10
了解……就是传输数据格式啦……Top
13 楼lonelystarcn(虫虫)回复于 2002-06-21 18:38:20 得分 10
UDP协议在同一台计算机中是不允许两个以上的WINSOCK设置成同一端口的,而QQ中却能够在同台计算机中与相通信,难道它的端口不固定???Top
14 楼funboy88(司令)回复于 2002-06-23 13:06:24 得分 0
还有没有人讨论的呀,要不就结帐了呀Top
15 楼kofkim(小金)回复于 2002-06-23 13:27:43 得分 10
我觉得,这个问题的解决你必须先看TCP/IP详解这本书!
这个论坛没有这种高手的!真的`Top




