有了請(qǐng)求登錄包返回的密鑰(CQQUser::m_pbInitKey),就可以開始構(gòu)造登錄包了(這里順便提一下,登錄包里帶有QQ最重要的數(shù)據(jù)——密碼,沒有登錄密鑰直接發(fā)送密碼原文是極不安全的,這也是為什么登錄包之前還要請(qǐng)求登錄/應(yīng)答過程的原因)。
登錄和登錄回復(fù)包是用登錄密鑰加密/解密的
登錄包構(gòu)造(CLoginPacket::PutBody)和登錄回復(fù)解析(CLoginReplyPacket::ParseBody)的每一步在源代碼中注釋都有說明,其中著重注意:
登錄包構(gòu)造中:沒什么好說的,看代碼
登錄回復(fù)包解析中:
很多請(qǐng)況下不會(huì)直接登錄成功,而是由服務(wù)器返回一個(gè)登錄重定向包(回復(fù)碼是QQ.QQ_REPLY_LOGIN_REDIRECT),而且不止一次重定向服務(wù)器,所謂重定向即——你向一個(gè)QQ服務(wù)器發(fā)送登錄請(qǐng)求,而這個(gè)服務(wù)器會(huì)告訴你另一個(gè)QQ服務(wù)器地址和端口(不要告訴我你認(rèn)為騰訊只有一個(gè)服務(wù)器

),這時(shí)你就要向后者重發(fā)登錄包(但是登錄密鑰都是一樣的)。至于為什么不直接在這個(gè)服務(wù)器登錄,這你就要問騰訊的客服了(取決于服務(wù)器的策略)
如果登錄失敗,會(huì)返回失敗消息的字符串
最后就是登陸成功的消息,登錄成功會(huì)返回很多重要信息,包括你想到的和沒想到的,其中session key(會(huì)話密鑰)是下一個(gè)密鑰,你今后發(fā)送的大多數(shù)消息和接收的大多數(shù)消息,都是用這個(gè)密鑰加密解密的
代碼svn:
https://vcye23.svn.sourceforge.net/svnroot/vcye23/qqprotocol/引用請(qǐng)注明出處,謝謝
posted on 2007-10-26 23:20
葉子墻 閱讀(3113)
評(píng)論(5) 編輯 收藏 引用