MSN協議簡單分析._第1頁
MSN協議簡單分析._第2頁
MSN協議簡單分析._第3頁
MSN協議簡單分析._第4頁
MSN協議簡單分析._第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本設計主要實現登錄、退出MSN Server服務器,并分析 MSN Clie nt協議,實現MSN客戶之間的通訊。1.即時通訊軟件簡介即時通訊軟件是通過即時通訊技術來實現在線聊天、交流的軟件,目前中國最流 行的QQ、MSN、POPO、UC等,而國外主要使用ICQ、MSN。即時通訊(Instant Messaging )透過即時通訊功能,你可以知道你的親友(朋友)是否正在線上,及與他們即時通訊。即時通訊比傳送電子郵件所需時間更短,而且比 撥電話更方便,無疑是網絡年代最方便的通訊方式。即時通訊(In sta nt messagi ng簡稱IM )是一個終端服務,允許兩人或多人使用網路即時的傳遞文字

2、信息、文件、 語音與視頻交流。MSN Messenger是Microsoft開發的聊天工具,目前在世界使用率第一的即時通訊軟件。 微軟將MSN Messenger 與Windows系統進行捆綁,并憑借用戶廣泛的Hotmail平臺吸引了大量用戶,使得MSN Messenger很快便家喻戶曉。相比于騰迅的QQ, MSN Messe nger除了具有更好的國際化支持之外,它還具有更適合商務使用的特點。成為企業職員們相互通信的首選工具,并且其用戶群體還在日益擴大。2. MSN協議簡介“ MSN Messenger ”這個說法并不十分明確,微軟使用這個術語涉及到了若干不同 通訊解決方案。MSN Mess

3、e nger Network 是微軟提供的即時通訊會話網。在個人微機 上的程序統稱為 MSN Messe nger “客戶端”,它通過 In ternet 連接到一個MSN Mess en ger “服務器”。更籠統的說就是,客戶端通過服務器與其他客戶端交互信息。在大多數 時間里,客戶端與服務器會話,服務器處理這些會話信息并通知其他人。(也被稱為“ .Net MeMSN Messenger許多人還是開微軟提供了兩個 MSN Messenger 客戶端:MSN Messenger ssenger ”)和 Windows Messenger 。微軟從未正式公布過他們的 Server,并且官方客戶端

4、不被允許連接到服務器除非微軟自己。盡管如此, 發了第三方的服務器。MSN Messenger 客戶端與服務而經由服務器從一個客戶端傳遞 協議”。兩臺計算機通訊中需要的“語言”被稱為“協議”,器間交互信息的規則被稱為“ MSN Messenger 協議”, 到另一個客戶端的信息規則在這里被稱為“MSN Client 3. MSN Message 協議MSN Messenger協議由若干客戶端與服務器發送的命令組成。例如,當客戶端聯系m ,SN人中的某人離線時,服務器將發送類似信息到客戶端:FLN myname_123hotmail.co客戶端收到此消息后,便將此人從在線用戶列表中去除,并添加到離

