有了请求登录包返回的密钥(CQQUser::m_pbInitKey),就可以开始构造登录包了(这里顺便提一下,登录包里带有QQ最重要的数据——密码,没有登录密钥直接发送密码原文是极不安全的,这也是为什么登录包之前还要请求登录/应答过程的原因)。
登录和登录回复包是用登录密钥加密/解密的
登录包构造(CLoginPacket::PutBody)和登录回复解析(CLoginReplyPacket::ParseBody)的每一步在源代码中注释都有说明,其中着重注意:
登录包构造中:没什么好说的,看代码
登录回复包解析中:
很多请况下不会直接登录成功,而是由服务器返回一个登录重定向包(回复码是QQ.QQ_REPLY_LOGIN_REDIRECT),而且不止一次重定向服务器,所谓重定向即——你向一个QQ服务器发送登录请求,而这个服务器会告诉你另一个QQ服务器地址和端口(不要告诉我你认为腾讯只有一个服务器
),这时你就要向后者重发登录包(但是登录密钥都是一样的)。至于为什么不直接在这个服务器登录,这你就要问腾讯的客服了(取决于服务器的策略)
如果登录失败,会返回失败消息的字符串
最后就是登陆成功的消息,登录成功会返回很多重要信息,包括你想到的和没想到的,其中session key(会话密钥)是下一个密钥,你今后发送的大多数消息和接收的大多数消息,都是用这个密钥加密解密的
代码svn:
https://vcye23.svn.sourceforge.net/svnroot/vcye23/qqprotocol/引用请注明出处,谢谢
posted on 2007-10-26 23:20
叶子墙 阅读(3059)
评论(5) 编辑 收藏 引用