一種Jingle開源庫的檔案傳輸原理與實現

2021-09-23 00:17:46 字數 2645 閱讀 5503

隨著即時通訊(im)軟體已經成為網際網路資訊平台的重要組成部分

[4] 。但基於自身利益的考慮,各個im軟體均制定並保守自己支援的通訊協議格式和標準,導致了各個通訊軟體不能互聯互通,客觀上制約了im的發展。

xmpp

協議標準解決了不同即時通訊平台資訊互通的難題。基於xmpp擴充套件p2p協議的應用開源庫libjingle庫可以開發第三方im軟體,最終實現第三方im與支援xmpp協議的即時通訊軟體的文字和語音等的互操作。

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

libjingle

檔案傳輸通訊原理

libjingle介紹

libjingle

是google公司推出的基於語音和p2p通訊的c++開源庫。利用libjingle開源庫能夠開發出第三方的jingle點到點通訊應用程式,實現與所有支援xmpp以及jingle擴充套件協議的軟體實現通訊。

libjingle

通訊系統構架

libjingle

libjingle

的連線包括2種通道(如圖1)[1,2]。一是會話協商通道,或者稱為xmpp信令

通道,此為帶內通道。會話協商

通道協商信令必須通過中間jingle server。二是帶外通道也即資料

通道。通過資料傳輸

通道對於資料傳輸通道,在libjingle中,根據有無防火牆或者nat裝置,有3種不同資料傳輸路徑(如圖1)[1,2]。在有防火牆或者nat裝置的情況下,包括通訊雙方的直接連線通訊和通過中繼伺服器**連線通訊。

libjingle

乙個最重要的能力就是能夠穿透防火牆或者nat裝置來協商連線。其使用ice(

)技術來實現穿透防火牆。

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

libjingle

檔案傳輸協議格式

libjingle

① 會話數(conversation number):32位,記錄所有的會話數。

② 序列碼(sequence number):32位,用來表示從傳送端到接收端位元組流數。

③ 確認碼序號(acknowledgment number):32位,如果設定了ack控制位為1,確認碼序號這個值表示乙個準備接收的下乙個包的序列碼。

⑤ 控制位(

control

⑥ 視窗(

window

):16位;接收端告訴傳送端,其要求收到的tcp資料段大小。

⑦ 傳送時間戳(timestamp sending):32位,表示傳送資料報時間。

⑧ 接收時間戳(timestamp receiving):32位,表示接收到資料報時間。

libjingle

檔案傳輸的實現

通過libjingle提供的c++源**庫,能夠開發出自己的jingle server和jingle client。

libjingle

檔案傳輸類

libjingle

),主要作用是管理本地與遠端計算機的連線。 在

報文傳輸單元中,xmpppump是頂層管理類。xmppclient是應用程式與網路傳輸xmpp訊號的出口與入口點。xmpptask以及其派生類作為非同步的xmpp任務類,能夠扮演xmpp信令的發起者、偵聽者或者兩者兼有的角色。

會話邏輯和會話管理單元

的主要類包括session、transpor、pseudotcpchannel、transportchannel、sessionmanager、httpportallocator等。session類主要作用包括在xmpp隧道上協商檔案資料傳輸隧道,以及監測、建立、斷開資料傳輸連線。

libjingle

檔案傳輸具體流程

① 客戶端應用程式啟動,登入xmpp伺服器。首先初始化ssl,保證資料傳輸安全,然後建立乙個信令執行緒。從使用者那裡得到使用者資訊比如登入名、密碼等資訊初始化xmppclientsettings物件,建立乙個xmpp任務管理物件xmpppump,由xmpppump建立xmppclient物件和控制登入伺服器。

pseudotcpchannel

物件控制連線,然後建立和傳送乙個在本地訪問檔案的流介面點。使用資料流的形式讀檔案,檔案資料流的傳送通過pseudotcpchannel物件。檔案資料流最終通過transportchannel傳送出並通過網路到達接收方。在接收方,transportchannel物件接收檔案資料流資訊,並把資料流轉換成streaminte***ce流,最終通過pseudotcpchannel

streaminte***ce流反饋給httpclient物件,由httpclient物件把資料以檔案的形式儲存在儲存器上。

結束語本文分析了libjingle開源庫的檔案傳輸原理,並描述了利用libjingle開發檔案傳輸客戶端的實現過程。libjingle檔案傳輸採用具有tcp功能的udp連線,即具有良好的可靠性,又能方便的通過nat,實現真正的全網無障礙通訊。但是,libjingle的檔案傳輸協議並沒有成為乙個成熟的標準,其通用性還有待改善。

一種Jingle開源庫的檔案傳輸原理與實現

0引言 隨著即時通訊 im 軟體已經成為網際網路資訊平台的重要組成部分 4 但基於自身利益的考慮,各個im軟體均制定並保守自己支援的通訊協議格式和標準,導致了各個通訊軟體不能互聯互通,客觀上制約了im的發展。xmpp 協議標準解決了不同即時通訊平台資訊互通的難題。基於xmpp擴充套件p2p協議的應用...

這也是一種傳檔案的方式呀

建立學生表,學號 姓名 年齡和性別四個字段 create table student stuid varchar 5 primary key,stuname varchar 10 not null,stuage int,stu char 1 not null charset utf8 建立教師表,教...

Godtear,分享是一種境界,開源是一種信仰

轉眼間,接觸.net技術已經6年了。作為乙個非科班的軟體工程師,自學之路離不開那許許多多在技術社群中熱衷於分享和幫助的人,我敬重他們。一直以來,都想參與技術的分享和交流之其中,卻因為自身的淺薄而無勇氣,今天特別在寫下第一段文字,希望給自己和大家拋磚引玉。同步,我在codeplex 建立了乙個開源工程...