* 發(fā)送消息的包,格式為 * 1. 頭部 7個字節(jié)(1. 包頭標志,1字節(jié),0x02,2. 客戶端版本代碼,2字節(jié),3. 命令,2字 節(jié),4. 包序號, 2字節(jié)) * 2. 發(fā)送者QQ號,4個字節(jié) * 3. 接收者的QQ號,4個字節(jié) * 4. 發(fā)送者QQ版本,2字節(jié) * 5. 發(fā)送者QQ號,4字節(jié) * 6. 接收者QQ號,4個字節(jié)(奇怪,為什么要搞兩個在里面) * 7. 發(fā)送者QQ號和session key合在一起用md5處理一次的結(jié)果,16字節(jié) * 8. 消息類型,2字節(jié)(41) * 9. 會話ID,2字節(jié),如果是一個操作需要發(fā)送多個包才能完成,則這個id必須一致 * 10. 發(fā)送時間,4字節(jié) * 11. 發(fā)送者頭像,2字節(jié) * 12. 字體信息,4字節(jié),設(shè)成0x00000001吧,不懂具體意思 * 13. 消息分片數(shù),1字節(jié),如果消息比較長,這里要置一個分片值,QQ缺省是700字節(jié)一個分片,這個700字節(jié)是純消息, * 不包含其他部分 * 14. 分片序號,1字節(jié),從0開始(55) * 15. 消息的id,2字節(jié),同一條消息的不同分片id相同 * 16. 消息方式,是發(fā)送的,還是自動回復的,1字節(jié) * 17. 消息內(nèi)容,最后一個分片的結(jié)尾需要追加一個空格。 * Note: 結(jié)尾處的空格是必須的,如果不追加空格,會導致有些缺省表情顯示為亂碼 * 18. 消息的尾部,包含一些消息的參數(shù),比如字體顏色啦,等等等等,順序是 * 1. 字體修飾屬性,bold,italic之類的,2字節(jié),已知的位是 * i. bit0-bit4用來表示字體大小,所以最大是32 * ii. bit5表示是否bold * iii. bit6表示是否italic * iv. bit7表示是否underline * 2. 顏色Red,1字節(jié) * 3. 顏色Green,1字節(jié) * 4. 顏色Blue,1字節(jié) * 5. 1個未知字節(jié),置0先 * 6. 消息編碼,2字節(jié),0x8602為GB,0x0000為EN,其他未知,好像可以自定義,因為服務器好像不干涉 * 7. 字體名,比如0xcb, 0xce, 0xcc, 0xe5表示宋體 * 19. 1字節(jié),表示18和19部分的字節(jié)長度 * 20. 包尾部 * * 請求傳送文件的包,這是這個包的另一種用法,其格式為 * 1 - 14. 1到14部分均與發(fā)送消息包相同,只有第8部分不同,對于UDP的請求,8部分是0x0035,對于TCP,是0x0001 * 15 - 17. 懷疑也和發(fā)送消息包相同,但是在這種情況中,這部分沒有使用,為全0,一共11個0字節(jié) * 18. 傳輸類型,1字節(jié),表示是傳文件還是傳表情 * 19. 連接方式字節(jié),UDP是0, TCP是3 * 20. 4個字節(jié)的發(fā)送者外部ip地址(也就是可能為代理地址) * 21. 2個字節(jié)的發(fā)送者端口 * 22. 2個字節(jié)的端口,第一個監(jiān)聽端口,TCP沒有這個部分 * 23. 4個字節(jié)的地址,真實IP * 24. 2個字節(jié)的端口,第二個而監(jiān)聽端口 * 25. 空格符號做為上述信息的結(jié)束,一個字節(jié),0x20 * 26. 分隔符0x1F * 27. 要傳送的文件名 * 28. 分隔符0x1F * 29. 字節(jié)數(shù)的字符串形式后跟 " 字節(jié) ",比如文件大小3字節(jié)的話,就是 "3 字節(jié) "這個字符串的編碼形式 * 30. 尾部 * * 同意傳送文件的包,格式為 * 1 - 24. 除了8部分,其他均與發(fā)送消息包相同。對于UDP的情況,8部分是0x0037,TCP是0x0003。 * UDP時,最后的本地ip和端口都是0;TCP時沒有22部分 * 25. 尾部 * * 拒絕接收文件的包,格式為 * 1 - 19. 除了8部分,均與同意傳送文件包相同。對于UDP的情況,8部分是0x0039,對于TCP,是0x0005 * 20. 尾部 * * 通知我的IP信息,格式為 * 1 - 24. 除了8部分,均與請求傳送文件包相同。8部分是0x003B * 25. 尾部 * * 取消傳送文件,格式為 * 1 - 18. 除了8部分,均與請求傳送文件包相同。8部分是0x0049 * 19. 尾部 * * 要求別人主動連接我的包,格式為 * 1 - 18. 除了8部分,均與請求傳送文件包相同。8部分是0x003F * 19. 尾部 |