有了請求登錄包返回的密鑰(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
葉子墻 閱讀(3097)
評論(5) 編輯 收藏 引用