5、線用戶列表中。Messenger 協議包括 MSN Client 協議和 MSN Server 協議。3.1MSN協議工作模式系統MSN Messenger是一個列席式即時交互系統,“列席式”意味著不管你是否在線, 也不管你是否有一個攝像頭等客觀條件。“即時交互”意味著能與其他用戶進行會話。中的用戶都被視為同等級別的,RFC 2778給出了一個列席式即時交互系統很好的概述。NS ”)的連接,NSSB ”),它將提一個MSN Messenger 會話包含一個到“通知服務器”(簡稱“ 將提供一個列席服務。通知服務器允許你連接到“交換服務器”(簡稱“ 供一個即時通訊服務。3.1.1 通知服務器(NS

6、)建立到通知服務器的連接是 MSN Messenger會話的基礎,因為它保留著你的會話期 間在線信息:如果你離線,對于你的伙伴來說你也將離線。 通知服務器的目的主要就是保留 你的在線信息,還有其他你所關心的重要人員的信息。通知服務器同樣也提供其他通知服務,如hotmail的新郵件提示和讓你創建(或者加入)交換會話等。當你直接加入一個交換會話中時,你應該打開一個到交換板的新的連接, 并且保持通知服務器打開。3.1.2 交換板(SB)交換板保存了各人員的即時會話信息,換句話說,每個MSN中的用戶對應連接到一個共享交換板的會話中。在同一時刻有兩個會話意味著要同時連接兩個交換服務器。在MSNMesse

7、 nger中不能直接在各用戶間建立連接,并且交換板的作用就像你與對話人之間的代 理一樣。SB也可以邀請其他服務,例如文件傳輸、視頻會議。注意:SB和NS結合的并不十分緊密。例如,當交換板會話中變更他(她)的顯示名 時,交換板發送的信息或命令中仍舊使用舊名稱。另外某個用戶從 NS中退出,所有的交換板會話都將保持打開狀態直到客戶端明確的關閉他們。4. MSN登錄協議MSN客戶端與服務器間信息都是以命令格式傳遞的。命令被描述為三個字符、所有字 母大寫的命令代號。所有一般命令都有一個事務ID并且以新行結束。客戶端發送的命令一般會使服務器響應一個及以上的命令。有四種特殊類型的命令,它們的表現略不同于一般

8、命令。有效載荷命令可以跨越多行。 錯誤命令的命令代碼部分的字母替換為數字。異步命令是不經客戶端明確請求由服務器端發送的,而且并不包含事務 ID。最后是PNG命令和一些SYN應答,也不包含事務ID。4.1 MSN登錄認證所有的到MSN服務器連接都是建立在 TCP/IP之上的。客戶端通常會建立向外的連接 到服務器。MSN Messenger的官方端口是1863 ,盡管如此,協議中多處可以指定相應端口。 MSN Messenger會話首先應該登錄到通知服務器,如果有通知服務器IP地址,就直接連接,否則,就必須連接到“分派服務器”,官方客戶端使用messe ,端口 1863的分派服務器作為直接的 SO

9、CKi接,并使用 , 80端口 作為分布服務器的 HTTP連接。如果想連接到第三方的MSN Messe nger網絡,應該使用不同的分布服務器。如果首先連接到一個通知服務器,那么你就處于“登錄”處,包含了協議版本驗證, 身份驗證,如果當前服務器超負荷,還有可能轉移到其他通知服務器。登錄期間,服務器行為與通常情況不同,通信是本質上同步的,客戶端發送一個命令, 服務器響應,客戶端發送另一個命令。如果在錯誤的時候發送了一個命令(如正當協議版本在洽談時,你發送了一個 VER命令),服務器會返回 715錯誤,并斷開。如果發送了登錄期 間無意義的命令(如SYN ,將立即被斷開,并得到一個錯誤。登錄期外不需

10、要遵守此規則。4.2退出MSN登出要登出NS的話(MSN會發送你的斷線信息給每個人),最簡單的方法就是關閉Socket。如果你非正常斷開(如你使用了Modem,并被斷開),你仍將在線幾分鐘,但不能響應。正確的方法是發送 OUT命令到NS服務器,不用攜帶任何參數及事務 即斷開連接。參照協議草案中的說明,服務器應該發回OUT,但實際中,做過。有時服務器會主動關閉連接,可能有兩個原因:服務器要 你的賬號登錄到了 MSN。當有人在別處用你的賬號登錄時,原來的連接將被關閉,新連接將被建立。ID。服務器將立 從來就沒有這樣down 掉,或者有人在別處用關閉連接前,NS將給客戶端發送OUT命令并攜帶參數OT

11、H 聯系人從另外一個地點登錄。當服務器要進行維護時,將會發送OUT SSD server shutting down,發送后就立即關閉連接。4.3 MSN 消息MSN消息是通過有效載荷命令發送的,一個有效載荷命令是一種特殊形式的命令, 它包含了若干行。對于它最好的理解是,一個正規單行命令后加了一堆二進制數據(有效載荷)。最后的參數總是指定了其中所包含的字節數。不同于其他命令,有效載荷命令沒有通用的格式,他們的格式就是每個特殊的有效載 荷命令所指定的那樣。不要試圖象正規命令流一樣找出在那里結束一有效載荷命令不易定義 新行結束。你必須通過讀取命令中指定的字節數來讀取有效載荷中具體的數目的字節。有些

12、有效載荷命令包含事務ID,有些則不包含。命令中可以包含任意數目的參數,但最后一個參數總是一個正整數。這個正整數用來標識有效載荷的字節數,命令中必然指定并限制了有效載荷的長度。 在有效載荷長度后,象其他命令一樣加上一個新行,然后組成了整個有效載荷命令。有效載荷的長度按字節計算。隨后,一般的命令就可以繼續了。發送一個有效載荷命令非常簡單。大多數編程語言都包含有計算發送字符串字節數的 函數(可能叫“ len() ”或者類似函數),用這個函數計算出有效載荷的長度。計算時,不 要包括命令本身和命令末尾新行的長度。注意:服務器會按提供的長度提取信息,如果你要發送88個字節,但你指出了 87,服務器就會一直

13、等待,直到你再發送點什么, 那將提取下一個命令中的首個字節作為有效載荷 的末尾字節,你將結束當前發送到服務器的非法命令。如果信息長度太短,一樣會出現類似問題。接收有效載荷命令時會更困難寫。你不能依靠一個包中的整條命令,也不能就以新行 作為結束。應該讀取指定的消息長度,然后從socket讀取自最初的新行后指定長度的字節數。MSG命令來實現。消息對消息是協議中最早,可論證的最重要的有效載荷命令,通過我們來說太普遍,并且被 NS和SB使用著。接收MSG勺時候,該命令總是不包含事務ID,并在有效載荷長度參數前有兩個參數。第一個參數是源消息賬號,第二個是URL編碼的源顯示名。NS上,賬號名和顯示名總是

14、Hotmail (即使不是一個合法的郵件地址),或許應該被更正。BS上,兩個參數是源消息的賬號名和顯示名。當發送消息時,你必須包含一個事務ID,還有一個參數指定了到服務器的認證。你只能在SB會話中發送消息,而不是 NS會話中。發送消息時,因為服務器不會中斷有效載荷,所以你可以在有效載荷中發送任何東西, 只要不是太長,并且有效載荷長度參數正確就可以。但是,有效載荷中的信息最好用特殊方法格式規范一下。有點類似MIME每條消息被分成頭和主體部分,然后頭與主體之間用一個空白新行分 隔。消息頭應該采用 RFC 1521中所描述的標準MIME頭那樣,由一個無序的字段列表組成, 其間用新行分隔,每個新行必須

15、是rn,否則官方客戶端就不能正確理解。每個字段包含一個關鍵字和一個值,例如:PreferredEmail: example關鍵字應該是大小寫敏感的,第三方的客戶端應該如文檔所述大小寫一致。關鍵字最后必須加冒號,這里的冒號應該是關鍵字的一部分,而且也是關鍵字的結束符,然后是空格。關鍵字只能在最后出現冒號,值之間可以有。例如,文件傳輸中,一個客戶端可能會發送:Request-Data: IP-Address:另一臺客戶端可能返回:IP-Address: 5并且應該關鍵字/值應附加參數可以在任意字段中指定,每個參數用分號加空格分隔, 該成對出現,并以等號分隔。如下字段中,包含五

16、個參數:PF=22拋開這些,對于官方X-MMS-IM-Format:FN=Arial; EF=I; C0=ff0000; CS=0;由于字段是無序的,客戶端必須做好接收任意次序的字段列表, 客戶端來說,總是會按照相同的順序發送字段。同樣一個客戶端也必須能夠接收未知字段, 并忽略它們。例如 Gaim將包含一個如下字段:User-Age nt: Gaim/0.59每個合法的信息需要指定Con te nt-T ype字段,用來標識消息類型。每個消息也應該包含MIME-Version字段,但如果沒有這個字段的話,官方客戶端仍能顯示信息。4.4 MSN消息主體消息的主體幾乎可以是任何東西。如果消息頭部指

17、定了主體消息是UTF-8編碼的,那么主體部分應該進行 UTF-8編碼。這并不影響消息長度。你必須按照原始字節數計算消息長 度,而不是“字符”個數。添加新行,這些在信息中被解釋為斷行符。注 結束一行,也會同rn 樣工作良好,但n作r處理。所有的n實際上都被官方客戶端在正規文本消息中,官方客戶端用 rn 意,官方客戶端僅解析r,所以你可以以r 為行結束符將會出錯。所以你接收信息時應該按 忽略了。消息沒有主體是有可能的。如果你在頭部結束后以兩個新行結束消息,就可以實現一 個空的主體。4.5 Java實現代碼和Web發送消息頁面/* param cmail :發送到的用戶 email 。* param

18、 msg : msn 消息內容* param writeToDb : 是否將消息內容寫入數據庫 */publicboolean sendMessage(Email cmail, String msg,boolean writeToDb)messenger .getOwner().getStatus();try MsnUserStatus status =dispMsnContactStatus(status); if( ! status.equals(MsnUserStatus. this .start();messenger .getOwner().setStatus(MsnUserStatus.ONLINE ) )ONLINE ); catchboolean retval =falseONLINE );( java.lang.IllegalStateException e) /e.printStackTrace();this .start();messenger .getOwner().set

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論