国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于xmpp協(xié)議的即時消息傳輸方法

      文檔序號:7892591閱讀:252來源:國知局
      專利名稱:一種基于xmpp協(xié)議的即時消息傳輸方法
      技術(shù)領(lǐng)域
      本發(fā)明是基于企業(yè)即時消息技術(shù)在融合通信中的應(yīng)用,在網(wǎng)頁版的融合通信終端實現(xiàn)與企業(yè)即時通信系統(tǒng)之間連接的功能。
      背景技術(shù)
      信息技術(shù)發(fā)展到今天,人們希望方便快捷、無處不在地享用網(wǎng)絡(luò)信息技術(shù),通信與計算機技術(shù)的融合應(yīng)用是信息產(chǎn)業(yè)發(fā)展的趨勢,簡單的、安全的、費用低廉的,可以隨時隨地接入的融合通信,是人們的最高期望。技術(shù)的不斷成熟,使得即時消息系統(tǒng)越來越豐富,因而當(dāng)人們需要使用多個聊天工具時,就使得人們使用的方便性降低,而且對計算機資源的消耗也大大增加。此背景下, 開發(fā)人員就希望能將多種即時消息工具集成到一起,于是就誕生了多協(xié)議頂技木。例如, 國內(nèi)My頂,同時支持MSN、QQ等五種協(xié)議;國外的Miranda IM支持ICQ、AM、MSN等協(xié)議; 開源項目Open fire和Spark支持多操作系統(tǒng),可以通過插件方式對即時消息協(xié)議進(jìn)行擴充,而且Spark開源代碼中用戶界面部分和Openfire負(fù)責(zé)后臺協(xié)議解析進(jìn)行通信。一般地,目前支持多協(xié)議即時消息的軟件產(chǎn)品都是以客戶端軟件的方式提供給用戶,用戶在使用之前需要在個人的電腦上進(jìn)行安裝設(shè)置。企業(yè)級即時通信系統(tǒng)的出現(xiàn),在傳統(tǒng)的即時通信的靈活、快捷、方便等優(yōu)勢的基礎(chǔ)上,更重要的在安全性、可管理性、可追溯性、可擴展性等方面都得到了一定程度的保障。由于各大廠商都有自己的IM產(chǎn)品,出于各自利益的考慮,大部分都采用了自己私有的通信協(xié)議,這在一定程度上阻礙了使用不同即時通信系統(tǒng)的企業(yè)與企業(yè)之間的溝通交流,因此在企業(yè)級即時通信的產(chǎn)品中急需ー種使用開放式的即時通信協(xié)議的EM以實現(xiàn)不同工具之間的互通互聯(lián),使EM更加便利。UC (Unified Communication,融合通信),也常翻譯為統(tǒng)一通信。融合通信是指, 把計算機技術(shù)與傳統(tǒng)通信技術(shù)融合一體的新通信模式,融合計算機網(wǎng)絡(luò)與傳統(tǒng)通信網(wǎng)絡(luò)在一個網(wǎng)絡(luò)平臺上,實現(xiàn)電話、傳真、數(shù)據(jù)傳輸、音視頻會議、呼叫中心、即時通信等眾多應(yīng)用服務(wù)。融合通信將話音、視頻、短信、即時消息等多種應(yīng)用融合在一起,其手段也是豐富多彩的,可以體現(xiàn)在網(wǎng)絡(luò)的融合、終端的融合、應(yīng)用的融合等各個層面。以下介紹ー下本發(fā)明所涉及的幾種網(wǎng)絡(luò)技術(shù)
      I、XMPP 技術(shù)
      XMPP(Extensible Messaging and Presence Protocol,可擴展消息與出席協(xié)議)是一種基于可擴展標(biāo)記語言XML的開放式協(xié)議。ー個XML流相當(dāng)于ー個會話期間所有XML節(jié)的 ー個信封,客戶端或服務(wù)器發(fā)送的所有XML文本連綴在一起,從〈stream〉到〈/stream〉構(gòu)成了一個完整的XML文檔,其中的stream標(biāo)簽就是XML Stream。在〈stream〉與〈/stream〉 中間的那些<message>〈/message>這樣的XML元素就是XML Stanza (XML節(jié))。XMPP協(xié)議的核心協(xié)議通信的基本模式就是先建立ー個stream,通過TCP/IP連接到服務(wù)器,然后協(xié)商 TLS和SASL進(jìn)行身份驗證和安全協(xié)商,通信過程就是在網(wǎng)絡(luò)上分片斷發(fā)送XML Stanza, 一個接ー個。服務(wù)器根據(jù)客戶端發(fā)送的信息以及程序的邏輯,發(fā)送XML Stanza給客戶端。通信的最后階段是〈/stream〉關(guān)閉流,關(guān)閉TCP/IP連接。這個流協(xié)議是XMPP的即時通訊指令的傳遞手段,也是一個非常重要的可以被進(jìn)一步利用的網(wǎng)絡(luò)基礎(chǔ)協(xié)議。所以,XMPP就是在TCP連接上傳輸XML流。2、SOCKS 技術(shù)
      SOCKS代理工作在TCP/IP模型的線路層(即應(yīng)用層和傳輸層之間)。SOCKS 5技術(shù),其具體工作方案為客戶端首先和SOCKS 5代理服務(wù)器建立連接,然后客戶端所有的數(shù)據(jù)包都以TCP數(shù)據(jù)包的方式發(fā)送到代理服務(wù)器,然后代理服務(wù)器幫助轉(zhuǎn)發(fā)所有的請求。對于接收端來說,它認(rèn)為所有的請求都來自代理服務(wù)器,把代理服務(wù)器作為客戶進(jìn)行通信,代理服務(wù)器接收遠(yuǎn)端發(fā)送來的消息后,根據(jù)客戶列表把數(shù)據(jù)分發(fā)給不同的客戶。其工作流程為
      (O 客戶端向代理服務(wù)器建立TCP連接;
      (2)向代理服務(wù)器發(fā)送代理請求信息;
      (3)接收代理的應(yīng)答,根據(jù)相應(yīng)標(biāo)志判斷是否允許代理;
      (4)客戶端向代理發(fā)送協(xié)商請求信息及相關(guān)端口信息;
      (5)代理返回協(xié)商請求結(jié)果及代理端口等信息;
      (6)客戶端將數(shù)據(jù)發(fā)送到代理服務(wù)器并由其代理進(jìn)行數(shù)據(jù)傳送等操作。3、數(shù)據(jù)庫技術(shù)
      數(shù)據(jù)庫技術(shù)是該系統(tǒng)的一個核心技術(shù),是一種計算機輔助管理數(shù)據(jù)的方法,它研究如何組織和存儲數(shù)據(jù),如何高效地獲取和處理數(shù)據(jù)。通過對數(shù)據(jù)庫結(jié)構(gòu)、存儲、設(shè)計、管理以及應(yīng)用的基本理論和實現(xiàn)方法的研究,并利用這些理論來實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行處理、 分析和理解的技術(shù)。數(shù)據(jù)庫中常見的數(shù)據(jù)模型主要有層次模型,網(wǎng)狀模型和關(guān)系模型3種。MYSQL數(shù)據(jù)庫是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。4、套接字技術(shù)
      套接字,也稱之為〃socket",用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。Socket實質(zhì)上提供了進(jìn)程通信的端點,進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個端點,否則是沒有辦法建立聯(lián)系并相互通信的,正如打電話之前,雙方必須各自擁有一臺電話機一樣。在網(wǎng)間網(wǎng)內(nèi)部,每一個socket用一個半相關(guān)描述(協(xié)議,本地地址,本地端口),一個完整的socket有一個本地唯一的socket號,由操作系統(tǒng)分配。根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
      (I)服務(wù)器監(jiān)聽是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。(2)客戶端請求是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。(3)連接確認(rèn)是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。5、網(wǎng)關(guān)技術(shù)
      網(wǎng)關(guān),又稱網(wǎng)間連接器、協(xié)議轉(zhuǎn)換器。網(wǎng)關(guān)在傳輸層上以實現(xiàn)網(wǎng)絡(luò)互連,是最復(fù)雜的網(wǎng)絡(luò)互連設(shè)備,僅用于兩個高層協(xié)議不同的網(wǎng)絡(luò)互連。網(wǎng)關(guān)的結(jié)構(gòu)也和路由器類似,不同的是互連層。采用網(wǎng)關(guān)技術(shù),一方面滿足了不同用戶群之間相互交流的需要,另ー方面對于頂服務(wù)用戶來說,只需對外提供一個信息轉(zhuǎn)換的網(wǎng)關(guān)接入點,無需對原有協(xié)議作過多改變。XMPP網(wǎng)關(guān)的主要功能是把XMPP消息翻譯成使用非XMPP的頂?shù)耐ㄐ鸥袷?,同時把非XMPP的IM系統(tǒng)返回的數(shù)據(jù)翻譯回XMPP消息。非XMPP的IM有A頂、ICQ、MSN、QQ等。XMPP系統(tǒng)中網(wǎng)關(guān)是通過傳輸器組件(Transport)實現(xiàn)的。其工作原理為XMPP系統(tǒng)的客戶端發(fā)送消息給非XMPP系統(tǒng)的客戶端,首先指明ー個包含非XMPP系統(tǒng)名的JID,而不是直接發(fā)送給外部頂系統(tǒng)上的用戶。其次,XMPP服務(wù)器將數(shù)據(jù)發(fā)送到指定的傳輸器應(yīng)用程序,如果傳輸器是本地的,則XMPP服務(wù)器直接與其進(jìn)行通信;如果傳輸器不在本地運行, 本地服務(wù)器發(fā)送ー個包給遠(yuǎn)程服務(wù)器,該遠(yuǎn)程服務(wù)器將會把包發(fā)送給指定的傳輸器。一旦傳輸器接收到XML包,它把信息“轉(zhuǎn)變”成另ー個IM網(wǎng)絡(luò)中可以識別的本地包,并把這個本地包傳送到那個頂網(wǎng)絡(luò)中。

      發(fā)明內(nèi)容
      本發(fā)明所要解決的技術(shù)問題是針對使用不同即時通信系統(tǒng)的企業(yè)與企業(yè)之間的溝通交流的問題,基于XMPP協(xié)議及其擴展協(xié)議,設(shè)計ー種基于XMPP協(xié)議的即時消息傳輸技術(shù)的方法。本發(fā)明為解決上述技術(shù)問題,采用以下技術(shù)方案
      一種基于XMPP協(xié)議的即時消息傳輸方法,使用開源的Openfire作為服務(wù)器,以Spark 客戶端作為主要框架,以MySQL作為數(shù)據(jù)庫,采用XMPP技術(shù)、SOCKS技術(shù)、數(shù)據(jù)庫技術(shù),套接字技術(shù)和網(wǎng)關(guān)技術(shù),在Smack客戶端庫建立一個基于XMPP協(xié)議的客戶端,實現(xiàn)企業(yè)內(nèi)部以及企業(yè)外部的即時消息之間的數(shù)據(jù)傳輸;其中
      所述基于XMPP協(xié)議的客戶端進(jìn)行數(shù)據(jù)傳輸?shù)倪^程如下
      A、實現(xiàn)用戶注冊功能
      步驟Al :采用用戶注冊模塊初始化注冊界面;用戶在注冊界面中輸入用戶名、密碼、確認(rèn)密碼和服務(wù)器的IP,將上述信息發(fā)送至用戶注冊模塊;
      步驟A2 :用戶注冊模塊驗證用戶輸入信息是否有效;當(dāng)用戶輸入的數(shù)據(jù)無誤,則繼續(xù)下ー步驟;
      步驟A3 :讀取服務(wù)器主機名和端口號;客戶端通過協(xié)議解析模塊將用戶注冊信息轉(zhuǎn)換為XMPP請求數(shù)據(jù);
      步驟A4 :客戶端通過底層通信模塊與服務(wù)器建立連接,向服務(wù)器發(fā)送用戶注冊請求; 步驟A5 :通過底層通信模塊監(jiān)聽來自服務(wù)器的響應(yīng),客戶端啟動監(jiān)聽時延;
      步驟A6 :判斷在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到響應(yīng),進(jìn)ー步判定該響應(yīng)是否有誤;若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶注冊成功,結(jié)束用戶注冊操作;若響應(yīng)有誤,則客戶端界面顯示用戶注冊失敗,結(jié)束用戶注冊操作;
      B、實現(xiàn)用戶登錄功能
      步驟BI :啟動客戶端登陸界面后,采用用戶登錄模塊進(jìn)行初始化工作;
      步驟B2 :用戶在客戶端的用戶登錄界面輸入用戶名、密碼和服務(wù)器的IP,將上述信息發(fā)送至用戶登錄模塊;
      步驟B3 :用戶登錄模塊獲取輸入信息,然后讀取服務(wù)器的主機名和密碼;
      步驟B4 :通過客戶端后臺的協(xié)議解析模塊將登錄信息解析為XMPP數(shù)據(jù)請求包;
      步驟B5 :通過底層通信模塊與服務(wù)器建立連接,向服務(wù)器發(fā)送用戶登錄請求;
      步驟B6 :客戶端創(chuàng)建新的監(jiān)聽,并設(shè)立時延;
      步驟B7 :判斷在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到,進(jìn)一步判斷該響應(yīng)是否有誤,若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶登錄成功, 結(jié)束用戶登錄操作;若響應(yīng)有誤,則客戶端界面顯示用戶登錄失敗,結(jié)束用戶登錄操作;
      C、實現(xiàn)狀態(tài)訂閱功能
      步驟Cl :客戶端與服務(wù)器建立連接;
      步驟C2 :客戶端向服務(wù)器申請獲取好友名冊中好友名單;
      步驟C3 :服務(wù)器判斷好友名單中的第一個好友是否在線,若在線,則產(chǎn)生該好友上線的通知XML流發(fā)送給登錄用戶并告知該好友用戶登錄的狀態(tài),若不在線,繼續(xù)判斷第二個好友是否在線,依次類推,直至查詢完好友名單中的所有好友;
      D、實現(xiàn)好友名冊管理功能
      步驟Dl :客戶端與服務(wù)器建立連接;
      步驟D2 :客戶端向服務(wù)器提出查詢好友列表請求;
      步驟D3 :服務(wù)器響應(yīng)請求并以登錄用戶的JID為參數(shù)在好友列表查找其好友的JID,然后再根據(jù)查詢數(shù)據(jù)庫得到的好友信息結(jié)果中的好友JID,查詢他們的在線狀態(tài),然后將這些信息組合成XMPP協(xié)議的XML流返回給登錄用戶;
      步驟D4 :客戶端顯示好友列表;
      E、實現(xiàn)添加好友功能
      步驟El :客戶端前端向服務(wù)器發(fā)出添加好友的請求;
      步驟E2 :客戶端的協(xié)議解析模塊解析出要添加的好友的JID ;
      步驟E3 :客戶端在本地搜索要添加的好友是否存在,若存在,則返回前端提示該用戶已是好友,無需添加,結(jié)束操作;若不存在,則通過底層通信模塊向服務(wù)器請求,通過服務(wù)器的數(shù)據(jù)訪問模塊以JID為條件在數(shù)據(jù)庫中的用戶表中查找該好友;
      步驟E4 :若數(shù)據(jù)庫中的用戶表中存在該好友,則服務(wù)器端將結(jié)果返回給客戶端,并將所述JID插入到好友列表中,通過底層通信模塊,返回包含有該好友的信息的XML,提示添加好友成功,結(jié)束操作;
      步驟E5 :若數(shù)據(jù)庫中的用戶表中不存在該好友,則向客戶端返回添加失敗的XML流,提示不存在此用戶;
      F、實現(xiàn)刪除好友功能
      步驟Fl :客戶端前端向服務(wù)器發(fā)出刪除好友的請求;
      步驟F2 :服務(wù)器在收到客戶端發(fā)來的請求之后,通過協(xié)議解析模塊解析XML流,并獲取需要刪除的好友的JID;
      步驟F3 :服務(wù)器通過數(shù)據(jù)庫訪問模塊在數(shù)據(jù)庫的好友列表中查詢該用戶,并將其刪
      除;
      步驟F4 :若刪除成功,則向客戶端返回相應(yīng)的XML流,提示客戶端好友刪除成功,結(jié)束操作;
      步驟F5 :若刪除失敗,則向客戶端返回相應(yīng)的XML流,提示客戶端刪除失??;
      G、實現(xiàn)客戶端與服務(wù)器之間的會話功能
      步驟Gl :源客戶端通過底層通信功能模塊向第一 XMPP服務(wù)器發(fā)送建立會話的請求; 步驟G2 :第一 XMPP服務(wù)器在收到源客戶端的請求之后通過TLS,SASL進(jìn)行安全、身份驗證,若通過,則向源客戶端返回確認(rèn)建立連接的響應(yīng);
      步驟G3 :源客戶端通過協(xié)議解析功能模塊獲取客戶端界面的消息并將其封裝成XMPP 數(shù)據(jù)包,然后通過底層通信功能模塊向XMPP服務(wù)器發(fā)送會話內(nèi)容;
      步驟G4 第一 XMPP服務(wù)器通過協(xié)議解析模塊進(jìn)行XMPP數(shù)據(jù)包解析,獲取數(shù)據(jù)包中目的客戶端的JID,通過數(shù)據(jù)庫訪問模塊查詢數(shù)據(jù)庫;
      步驟G5 :若目的客戶端在本地服務(wù)器中,并且目的客戶端在線,則直接將數(shù)據(jù)包轉(zhuǎn)發(fā)給目的客戶端,結(jié)束會話并關(guān)閉連接;若目的客戶端不在線,則將XMPP數(shù)據(jù)包通過數(shù)據(jù)庫訪問模塊將XMPP數(shù)據(jù)包存入第一 XMPP服務(wù)器的數(shù)據(jù)庫,待目的客戶端上線后進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā);
      步驟G6 :若目的客戶端不在本地服務(wù)器中,則服務(wù)器向DNS服務(wù)器發(fā)送申請解析域名的請求;
      步驟G7 :采用DNS服務(wù)器搜索目的客戶端所在的第二 XMPP服務(wù)器,同時向第一 XMPP服務(wù)器返回解析后的域名;
      步驟G8 :第一 XMPP服務(wù)器通過TCP三次握手、TLS、SASL以及服務(wù)器回?fù)芄δ苓M(jìn)行安全、身份驗證,向第二 XMPP服務(wù)器發(fā)送連接請求;
      步驟G911 :第二 XMPP服務(wù)器通過底層通信模塊向第一 XMPP服務(wù)器發(fā)送請求響應(yīng),若目的客戶端在線狀態(tài),則建立二者之間的連接,轉(zhuǎn)向步驟GlO ;若目的客戶端不在線,則將 XMPP數(shù)據(jù)包存入第一 XMPP服務(wù)器的數(shù)據(jù)庫中,待目的客戶端上線后再將該信息轉(zhuǎn)發(fā);
      步驟GlO :第一 XMPP服務(wù)器向第二 XMPP服務(wù)器轉(zhuǎn)發(fā)由源客戶端發(fā)送的XMPP數(shù)據(jù)包; 步驟Gll :第二 XMPP服務(wù)器直接將XMPP數(shù)據(jù)包轉(zhuǎn)發(fā)到目的客戶端,結(jié)束會話并關(guān)閉連
      接;
      步驟G12 :源客戶端通過協(xié)議解析模塊獲取XMPP數(shù)據(jù)包之后,通過協(xié)議網(wǎng)關(guān),將數(shù)據(jù)包發(fā)送到非XMPP系統(tǒng)的服務(wù)器,再由非XMPP系統(tǒng)的服務(wù)器將數(shù)據(jù)包轉(zhuǎn)發(fā)到非XMPP系統(tǒng)的客戶端;
      H、實現(xiàn)文件傳輸功能
      步驟Hl :源客戶端向XMPP服務(wù)器發(fā)送向目的客戶端傳輸文件的請求;
      步驟H2 =XMPP服務(wù)器通過數(shù)據(jù)訪問模塊訪問數(shù)據(jù)庫判斷目的客戶端是否屬于本地服務(wù)器,若目的客戶端不屬于本地服務(wù)器,則將請求轉(zhuǎn)向代理服務(wù)器,轉(zhuǎn)向步驟H5 ;
      若目的客戶端屬于本地服務(wù)器,則判斷目的客戶端是否在線若在線,則向目的客戶端發(fā)送源客戶端文件傳輸?shù)恼埱螅蛟纯蛻舳朔祷啬康目蛻舳说腏ID,轉(zhuǎn)向步驟H3 ;若不在線,則將傳輸文件請求存放在服務(wù)器的緩沖區(qū),等目的客戶端在線時,直接從緩沖區(qū)提取文件并轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟H12 ;
      步驟H3 目的客戶端響應(yīng)XMPP服務(wù)器傳輸文件的請求,XMPP服務(wù)器將響應(yīng)發(fā)送給源客戶端;
      步驟H4 :源客戶端向XMPP服務(wù)器傳輸文件,XMPP服務(wù)器直接將文件轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟H12 ;
      步驟H5 目的客戶端為代理服務(wù)器打開一個TCP socket連接;
      步驟H6 :代理服務(wù)器通過SOCKS 5與目的客戶端建立連接,設(shè)定目標(biāo)地址和目標(biāo)端口參數(shù)的值;
      步驟H7 :代理服務(wù)器通過SOCKS 5發(fā)送連接成功并確認(rèn)至源的客戶端;
      步驟HS :源客戶端為代理服務(wù)器打開一個TCPsocket連接;
      步驟H9 :源客戶端通過SOCKS 5向代理服務(wù)器請求建立連接,設(shè)定目標(biāo)地址和目標(biāo)端口參數(shù)的值;
      步驟HlO :若成功建立連接,源客戶端通過SOCKS 5發(fā)送連接成功確認(rèn)至目的客戶端
      端;
      步驟Hll :源客戶端和目的客戶端通過SOCKS 5代理服務(wù)器,再由SOCKS 5服務(wù)器轉(zhuǎn)發(fā)給XMPP服務(wù)器可以成功實現(xiàn)文件的傳輸;
      步驟H12 :文件成功傳輸之后,關(guān)閉源客戶端和目的客戶端之間的連接;
      I、實現(xiàn)頂互相通信功能XMPP系統(tǒng)的客戶端發(fā)送消息給非XMPP系統(tǒng)的客戶端, 首先指明一個包含非XMPP系統(tǒng)名的JID ;
      其次,XMPP服務(wù)器將數(shù)據(jù)發(fā)送到指定的傳輸器應(yīng)用程序,如果傳輸器是本地的,則 XMPP服務(wù)器直接與其進(jìn)行通信;如果傳輸器不在本地運行,本地服務(wù)器發(fā)送一個包給遠(yuǎn)程服務(wù)器,該遠(yuǎn)程服務(wù)器將會把包發(fā)送給指定的傳輸器;
      一旦傳輸器接收到XML包,即把信息轉(zhuǎn)變成另一個IM網(wǎng)絡(luò)中可以識別的本地包,并把這個本地包傳送到那個頂網(wǎng)絡(luò)中。本發(fā)明采用以上技術(shù)方案具有以下技術(shù)效果
      采用本發(fā)明的方法不僅能夠很好的滿足用戶的基本需求、管理需求與功能性需求外, 而且達(dá)到較高的安全性,可擴展性,實現(xiàn)與其他即時通信系統(tǒng)的互聯(lián)互通。


      圖I:本發(fā)明的網(wǎng)絡(luò)架構(gòu)圖。
      圖2:本發(fā)明架構(gòu)的拓?fù)溥B接圖。
      圖3=XML流傳輸過程分層結(jié)構(gòu)示意圖。
      圖4:客戶端功能圖。
      圖5:用戶注冊登錄圖。
      圖6:用戶登錄流程圖。
      圖7:好友上線通知流程圖。
      圖8:獲取并顯示好友列表功能流程圖。
      圖9:添加好友流程圖。
      圖10:刪除好友流程圖。
      圖11:發(fā)送消息流程圖。
      圖12:接收消息流程圖。
      圖13:文件傳輸功能流程圖。
      圖14IM系統(tǒng)互相通信網(wǎng)絡(luò)圖。
      具體實施方式
      下面結(jié)合附圖對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)的說明
      圖I是本發(fā)明的網(wǎng)絡(luò)架構(gòu)圖,由其可知,本發(fā)明用的是基于XMPP協(xié)議的開源的 Openfire作為服務(wù)器并將其部署到Eclipse平臺里并成功運行,實現(xiàn)用戶的注冊以及數(shù)據(jù)庫的連接等功能。而客戶端是在Spark客戶端的基礎(chǔ)上,根據(jù)企業(yè)內(nèi)部通信的要求,開發(fā)出的符合企業(yè)要求的客戶端。圖2是本發(fā)明架構(gòu)的拓?fù)溥B接圖,由其可知,本發(fā)明采用Client—Sever架構(gòu)進(jìn)行實現(xiàn)的。在XMPP中定義了三個角色客戶端、服務(wù)器、網(wǎng)關(guān)。其中,客戶端通過TCP的方式使用XMPP訪問服務(wù)器,服務(wù)器也使用TCP的方式進(jìn)行通信。圖3是XML流傳輸過程分層結(jié)構(gòu)示意圖,由其可知,XML流在客戶端和服務(wù)器之間分層傳輸?shù)倪^程。圖4是基于XMPP協(xié)議的客戶端功能圖,由其可知,本系統(tǒng)客戶端需要設(shè)計實現(xiàn)的各個功能。圖5是客戶端用戶注冊流程圖,由其可知,用戶在客戶端界面注冊時,數(shù)據(jù)從客戶端到服務(wù)器以及從服務(wù)器到客戶端被處理的整個流程,負(fù)責(zé)新用戶的注冊處理。步驟01 :用戶注冊模塊初始化注冊界面;
      步驟02:用戶在注冊界面中輸入用戶名、密碼、確認(rèn)密碼和服務(wù)器的IP,點擊注冊按
      鈕;
      步驟03 :用戶注冊模塊監(jiān)聽來自鼠標(biāo)的請求,并從輸入框中獲取輸入信息同時進(jìn)行驗證イ目息是否有效;
      步驟04 :若用戶輸入的數(shù)據(jù)有誤,則提示用戶輸入有誤;如果用戶輸入的數(shù)據(jù)無誤,則繼續(xù)下ー步驟;
      步驟05 :讀取服務(wù)器主機名和端口號;
      步驟06 :客戶端通過協(xié)議解析模塊將用戶注冊信息轉(zhuǎn)換為XMPP請求數(shù)據(jù);
      步驟07 :客戶端通過底層通信模塊建立連接,向服務(wù)器發(fā)送用戶注冊請求;
      步驟08 :通過底層通信模塊監(jiān)聽來自服務(wù)器的響應(yīng),客戶端啟動監(jiān)聽時延;
      步驟09 :在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到,判定響應(yīng)是否有誤,若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶注冊成功,轉(zhuǎn)向步驟11 ; 步驟10 :若響應(yīng)有誤,則客戶端界面顯示用戶注冊失敗,轉(zhuǎn)向步驟11 ;
      步驟11:結(jié)束用戶注冊操作。圖6是客戶端用戶登錄流程圖,由其可知,用戶在客戶端登錄時,數(shù)據(jù)從客戶端到服務(wù)器以及從服務(wù)器到客戶端被處理的整個流程。登錄驗證服務(wù)是對試圖登錄的客戶端進(jìn)行權(quán)限驗證。
      步驟01 :啟動客戶端登陸界面后,用戶登錄模塊進(jìn)行初始化工作;
      步驟02:用戶在客戶端的用戶登錄界面輸入用戶名、密碼和服務(wù)器的IP,填寫完畢之后點擊登錄按鈕;
      步驟03 :用戶登錄模塊監(jiān)聽到鼠標(biāo)操作事件,從登錄界面的輸入框中獲取輸入信息, 然后讀取服務(wù)器的主機名和密碼;
      步驟04 :通過客戶端后臺的協(xié)議解析模塊將登錄信息解析為XMPP數(shù)據(jù)請求包;
      步驟05 :通過底層通信模塊建立連接,向服務(wù)器發(fā)送用戶登錄請求;
      步驟06 :客戶端創(chuàng)建新的監(jiān)聽,并設(shè)立時延;
      步驟07 :在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到,判定響應(yīng)是否有誤,若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶登錄成功,轉(zhuǎn)向步驟09 ; 步驟08 :若響應(yīng)有誤,則客戶端界面顯示用戶登錄失敗,轉(zhuǎn)向步驟09 ;
      步驟09:結(jié)束用戶登錄操作。狀態(tài)訂閱一個用戶可以訂閱其他好友的在線信息,一個訂閱本質(zhì)上是被訂閱者同意發(fā)送在線狀態(tài)改變給訂閱者。這個信息同時存儲在訂閱者和被訂閱者的名單中。當(dāng)用戶通過認(rèn)證并在服務(wù)器上創(chuàng)建一個會話時,用戶的在線信息被存放到服務(wù)器的好友列表管理器中。當(dāng)在線狀態(tài)改變時,〈Presence/〉包將被服務(wù)器處理,服務(wù)器在好友名單中進(jìn)行查詢,并將在線信息狀態(tài)包發(fā)送給所有訂閱用戶在線狀態(tài)的實體。在用戶成功登錄到XMPP服務(wù)器之后,默認(rèn)狀態(tài)顯示為在線。但是用戶可以根據(jù)自己的需要來改變自己的狀態(tài),并且立即通知好友列表中的每一個聯(lián)系人。此時只需客戶端向服務(wù)器發(fā)送改變狀態(tài)的通知,內(nèi)容可以為忙,暫時離開或者其它用戶想要顯示的信息。 這時服務(wù)器便會向該用戶的好友列表的成員發(fā)送載有相應(yīng)信息的XML流。圖7是客戶端好友上線通知流程圖,由其可知,好友上線狀態(tài)被處理后通過服務(wù)器在用戶端顯示的整個流程。當(dāng)用戶登錄到服務(wù)器端的時候,應(yīng)當(dāng)通知其所有的好友。在花名冊服務(wù)中服務(wù)器端己經(jīng)獲得了登錄用戶的好友列表,因此服務(wù)器端此時可以根據(jù)其好友列表產(chǎn)生相應(yīng)的通知并以XML流形式發(fā)送。以下為實現(xiàn)流程(客戶端已經(jīng)成功與服務(wù)器建立連接)
      步驟01 :客戶端向服務(wù)器好友名冊中申請獲取好友名單;
      步驟02 :服務(wù)器判斷好友是否在線,若在線,則產(chǎn)生好友上線的通知XML流發(fā)送給登錄用戶并告知各位好友用戶登錄的狀態(tài),轉(zhuǎn)向04 ;
      步驟03 :若不在線,則查詢好名名單的下一位好友,轉(zhuǎn)向02 ;
      步驟04 :結(jié)束該功能。圖8是客戶端獲取并顯示好友列表流程圖,由其可知,好友列表數(shù)據(jù)通過服務(wù)器處理并在用戶端顯示的整個流程。好友列表功能的實現(xiàn)是在用戶登錄到服務(wù)器上之后立即發(fā)生的服務(wù),該項功能的目的在于通過查詢得到自己的好友名冊列表,服務(wù)器以登錄用戶的JID為參數(shù)在好友列表查找其好友的JID。然后再根據(jù)查詢數(shù)據(jù)庫得到的好友信息結(jié)果中的好友JID,查詢他們的在線狀態(tài),然后將這些信息組合成XMPP協(xié)議的XML流返回給用戶,用戶將好友及其狀態(tài)列表在客戶端顯示出來。
      以下為好友列表獲取及顯示的流程(客戶端已經(jīng)成功與服務(wù)器建立連接)
      步驟01 :客戶端向服務(wù)器提出查詢好友列表請求;
      步驟02 :服務(wù)器響應(yīng)請求并將好友列表以XML流發(fā)送給登錄用戶;
      步驟03 :客戶端顯示好友列表;
      步驟04 :結(jié)束該功能。圖9是客戶端添加好友流程圖,由其可知,用戶在客戶端界面添加好友時,數(shù)據(jù)從客戶端到服務(wù)器以及從服務(wù)器到客戶端被處理的整個流程。添加好友功能是該系統(tǒng)的ー項非常重要的功能,用戶可以隨意地添加新的好友。以下為添加好友流程
      步驟01 :客戶端前端向服務(wù)器發(fā)出添加好友的請求;
      步驟02 :客戶端的協(xié)議解析模塊解析出要添加的好友的JID ;
      步驟03 :客戶端在本地捜索要添加的好友是否存在,若存在,則返回前端提示該用戶已是好友,無需添加,轉(zhuǎn)向步驟06;若不存在,則通過底層通信模塊向服務(wù)器請求,通過服務(wù)器的數(shù)據(jù)訪問模塊以JID為條件在數(shù)據(jù)庫中的用戶表中查找該好友;
      步驟04 :若數(shù)據(jù)庫中好友存在,則服務(wù)器端將結(jié)果返回給客戶端,并將JID插入到好友列表中,通過底層通信模塊,返回包含有該好友的信息的XML,提示添加好友成功,轉(zhuǎn)向步驟六;
      步驟05 :若數(shù)據(jù)庫中好友不存在,則向客戶端返回添加失敗的XML流,提示不存在此用
      戶;
      步驟06 :結(jié)束添加好友功能。圖10是客戶端刪除好友流程圖,由其可知,用戶在客戶端界面刪除好友時,數(shù)據(jù)從客戶端到服務(wù)器以及從服務(wù)器到客戶端被處理的整個流程。刪除好友也是該系統(tǒng)的ー項重要的功能,其作用是刪除好友列表的某一用戶。以下為刪除好友流程
      步驟01 :客戶端前端向服務(wù)器發(fā)出刪除好友的請求;
      步驟02 :服務(wù)器在收到客戶端發(fā)來的請求之后,通過協(xié)議解析模塊解析XML流,并獲取需要刪除的好友的JID;
      步驟03 :服務(wù)器通過數(shù)據(jù)庫訪問模塊在數(shù)據(jù)庫的好友列表中查詢該用戶,并將其刪
      除;
      步驟04 :若刪除成功,則向客戶端返回相應(yīng)的XML流,提示客戶端好友刪除成功,轉(zhuǎn)向步驟六;
      步驟05 :若刪除失敗,則向客戶端返回相應(yīng)的XML流,提示客戶端刪除失??;
      步驟06:刪除好友操作結(jié)束。會話功能客戶端為用戶提供了相互會話的功能,即相互發(fā)送即時消息,該功能是即時消息系統(tǒng)的最基本的功能。會話功能模塊將客戶端界面輸入的文字消息解析為XMPP 的〈message/〉消息節(jié)后,通過底層通信模塊將消息發(fā)送到服務(wù)器,同時持續(xù)監(jiān)聽來自服務(wù)器的〈message/〉消息節(jié),當(dāng)接收到〈message/〉消息節(jié)之后,將〈message/〉消息轉(zhuǎn)換為文字消息顯示到聊天室的界面中。本項目中的即時消息系統(tǒng)有三種會話方式第一種為連接在同一個XMPP服務(wù)器上的兩個用戶之間的會話;第二種為連接在不同XMPP服務(wù)器上的兩個用戶之間的會話;第三種為XMPP系統(tǒng)的用戶和非XMPP系統(tǒng)的用戶之間的會話,會話是在聊天室中進(jìn)行的。會話功能模塊中需要包括四個功能的實現(xiàn)用以滿足用戶的需求,即初始化聊天室、發(fā)送即時消息、接收即時消息和聊天室管理器。圖11是客戶端發(fā)送消息流程圖,由其可知,用戶在客戶端界面輸入消息并且發(fā)送時,數(shù)據(jù)從客戶端到服務(wù)器以及從服務(wù)器到客戶端被處理的整個流程。圖12是客戶端接收消息流程圖,由其可知,用戶在客戶端界面接收消息并且顯示時,數(shù)據(jù)從好友客戶端到服務(wù)器以及從服務(wù)器到用戶客戶端被處理的整個流程??蛻舳伺c服務(wù)器之間會話的步驟為
      步驟01 :源客戶端通過底層通信功能模塊向XMPP I服務(wù)器發(fā)送建立會話的請求; 步驟02 =XMPP服務(wù)器I在收到源客戶端的請求之后通過TLS,SASL進(jìn)行安全、身份驗證,若通過,則向源客戶端返回確認(rèn)建立連接的響應(yīng);
      步驟03 :源客戶端通過協(xié)議解析功能模塊獲取客戶端界面的消息并將其封裝成XMPP 數(shù)據(jù)包,然后通過底層通信功能模塊向XMPP服務(wù)器發(fā)送會話內(nèi)容;
      步驟04 =XMPP服務(wù)器I通過協(xié)議解析模塊進(jìn)行XMPP數(shù)據(jù)包解析,獲取數(shù)據(jù)包中目的客戶端的JID,通過數(shù)據(jù)庫訪問模塊查詢數(shù)據(jù)庫。步驟05 :若目的客戶端在本地服務(wù)器中,并且在線,則直接將數(shù)據(jù)包轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟十六;
      步驟06 :若目的客戶端不在線,則將XMPP數(shù)據(jù)包通過數(shù)據(jù)庫訪問模塊將XMPP數(shù)據(jù)包存入XMPP服務(wù)器I的數(shù)據(jù)庫,待目的客戶端上線后進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā);
      步驟07 :若目的客戶端不在本地服務(wù)器中,轉(zhuǎn)向步驟八和步驟十五;
      步驟08 :若目的客戶端不在本地服務(wù)器中,則服務(wù)器向DNS服務(wù)器發(fā)送申請解析域名的請求;
      步驟09 =DNS服務(wù)器搜索目的客戶端所在的XMPP服務(wù)器2是否存在,同時向XMPP服務(wù)器I返回解析后的域名;
      步驟10 =XMPP服務(wù)器I通過TCP三次握手、TLS、SASL以及服務(wù)器回?fù)芄δ苓M(jìn)行安全、 驗證向XMPP服務(wù)器2發(fā)送連接請求;
      步驟11 =XMPP服務(wù)器2通過底層通信模塊向XMPP服務(wù)器I發(fā)送請求響應(yīng),若目的客戶端在線狀態(tài),則建立二者之間的連接,轉(zhuǎn)向步驟十三;
      步驟12 :若目的客戶端不在線,則將XMPP數(shù)據(jù)包存入XMPP服務(wù)器I的數(shù)據(jù)庫中,待目的客戶端上線后再將該信息轉(zhuǎn)發(fā);
      步驟13 =XMPP服務(wù)器I向XMPP服務(wù)器2轉(zhuǎn)發(fā)由源客戶端發(fā)送的XMPP數(shù)據(jù)包;
      步驟14 =XMPP服務(wù)器2直接將XMPP數(shù)據(jù)包轉(zhuǎn)發(fā)到目的客戶端,轉(zhuǎn)向步驟十六;
      步驟15 :源客戶端通過協(xié)議解析模塊獲取XMPP數(shù)據(jù)包之后,通過協(xié)議網(wǎng)關(guān),將數(shù)據(jù)包發(fā)送到非XMPP系統(tǒng)的服務(wù)器,再由非XMPP系統(tǒng)的服務(wù)器將數(shù)據(jù)包轉(zhuǎn)發(fā)到非XMPP系統(tǒng)的客戶端;
      步驟16 :會話結(jié)束,關(guān)閉連接。圖13是客戶端文件傳輸流程圖,由其可知,用戶在客戶端界面?zhèn)鬏斘募?,文件從用戶客戶端到服?wù)器以及從服務(wù)器到好友客戶端被處理的整個流程。
      步驟01 :源客戶端向XMPP服務(wù)器發(fā)送向目的客戶端傳輸文件的請求;
      步驟02 =XMPP服務(wù)器通過數(shù)據(jù)訪問模塊訪問數(shù)據(jù)庫判斷目的客戶端是否屬于本地服務(wù)器,若是,則判斷目的客戶端是否在線,若在線,則向目的客戶端發(fā)送源客戶端文件傳輸?shù)恼埱?,井向源客戶端返回目的客戶端的JID,轉(zhuǎn)向步驟五;
      步驟03 :若不屬于本地服務(wù)器,則若不在,則將請求轉(zhuǎn)向代理服務(wù)器,轉(zhuǎn)向步驟七; 步驟04 :若不在線,則將傳輸文件請求存放在服務(wù)器的緩沖區(qū),等目的客戶端在線時, 直接從緩沖區(qū)提取文件并轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟十四;
      步驟05 目的客戶端響應(yīng)XMPP服務(wù)器傳輸文件的請求,XMPP服務(wù)器將響應(yīng)發(fā)送給源客戶端;
      步驟06 :源客戶端向XMPP服務(wù)器傳輸文件,XMPP服務(wù)器直接將文件轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟十四;
      步驟07 目的客戶端為代理服務(wù)器打開ー個TCP socket連接;
      步驟08 :代理服務(wù)器通過SOCKS 5與目的客戶端建立連接,設(shè)定目標(biāo)地址和目標(biāo)端ロ 參數(shù)的值;
      步驟09 :代理服務(wù)器通過SOCKS 5發(fā)送連接成功并確認(rèn)至源的客戶端;
      步驟10 :源客戶端為代理服務(wù)器打開ー個TCPsocket連接;
      步驟11 :源客戶端通過SOCKS 5向代理服務(wù)器請求建立連接,設(shè)定目標(biāo)地址和目標(biāo)端 ロ參數(shù)的值;
      步驟12 :若成功建立連接,源客戶端通過SOCKS 5發(fā)送連接成功確認(rèn)至目的客戶端
      端;
      步驟13 :源客戶端和目的客戶端通過SOCKS 5代理服務(wù)器,再由SOCKS 5服務(wù)器轉(zhuǎn)發(fā)給XMPP服務(wù)器可以成功實現(xiàn)文件的傳輸;
      步驟14 :文件成功傳輸之后,關(guān)閉源客戶端和目的客戶端之間的連接。圖14是頂系統(tǒng)互相通信圖,由其可知,XMPP系統(tǒng)與非XMPP系統(tǒng)之間數(shù)據(jù)通信。XMPP系統(tǒng)的客戶端發(fā)送消息給非XMPP系統(tǒng)的客戶端,首先指明ー個包含非XMPP 系統(tǒng)名的JID,而不是直接發(fā)送給外部頂系統(tǒng)上的用戶。其次,XMPP服務(wù)器將數(shù)據(jù)發(fā)送到指定的傳輸器應(yīng)用程序,如果傳輸器是本地的,則XMPP服務(wù)器直接與其進(jìn)行通信;如果傳輸器不在本地運行,本地服務(wù)器發(fā)送ー個包給遠(yuǎn)程服務(wù)器,該遠(yuǎn)程服務(wù)器將會把包發(fā)送給指定的傳輸器。一旦傳輸器接收到XML包,它把信息“轉(zhuǎn)變”成另ー個IM網(wǎng)絡(luò)中可以識別的本地包,并把這個本地包傳送到那個頂網(wǎng)絡(luò)中。本發(fā)明公開了ー種基于XMPP協(xié)議的即時消息傳輸方法,使用開源的Openfire作為服務(wù)器,以Spark作為客戶端的主要框架,采用Java語言,Smack客戶端庫編寫ー個基于 XMPP協(xié)議的客戶端,以Xampp軟件中的MySQL作為數(shù)據(jù)庫,采用XMPP技術(shù)、SOCKS技術(shù)、數(shù)據(jù)庫技術(shù)和套接字技術(shù),成功實現(xiàn)企業(yè)內(nèi)部以及企業(yè)外部的即時消息之間的數(shù)據(jù)傳輸。本發(fā)明不僅能很好的滿足用戶的基本需求、管理需求與功能性需求外,還能達(dá)到較高的安全性,可擴展性,實現(xiàn)與其他即時通信系統(tǒng)的互聯(lián)互通。在實現(xiàn)企業(yè)內(nèi)部的功能時,采用不改變原有服務(wù)器和客戶端基礎(chǔ)架構(gòu)的條件下, 利用插件的方式成功實現(xiàn)功能的擴展。通過利用網(wǎng)關(guān)來成功實現(xiàn)企業(yè)內(nèi)部服務(wù)器與其它頂服務(wù)器之間的數(shù)據(jù)通信。
      綜上所述,本發(fā)明內(nèi)容主要包括以下三方面
      I.采用Java程序設(shè)計語言,完成本系統(tǒng)中客戶端在Eclipse平臺中的設(shè)計與實現(xiàn)??蛻舳酥饕歉鶕?jù)企業(yè)自身特點,向用戶提供實時信息交換。其開發(fā)包括前端界面的設(shè)計和實現(xiàn)和后端數(shù)據(jù)平臺功能模塊的設(shè)計與實現(xiàn),而功能主要包括用戶的注冊、用戶登錄功能、好友列表管理(包括狀態(tài)的顯示和更改、添加用戶、刪除用戶和搜索好友)、個人名片管理、會話功能、文件傳輸功能和與其他IM通信功能等。2.完成本系統(tǒng)中服務(wù)器在Eclipse中的成功部署和運行。實現(xiàn)本系統(tǒng)中服務(wù)器和客戶端之間以及客戶端之間的互相通信。包括客戶端和服務(wù)器之間的連接,數(shù)據(jù)的通信,用戶的添加、存儲、查詢、更新和刪除,用戶狀態(tài)的設(shè)置,好友狀態(tài)的獲取,注銷等功能。3.完成本系統(tǒng)中的服務(wù)器向其他各種IM服務(wù)器(例如微軟的MSN服務(wù)器,Google 的Gtalk服務(wù)器等)的連接,用戶狀態(tài)設(shè)置,好友狀態(tài)獲取,數(shù)據(jù)通信,注銷等功能。本發(fā)明的目標(biāo)是實現(xiàn)在企業(yè)內(nèi)部web客戶端之間以及本服務(wù)器與其它頂服務(wù)器之間的信息交互。首先在客戶端的個人信息中注冊用戶的號碼,并進(jìn)行驗證,然后實現(xiàn)用戶登錄。用戶的狀態(tài)分為在線、忙碌、離開,當(dāng)用戶狀態(tài)發(fā)生變化時,客戶端能成功顯示。其次,企業(yè)內(nèi)部服務(wù)器與客戶端之間,客戶端與客戶端之間實現(xiàn)信息交互;
      再次,在企業(yè)內(nèi)部的客戶端登錄頁面輸入其他IM系統(tǒng)的用戶帳號,驗證成功后登錄到其他頂服務(wù)器并與之進(jìn)行信息交互。
      權(quán)利要求
      1. 一種基于XMPP協(xié)議的即時消息傳輸方法,其特征在于使用開源的Openfire作為服務(wù)器,以Spark客戶端作為主要框架,以MySQL作為數(shù)據(jù)庫,采用XMPP技術(shù)、SOCKS技術(shù)、 數(shù)據(jù)庫技術(shù),套接字技術(shù)和網(wǎng)關(guān)技術(shù),在Smack客戶端庫建立一個基于XMPP協(xié)議的客戶端, 實現(xiàn)企業(yè)內(nèi)部以及企業(yè)外部的即時消息之間的數(shù)據(jù)傳輸;其中所述基于XMPP協(xié)議的客戶端進(jìn)行數(shù)據(jù)傳輸?shù)倪^程如下A、實現(xiàn)用戶注冊功能步驟Al :采用用戶注冊模塊初始化注冊界面;用戶在注冊界面中輸入用戶名、密碼、確認(rèn)密碼和服務(wù)器的IP,將上述信息發(fā)送至用戶注冊模塊;步驟A2 :用戶注冊模塊驗證用戶輸入信息是否有效;當(dāng)用戶輸入的數(shù)據(jù)無誤,則繼續(xù)下一步驟;步驟A3 :讀取服務(wù)器主機名和端口號;客戶端通過協(xié)議解析模塊將用戶注冊信息轉(zhuǎn)換為XMPP請求數(shù)據(jù);步驟A4 :客戶端通過底層通信模塊與服務(wù)器建立連接,向服務(wù)器發(fā)送用戶注冊請求; 步驟A5 :通過底層通信模塊監(jiān)聽來自服務(wù)器的響應(yīng),客戶端啟動監(jiān)聽時延;步驟A6 :判斷在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到響應(yīng),進(jìn)一步判定該響應(yīng)是否有誤;若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶注冊成功,結(jié)束用戶注冊操作;若響應(yīng)有誤,則客戶端界面顯示用戶注冊失敗,結(jié)束用戶注冊操作;B、實現(xiàn)用戶登錄功能步驟BI :啟動客戶端登陸界面后,采用用戶登錄模塊進(jìn)行初始化工作;步驟B2 :用戶在客戶端的用戶登錄界面輸入用戶名、密碼和服務(wù)器的IP,將上述信息發(fā)送至用戶登錄模塊;步驟B3 :用戶登錄模塊獲取輸入信息,然后讀取服務(wù)器的主機名和密碼;步驟B4 :通過客戶端后臺的協(xié)議解析模塊將登錄信息解析為XMPP數(shù)據(jù)請求包;步驟B5 :通過底層通信模塊與服務(wù)器建立連接,向服務(wù)器發(fā)送用戶登錄請求;步驟B6 :客戶端創(chuàng)建新的監(jiān)聽,并設(shè)立時延;步驟B7 :判斷在時延內(nèi)客戶端是否收到來自服務(wù)器的響應(yīng),若收到,進(jìn)一步判斷該響應(yīng)是否有誤,若沒有錯誤,則協(xié)議解析模塊處理響應(yīng),并在客戶端界面顯示用戶登錄成功, 結(jié)束用戶登錄操作;若響應(yīng)有誤,則客戶端界面顯示用戶登錄失敗,結(jié)束用戶登錄操作;C、實現(xiàn)狀態(tài)訂閱功能步驟Cl :客戶端與服務(wù)器建立連接;步驟C2 :客戶端向服務(wù)器申請獲取好友名冊中好友名單;步驟C3 :服務(wù)器判斷好友名單中的第一個好友是否在線,若在線,則產(chǎn)生該好友上線的通知XML流發(fā)送給登錄用戶并告知該好友用戶登錄的狀態(tài),若不在線,繼續(xù)判斷第二個好友是否在線,依次類推,直至查詢完好友名單中的所有好友;D、實現(xiàn)好友名冊管理功能步驟Dl :客戶端與服務(wù)器建立連接;步驟D2 :客戶端向服務(wù)器提出查詢好友列表請求;步驟D3 :服務(wù)器響應(yīng)請求并以登錄用戶的JID為參數(shù)在好友列表查找其好友的JID,然后再根據(jù)查詢數(shù)據(jù)庫得到的好友信息結(jié)果中的好友JID,查詢他們的在線狀態(tài),然后將這些信息組合成XMPP協(xié)議的XML流返回給登錄用戶;步驟D4 :客戶端顯示好友列表;E、實現(xiàn)添加好友功能步驟El :客戶端前端向服務(wù)器發(fā)出添加好友的請求;步驟E2 :客戶端的協(xié)議解析模塊解析出要添加的好友的JID ;步驟E3 :客戶端在本地搜索要添加的好友是否存在,若存在,則返回前端提示該用戶已是好友,無需添加,結(jié)束操作;若不存在,則通過底層通信模塊向服務(wù)器請求,通過服務(wù)器的數(shù)據(jù)訪問模塊以JID為條件在數(shù)據(jù)庫中的用戶表中查找該好友;步驟E4 :若數(shù)據(jù)庫中的用戶表中存在該好友,則服務(wù)器端將結(jié)果返回給客戶端,并將所述JID插入到好友列表中,通過底層通信模塊,返回包含有該好友的信息的XML,提示添加好友成功,結(jié)束操作;步驟E5:若數(shù)據(jù)庫中的用戶表中不存在該好友,則向客戶端返回添加失敗的XML流,提示不存在此用戶;F、實現(xiàn)刪除好友功能步驟Fl :客戶端前端向服務(wù)器發(fā)出刪除好友的請求;步驟F2 :服務(wù)器在收到客戶端發(fā)來的請求之后,通過協(xié)議解析模塊解析XML流,并獲取需要刪除的好友的JID;步驟F3 :服務(wù)器通過數(shù)據(jù)庫訪問模塊在數(shù)據(jù)庫的好友列表中查詢該用戶,并將其刪除;步驟F4 :若刪除成功,則向客戶端返回相應(yīng)的XML流,提示客戶端好友刪除成功,結(jié)束操作;步驟F5 :若刪除失敗,則向客戶端返回相應(yīng)的XML流,提示客戶端刪除失??;G、實現(xiàn)客戶端與服務(wù)器之間的會話功能步驟Gl :源客戶端通過底層通信功能模塊向第一 XMPP服務(wù)器發(fā)送建立會話的請求; 步驟G2 :第一 XMPP服務(wù)器在收到源客戶端的請求之后通過TLS,SASL進(jìn)行安全、身份驗證,若通過,則向源客戶端返回確認(rèn)建立連接的響應(yīng);步驟G3 :源客戶端通過協(xié)議解析功能模塊獲取客戶端界面的消息并將其封裝成XMPP 數(shù)據(jù)包,然后通過底層通信功能模塊向XMPP服務(wù)器發(fā)送會話內(nèi)容;步驟G4 :第一 XMPP服務(wù)器通過協(xié)議解析模塊進(jìn)行XMPP數(shù)據(jù)包解析,獲取數(shù)據(jù)包中目的客戶端的JID,通過數(shù)據(jù)庫訪問模塊查詢數(shù)據(jù)庫;步驟G5 :若目的客戶端在本地服務(wù)器中,并且目的客戶端在線,則直接將數(shù)據(jù)包轉(zhuǎn)發(fā)給目的客戶端,結(jié)束會話并關(guān)閉連接;若目的客戶端不在線,則將XMPP數(shù)據(jù)包通過數(shù)據(jù)庫訪問模塊將XMPP數(shù)據(jù)包存入第一 XMPP服務(wù)器的數(shù)據(jù)庫,待目的客戶端上線后進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā);步驟G6 :若目的客戶端不在本地服務(wù)器中,則服務(wù)器向DNS服務(wù)器發(fā)送申請解析域名的請求;步驟G7 :采用DNS服務(wù)器搜索目的客戶端所在的第二 XMPP服務(wù)器,同時向第一 XMPP服務(wù)器返回解析后的域名;步驟G8 :第一 XMPP服務(wù)器通過TCP三次握手、TLS、SASL以及服務(wù)器回?fù)芄δ苓M(jìn)行安全、身份驗證,向第二 XMPP服務(wù)器發(fā)送連接請求;步驟G911 :第二 XMPP服務(wù)器通過底層通信模塊向第一 XMPP服務(wù)器發(fā)送請求響應(yīng),若目的客戶端在線狀態(tài),則建立二者之間的連接,轉(zhuǎn)向步驟GlO ;若目的客戶端不在線,則將 XMPP數(shù)據(jù)包存入第一 XMPP服務(wù)器的數(shù)據(jù)庫中,待目的客戶端上線后再將該信息轉(zhuǎn)發(fā);步驟GlO :第一 XMPP服務(wù)器向第二 XMPP服務(wù)器轉(zhuǎn)發(fā)由源客戶端發(fā)送的XMPP數(shù)據(jù)包; 步驟Gll :第二 XMPP服務(wù)器直接將XMPP數(shù)據(jù)包轉(zhuǎn)發(fā)到目的客戶端,結(jié)束會話并關(guān)閉連接;步驟G12 :源客戶端通過協(xié)議解析模塊獲取XMPP數(shù)據(jù)包之后,通過協(xié)議網(wǎng)關(guān),將數(shù)據(jù)包發(fā)送到非XMPP系統(tǒng)的服務(wù)器,再由非XMPP系統(tǒng)的服務(wù)器將數(shù)據(jù)包轉(zhuǎn)發(fā)到非XMPP系統(tǒng)的客戶端;H、實現(xiàn)文件傳輸功能步驟Hl :源客戶端向XMPP服務(wù)器發(fā)送向目的客戶端傳輸文件的請求;步驟H2 =XMPP服務(wù)器通過數(shù)據(jù)訪問模塊訪問數(shù)據(jù)庫判斷目的客戶端是否屬于本地服務(wù)器,若目的客戶端不屬于本地服務(wù)器,則將請求轉(zhuǎn)向代理服務(wù)器,轉(zhuǎn)向步驟H5 ;若目的客戶端屬于本地服務(wù)器,則判斷目的客戶端是否在線若在線,則向目的客戶端發(fā)送源客戶端文件傳輸?shù)恼埱?,并向源客戶端返回目的客戶端的JID,轉(zhuǎn)向步驟H3 ;若不在線,則將傳輸文件請求存放在服務(wù)器的緩沖區(qū),等目的客戶端在線時,直接從緩沖區(qū)提取文件并轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟H12 ;步驟H3 目的客戶端響應(yīng)XMPP服務(wù)器傳輸文件的請求,XMPP服務(wù)器將響應(yīng)發(fā)送給源客戶端;步驟H4 :源客戶端向XMPP服務(wù)器傳輸文件,XMPP服務(wù)器直接將文件轉(zhuǎn)發(fā)給目的客戶端,轉(zhuǎn)向步驟H12 ;步驟H5 目的客戶端為代理服務(wù)器打開一個TCP socket連接;步驟H6 :代理服務(wù)器通過SOCKS 5與目的客戶端建立連接,設(shè)定目標(biāo)地址和目標(biāo)端口參數(shù)的值;步驟H7 :代理服務(wù)器通過SOCKS 5發(fā)送連接成功并確認(rèn)至源的客戶端;步驟HS :源客戶端為代理服務(wù)器打開一個TCPsocket連接;步驟H9 :源客戶端通過SOCKS 5向代理服務(wù)器請求建立連接,設(shè)定目標(biāo)地址和目標(biāo)端口參數(shù)的值;步驟HlO :若成功建立連接,源客戶端通過SOCKS 5發(fā)送連接成功確認(rèn)至目的客戶端端;步驟Hll :源客戶端和目的客戶端通過SOCKS 5代理服務(wù)器,再由SOCKS 5服務(wù)器轉(zhuǎn)發(fā)給XMPP服務(wù)器可以成功實現(xiàn)文件的傳輸;步驟H12 :文件成功傳輸之后,關(guān)閉源客戶端和目的客戶端之間的連接;I、實現(xiàn)頂互相通信功能XMPP系統(tǒng)的客戶端發(fā)送消息給非XMPP系統(tǒng)的客戶端, 首先指明一個包含非XMPP系統(tǒng)名的JID ;其次,XMPP服務(wù)器將數(shù)據(jù)發(fā)送到指定的傳輸器應(yīng)用程序,如果傳輸器是本地的,則 XMPP服務(wù)器直接與其進(jìn)行通信;如果傳輸器不在本地運行,本地服務(wù)器發(fā)送一個包給遠(yuǎn)程服務(wù)器,該遠(yuǎn)程服務(wù)器將會把包發(fā)送給指定的傳輸器;一旦傳輸器接收到XML包,即把信息轉(zhuǎn)變成另一個IM網(wǎng)絡(luò)中可以識別的本地包,并把這個本地包傳送到那個頂網(wǎng)絡(luò)中。
      全文摘要
      本發(fā)明公開了一種基于XMPP協(xié)議的即時消息傳輸方法,使用開源的Openfire作為服務(wù)器,以Spark客戶端作為主要客戶端框架,采用Java語言在Smack客戶端庫編寫一個基于XMPP協(xié)議的客戶端,以Xampp軟件中的MySQL作為數(shù)據(jù)庫,采用XMPP技術(shù)、SOCKS技術(shù)、數(shù)據(jù)庫技術(shù)和套接字技術(shù),成功實現(xiàn)企業(yè)內(nèi)部以及企業(yè)外部的即時消息之間的數(shù)據(jù)傳輸。本發(fā)明不僅能很好的滿足用戶的基本需求、管理需求與功能性需求外,還能達(dá)到較高的安全性,可擴展性,實現(xiàn)與其他即時通信系統(tǒng)的互聯(lián)互通。
      文檔編號H04L29/06GK102594845SQ20121008719
      公開日2012年7月18日 申請日期2012年3月29日 優(yōu)先權(quán)日2012年3月29日
      發(fā)明者孫慶慶, 張書強, 張毅峰, 朱光輝, 楊洋, 沈彥真, 王開, 王曉姝, 第偉, 繆瑞華, 裴文江, 詹金獅 申請人:東南大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1