• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            一種Jingle開源庫的文件傳輸原理與實現

            轉載自:http://www.lunwen163.com/h/163-14/14903.htm

              要:本文以XMPP擴展P2P協議的開源庫libjingle為研究對象,重點分析了libjingle文件傳輸原理、文件傳輸過程以及文件傳輸協議格式,在libjingle基礎上提出了文件傳輸應用程序類構架,最終實現開發基于Jingle協議的文件傳輸應用程序.

            0    引言

            隨著即時通信(IM)軟件已經成為互聯網信息平臺的重要組成部分[4]。但基于自身利益的考慮,各個IM軟件均制定并保守自己支持的通信協議格式和標準,導致了各個通信軟件不能互聯互通,客觀上制約了IM的發展。

            XMPP協議標準解決了不同即時通信平臺信息互通的難題。基于XMPP擴展P2P協議的應用開源庫libjingle庫可以開發第三方IM軟件,最終實現第三方IM與支持XMPP協議的即時通信軟件的文本和語音等的互操作。

            本文以libjingle為研究對象,重點討論libjingle支持的文件傳輸的實現原理和協議格式,以及介紹以libjingle庫開發文本傳輸的基本實現。

            1    libjingle文件傳輸通信原理

            1.1    libjingle介紹

            libjingleGoogle公司推出的基于語音和P2P通信的C++開源庫。利用libjingle開源庫能夠開發出第三方的Jingle點到點通信應用程序,實現與所有支持XMPP以及Jingle擴展協議的軟件實現通信。

            1.2    libjingle通信系統構架

            libjingle在語音、視頻、文件等傳輸方面具有良好的健壯性,這要得益于libjingle采用信令和數據分信道傳輸的機制,即libjingle采用了信令在帶內信道傳輸,用戶數據在帶外信道上傳輸的機制。

             libjingle通信信道

            libjingle的連接包括2種信道(如圖1[12]。一是會話協商信道,或者稱為XMPP信令信道,此為帶內信道。會話協商信道協商信令必須通過中間Jingle Server。二是帶外信道也即數據信道。通過數據傳輸信道實現用戶數據的傳輸,這些數據包括語音、視頻、文本等。

             libjingle數據傳輸路徑

            對于數據傳輸通道,在libjingle中,根據有無防火墻或者NAT設備,有3種不同數據傳輸路徑(如圖1[12]。在有防火墻或者NAT設備的情況下,包括通信雙方的直接連接通信和通過中繼服務器轉發連接通信。

             libjingle穿透防火墻或者NAT技術

            libjingle一個最重要的能力就是能夠穿透防火墻或者NAT設備來協商連接。其使用ICEInteractive Connectivity Establishment )技術來實現穿透防火墻。

            ---------------------------------

             1.3    libjingle文件傳輸協議格式

               libjingle文件傳輸協議基于P2P的通信協議。相對于音頻視頻采用UDP連接通信,文件傳輸采用一種TCP-LikePseudoTCP)連接通信的格式[1]PseudoTCP格式(如圖2)是TCP的改進版,如下所示,其中PseudoTCP頭共24個字節。

                ① 會話數(Conversation Number)32位,記錄所有的會話數。

             

            ② 序列碼(Sequence Number):32位,用來表示從發送端到接收端字節流數。

            ③ 確認碼序號(Acknowledgment Number):32位,如果設置了ACK控制位為1,確認碼序號這個值表示一個準備接收的下一個包的序列碼。

             Pseudo控制位(PseudoCTL):8位,表示PseudoTCP連接過程的狀態。

            ⑤ 控制位(Control):共6位,依此包括URG位、ACK位、PSH位、 RST位、 SYN位、 FIN位。

            ⑥ 窗口(Window):16位;接收端告訴發送端,其要求收到的TCP數據段大小。

            ⑦ 發送時間戳(Timestamp sending):32位,表示發送數據報時間。

            ⑧ 接收時間戳(Timestamp receiving):32位,表示接收到數據報時間。

            相對于TCP連接,UDP連接更加容易通過NATlibjingleTCP-Like數據報具有TCP報連接傳輸的功能,保證了文件傳輸的可靠性,但不易通過防火墻或者NAT [5]。通過PseudoTCP數據報頭加了UDP頭,組成了一個具有TCP功能的UDP數據報(如圖3)。

            2    libjingle文件傳輸的實現

            通過libjingle提供的C++源代碼庫,能夠開發出自己的Jingle ServerJingle Client

            2.1    libjingle文件傳輸類

            libjingle文件傳輸客戶端分文四個部分 [1],一是用戶應用(Application)接口單元;二是XMPP報文傳輸單元(XMPP Messaging Component ),此單元是XMPP信令在應用程序和網絡之間傳輸的接口;三是會話邏輯和會話管理單元(Session Logic and Management Component ),控制每一個會話類型具體的邏輯請求;四是點到點傳輸單元(Peer-to-Peer Component),主要作用是管理本地與遠程計算機的連接。

            報文傳輸單元中,XmppPump是頂層管理類。XmppClient是應用程序與網絡傳輸XMPP信號的出口與入口點。XmppTask以及其派生類作為異步的XMPP任務類,能夠扮演xmpp信令的發起者、偵聽者或者兩者兼有的角色。

            會話邏輯和會話管理單元的主要類包括SessionTransporPseudoTCPChannelTransportChannelSessionManagerHttpPortAllocator等。Session類主要作用包括在XMPP隧道上協商文件數據傳輸隧道,以及監測、建立、斷開數據傳輸連接。

            2.2 libjingle文件傳輸具體流程

            文件的P2P傳輸首先是登錄 XMPP服務器,然后才能在兩用戶端實現文件的傳輸。具體實現流程如下。

            ① 客戶端應用程序啟動,登錄XMPP服務器。首先初始化SSL,保證數據傳輸安全,然后創建一個信令線程。從用戶那里得到用戶信息比如登錄名、密碼等信息初始化XmppClientSettings對象,創建一個XMPP任務管理對象XmppPump,由XmppPump創建XmppClient對象和控制登錄服務器。

            ② 協商建立文件傳輸會話連接,并在雙方傳輸文件。客戶端運行 HttpClient實例對象,HttpClient對象發送一個基本的GET請求通過P2PTransport對象實現連接協商。而在服務器端運行一個HttpServer實例對象,HttpServer實例對象接收連接請求,創建一個PseudoTcpChannel對象控制連接,然后創建和發送一個在本地存取文件的流接口點。使用數據流的形式讀文件,文件數據流的發送通過PseudoTcpChannel對象。文件數據流最終通過TransportChannel發送出并通過網絡到達接收方。在接收方,TransportChannel對象接收文件數據流信息,并把數據流轉換成StreamInterface流,最終通過PseudoTcpChannelStreamInterface流反饋給HttpClient對象,由HttpClient對象把數據以文件的形式存儲在存儲器上。

            結束語

            本文分析了libjingle開源庫的文件傳輸原理,并描述了利用libjingle開發文件傳輸客戶端的實現過程。libjingle文件傳輸采用具有TCP功能的UDP連接,即具有良好的可靠性,又能方便的通過NAT,實現真正的全網無障礙通信。但是,libjingle的文件傳輸協議并沒有成為一個成熟的標準,其通用性還有待改善。

            [參考文獻]

            [1] Google.libjingleE B /OL.(2008-01-10) [2008 -10-20].http://code. google.com/apis/talk/libj ingle/.

            [2]xmpp.org.XMPP ExtensionsE B /OL.(2008-02-01) [2008-10-20]. http://xmpp. org/extensions/ .

             

            [3]  張彥 . Jabber/XMPP技術的研究與應用[J] . 科學技術與工程,200776):1032-1035.

            [4] 張文茂等 . 互聯網即時消息(InstantMessag ing,IM)的研究現狀和展望[J . 小型微型計算機系統,2007,(7):62-68.


            posted on 2013-09-01 14:19 楊粼波 閱讀(2458) 評論(0)  編輯 收藏 引用

            日韩一区二区三区视频久久| 久久免费国产精品| 97久久久久人妻精品专区| 精品无码久久久久国产| 久久伊人精品青青草原高清| 久久精品中文字幕有码| 亚洲午夜久久久久久久久电影网| 久久久精品人妻一区二区三区四| 国产99久久久国产精品~~牛| 无码人妻久久一区二区三区蜜桃| 少妇久久久久久被弄高潮| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 大蕉久久伊人中文字幕| 亚洲国产精品无码久久SM| 精品熟女少妇aⅴ免费久久| 久久久久久免费视频| 色成年激情久久综合| 日韩精品无码久久久久久| 久久久久国产亚洲AV麻豆| 久久精品亚洲日本波多野结衣 | 亚洲AV无码久久精品蜜桃| 国产精品va久久久久久久| 久久久噜噜噜久久熟女AA片| 久久伊人亚洲AV无码网站| 久久国产精品一区二区| 99蜜桃臀久久久欧美精品网站 | 亚洲国产精品无码久久久蜜芽 | 久久精品无码一区二区日韩AV| 久久久久亚洲AV无码麻豆| 久久久一本精品99久久精品88| 国产午夜精品理论片久久| 国产精品久久国产精品99盘| 日本欧美久久久久免费播放网| 婷婷久久综合九色综合九七| 久久久久久毛片免费看| 久久精品国产99久久丝袜| 久久AAAA片一区二区| 久久强奷乱码老熟女| 久久综合五月丁香久久激情| 久久夜色精品国产www| 久久久精品波多野结衣|