• <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>

            牽著老婆滿(mǎn)街逛

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

            一種Jingle開(kāi)源庫(kù)的文件傳輸原理與實(shí)現(xiàn)

            轉(zhuǎn)載自:http://www.lunwen163.com/h/163-14/14903.htm

              要:本文以XMPP擴(kuò)展P2P協(xié)議的開(kāi)源庫(kù)libjingle為研究對(duì)象,重點(diǎn)分析了libjingle文件傳輸原理、文件傳輸過(guò)程以及文件傳輸協(xié)議格式,在libjingle基礎(chǔ)上提出了文件傳輸應(yīng)用程序類(lèi)構(gòu)架,最終實(shí)現(xiàn)開(kāi)發(fā)基于Jingle協(xié)議的文件傳輸應(yīng)用程序.

            0    引言

            隨著即時(shí)通信(IM)軟件已經(jīng)成為互聯(lián)網(wǎng)信息平臺(tái)的重要組成部分[4]。但基于自身利益的考慮,各個(gè)IM軟件均制定并保守自己支持的通信協(xié)議格式和標(biāo)準(zhǔn),導(dǎo)致了各個(gè)通信軟件不能互聯(lián)互通,客觀上制約了IM的發(fā)展。

            XMPP協(xié)議標(biāo)準(zhǔn)解決了不同即時(shí)通信平臺(tái)信息互通的難題。基于XMPP擴(kuò)展P2P協(xié)議的應(yīng)用開(kāi)源庫(kù)libjingle庫(kù)可以開(kāi)發(fā)第三方IM軟件,最終實(shí)現(xiàn)第三方IM與支持XMPP協(xié)議的即時(shí)通信軟件的文本和語(yǔ)音等的互操作。

            本文以libjingle為研究對(duì)象,重點(diǎn)討論libjingle支持的文件傳輸?shù)膶?shí)現(xiàn)原理和協(xié)議格式,以及介紹以libjingle庫(kù)開(kāi)發(fā)文本傳輸?shù)幕緦?shí)現(xiàn)。

            1    libjingle文件傳輸通信原理

            1.1    libjingle介紹

            libjingleGoogle公司推出的基于語(yǔ)音和P2P通信的C++開(kāi)源庫(kù)。利用libjingle開(kāi)源庫(kù)能夠開(kāi)發(fā)出第三方的Jingle點(diǎn)到點(diǎn)通信應(yīng)用程序,實(shí)現(xiàn)與所有支持XMPP以及Jingle擴(kuò)展協(xié)議的軟件實(shí)現(xiàn)通信。

            1.2    libjingle通信系統(tǒng)構(gòu)架

            libjingle在語(yǔ)音、視頻、文件等傳輸方面具有良好的健壯性,這要得益于libjingle采用信令和數(shù)據(jù)分信道傳輸?shù)臋C(jī)制,即libjingle采用了信令在帶內(nèi)信道傳輸,用戶(hù)數(shù)據(jù)在帶外信道上傳輸?shù)臋C(jī)制。

             libjingle通信信道

            libjingle的連接包括2種信道(如圖1[12]。一是會(huì)話(huà)協(xié)商信道,或者稱(chēng)為XMPP信令信道,此為帶內(nèi)信道。會(huì)話(huà)協(xié)商信道協(xié)商信令必須通過(guò)中間Jingle Server。二是帶外信道也即數(shù)據(jù)信道。通過(guò)數(shù)據(jù)傳輸信道實(shí)現(xiàn)用戶(hù)數(shù)據(jù)的傳輸,這些數(shù)據(jù)包括語(yǔ)音、視頻、文本等。

             libjingle數(shù)據(jù)傳輸路徑

            對(duì)于數(shù)據(jù)傳輸通道,在libjingle中,根據(jù)有無(wú)防火墻或者NAT設(shè)備,有3種不同數(shù)據(jù)傳輸路徑(如圖1[12]。在有防火墻或者NAT設(shè)備的情況下,包括通信雙方的直接連接通信和通過(guò)中繼服務(wù)器轉(zhuǎn)發(fā)連接通信。

             libjingle穿透防火墻或者NAT技術(shù)

            libjingle一個(gè)最重要的能力就是能夠穿透防火墻或者NAT設(shè)備來(lái)協(xié)商連接。其使用ICEInteractive Connectivity Establishment )技術(shù)來(lái)實(shí)現(xiàn)穿透防火墻。

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

             1.3    libjingle文件傳輸協(xié)議格式

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

                ① 會(huì)話(huà)數(shù)(Conversation Number)32位,記錄所有的會(huì)話(huà)數(shù)。

             

            ② 序列碼(Sequence Number):32位,用來(lái)表示從發(fā)送端到接收端字節(jié)流數(shù)。

            ③ 確認(rèn)碼序號(hào)(Acknowledgment Number):32位,如果設(shè)置了ACK控制位為1,確認(rèn)碼序號(hào)這個(gè)值表示一個(gè)準(zhǔn)備接收的下一個(gè)包的序列碼。

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

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

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

            ⑦ 發(fā)送時(shí)間戳(Timestamp sending):32位,表示發(fā)送數(shù)據(jù)報(bào)時(shí)間。

            ⑧ 接收時(shí)間戳(Timestamp receiving):32位,表示接收到數(shù)據(jù)報(bào)時(shí)間。

            相對(duì)于TCP連接,UDP連接更加容易通過(guò)NATlibjingleTCP-Like數(shù)據(jù)報(bào)具有TCP報(bào)連接傳輸?shù)墓δ埽WC了文件傳輸?shù)目煽啃裕灰淄ㄟ^(guò)防火墻或者NAT [5]。通過(guò)PseudoTCP數(shù)據(jù)報(bào)頭加了UDP頭,組成了一個(gè)具有TCP功能的UDP數(shù)據(jù)報(bào)(如圖3)。

            2    libjingle文件傳輸?shù)膶?shí)現(xiàn)

            通過(guò)libjingle提供的C++源代碼庫(kù),能夠開(kāi)發(fā)出自己的Jingle ServerJingle Client

            2.1    libjingle文件傳輸類(lèi)

            libjingle文件傳輸客戶(hù)端分文四個(gè)部分 [1],一是用戶(hù)應(yīng)用(Application)接口單元;二是XMPP報(bào)文傳輸單元(XMPP Messaging Component ),此單元是XMPP信令在應(yīng)用程序和網(wǎng)絡(luò)之間傳輸?shù)慕涌冢蝗菚?huì)話(huà)邏輯和會(huì)話(huà)管理單元(Session Logic and Management Component ),控制每一個(gè)會(huì)話(huà)類(lèi)型具體的邏輯請(qǐng)求;四是點(diǎn)到點(diǎn)傳輸單元(Peer-to-Peer Component),主要作用是管理本地與遠(yuǎn)程計(jì)算機(jī)的連接。

            報(bào)文傳輸單元中,XmppPump是頂層管理類(lèi)。XmppClient是應(yīng)用程序與網(wǎng)絡(luò)傳輸XMPP信號(hào)的出口與入口點(diǎn)。XmppTask以及其派生類(lèi)作為異步的XMPP任務(wù)類(lèi),能夠扮演xmpp信令的發(fā)起者、偵聽(tīng)者或者兩者兼有的角色。

            會(huì)話(huà)邏輯和會(huì)話(huà)管理單元的主要類(lèi)包括SessionTransporPseudoTCPChannelTransportChannelSessionManagerHttpPortAllocator等。Session類(lèi)主要作用包括在XMPP隧道上協(xié)商文件數(shù)據(jù)傳輸隧道,以及監(jiān)測(cè)、建立、斷開(kāi)數(shù)據(jù)傳輸連接。

            2.2 libjingle文件傳輸具體流程

            文件的P2P傳輸首先是登錄 XMPP服務(wù)器,然后才能在兩用戶(hù)端實(shí)現(xiàn)文件的傳輸。具體實(shí)現(xiàn)流程如下。

            ① 客戶(hù)端應(yīng)用程序啟動(dòng),登錄XMPP服務(wù)器。首先初始化SSL,保證數(shù)據(jù)傳輸安全,然后創(chuàng)建一個(gè)信令線程。從用戶(hù)那里得到用戶(hù)信息比如登錄名、密碼等信息初始化XmppClientSettings對(duì)象,創(chuàng)建一個(gè)XMPP任務(wù)管理對(duì)象XmppPump,由XmppPump創(chuàng)建XmppClient對(duì)象和控制登錄服務(wù)器。

            ② 協(xié)商建立文件傳輸會(huì)話(huà)連接,并在雙方傳輸文件。客戶(hù)端運(yùn)行 HttpClient實(shí)例對(duì)象,HttpClient對(duì)象發(fā)送一個(gè)基本的GET請(qǐng)求通過(guò)P2PTransport對(duì)象實(shí)現(xiàn)連接協(xié)商。而在服務(wù)器端運(yùn)行一個(gè)HttpServer實(shí)例對(duì)象,HttpServer實(shí)例對(duì)象接收連接請(qǐng)求,創(chuàng)建一個(gè)PseudoTcpChannel對(duì)象控制連接,然后創(chuàng)建和發(fā)送一個(gè)在本地存取文件的流接口點(diǎn)。使用數(shù)據(jù)流的形式讀文件,文件數(shù)據(jù)流的發(fā)送通過(guò)PseudoTcpChannel對(duì)象。文件數(shù)據(jù)流最終通過(guò)TransportChannel發(fā)送出并通過(guò)網(wǎng)絡(luò)到達(dá)接收方。在接收方,TransportChannel對(duì)象接收文件數(shù)據(jù)流信息,并把數(shù)據(jù)流轉(zhuǎn)換成StreamInterface流,最終通過(guò)PseudoTcpChannelStreamInterface流反饋給HttpClient對(duì)象,由HttpClient對(duì)象把數(shù)據(jù)以文件的形式存儲(chǔ)在存儲(chǔ)器上。

            結(jié)束語(yǔ)

            本文分析了libjingle開(kāi)源庫(kù)的文件傳輸原理,并描述了利用libjingle開(kāi)發(fā)文件傳輸客戶(hù)端的實(shí)現(xiàn)過(guò)程。libjingle文件傳輸采用具有TCP功能的UDP連接,即具有良好的可靠性,又能方便的通過(guò)NAT,實(shí)現(xiàn)真正的全網(wǎng)無(wú)障礙通信。但是,libjingle的文件傳輸協(xié)議并沒(méi)有成為一個(gè)成熟的標(biāo)準(zhǔn),其通用性還有待改善。

            [參考文獻(xiàn)]

            [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技術(shù)的研究與應(yīng)用[J] . 科學(xué)技術(shù)與工程,200776):1032-1035.

            [4] 張文茂等 . 互聯(lián)網(wǎng)即時(shí)消息(InstantMessag ing,IM)的研究現(xiàn)狀和展望[J . 小型微型計(jì)算機(jī)系統(tǒng),2007,(7):62-68.


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


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            色播久久人人爽人人爽人人片AV| 香蕉久久一区二区不卡无毒影院 | 精品无码久久久久久尤物| 怡红院日本一道日本久久| 热久久这里只有精品| 久久99精品久久久久久齐齐| 久久综合偷偷噜噜噜色| 成人国内精品久久久久影院| 国内精品久久久久国产盗摄| 国产成人综合久久精品红| 77777亚洲午夜久久多喷| 品成人欧美大片久久国产欧美...| 久久99亚洲综合精品首页| 中文字幕久久久久人妻| 91久久精品无码一区二区毛片| 久久久久免费精品国产| 精品人妻伦一二三区久久| 欧美va久久久噜噜噜久久| 久久99精品久久久久久野外| 久久久久亚洲AV片无码下载蜜桃 | 久久66热人妻偷产精品9| 伊人色综合久久| 久久91精品国产91久久麻豆| 色狠狠久久综合网| 国产精品日韩欧美久久综合| 久久精品夜夜夜夜夜久久| 精品伊人久久大线蕉色首页| 99久久精品费精品国产| 国产精品天天影视久久综合网| 国产一区二区久久久| 日韩一区二区三区视频久久| 国产一区二区精品久久岳| 久久成人精品视频| 久久精品国产清高在天天线| 日本精品久久久久影院日本 | 久久本道久久综合伊人| 99久久免费国产精精品| 久久精品国产亚洲麻豆| 久久线看观看精品香蕉国产| 2021精品国产综合久久| 久久亚洲国产精品一区二区|