王延軍,孫欣欣
(中國(guó)電子科技集團(tuán)公司第五十四研究所 河北 石家莊 050000)
隨著智能設(shè)備的持續(xù)發(fā)展,移動(dòng)終端被廣泛應(yīng)用到人們生活中。即時(shí)通信是指能夠?qū)ヂ?lián)網(wǎng)消息即時(shí)接收和發(fā)送的業(yè)務(wù),其功能使人們的通信方式有所改變。國(guó)內(nèi)外各平臺(tái)也有所研究,但不同平臺(tái)即時(shí)通信系統(tǒng)無法解決互聯(lián)互通問題。所以,對(duì)即時(shí)通信系統(tǒng)的設(shè)計(jì)研究尤為重要[1]。
系統(tǒng)體系結(jié)構(gòu)的構(gòu)成為:其一是服務(wù)器。對(duì)發(fā)送連接和其他實(shí)體會(huì)話進(jìn)行管理,轉(zhuǎn)發(fā)或者接收XML 流元素到授權(quán)服務(wù)器和客戶端中;其二是協(xié)議網(wǎng)關(guān)。實(shí)現(xiàn)XMPP 協(xié)議傳輸信息和外部消息系統(tǒng)對(duì)信息翻譯的識(shí)別;其三是客戶終端。連接服務(wù)器,利用XMPP 得到服務(wù)器或者任何服務(wù)的全部功能。XMPP 網(wǎng)絡(luò)能夠連接各個(gè)客戶端、服務(wù)器,圖1為客戶端連接架構(gòu)。
圖1 客戶端連接架構(gòu)
通過Android 設(shè)計(jì)客戶端,對(duì)通信過程進(jìn)行初始化,在實(shí)現(xiàn)即時(shí)通信的過程中,通過客戶端對(duì)服務(wù)器發(fā)送創(chuàng)建連接請(qǐng)求。系統(tǒng)利用GPRS 無線網(wǎng)絡(luò)創(chuàng)建連接,利用服務(wù)器和Android 客戶端實(shí)現(xiàn)即時(shí)通信。
服務(wù)器端使用Openfire 作為服務(wù)器,能夠使多個(gè)客戶端同時(shí)登錄并且發(fā)送到連接服務(wù)器中。服務(wù)器能夠?qū)崿F(xiàn)客戶端連接認(rèn)證,如果客戶端認(rèn)證通過,就會(huì)創(chuàng)建會(huì)話,通過此會(huì)話上下文實(shí)現(xiàn)客戶端和服務(wù)器端的通信[2]。
使用Java 語言實(shí)現(xiàn)Openfire 的開發(fā),基于XMPP 協(xié)議實(shí)現(xiàn)實(shí)時(shí)協(xié)作服務(wù)器的設(shè)計(jì),主要特點(diǎn)為跨平臺(tái),服務(wù)器能夠在多種操作系統(tǒng)平臺(tái)中假設(shè)。Openfire 使用XMPP協(xié)議,利用各種支持XMPP 協(xié)議的IM 客戶端軟件登錄服務(wù)。Openfire 服務(wù)器的主要特點(diǎn)是通過連接管理組件、會(huì)話、管理更新組件等構(gòu)成,能夠?qū)崿F(xiàn)插件機(jī)制,使擴(kuò)展更加的方便,利用安裝插件和其他通信軟件進(jìn)行通訊。在連接網(wǎng)絡(luò)的過程中,使用Apache 中的MINA 框架進(jìn)行連接,MINA框架使用高性能、非阻塞性的I/O 底層,使用異步I/O 事件與事件驅(qū)動(dòng)機(jī)制,提高服務(wù)器的性能和效率,對(duì)大量客戶端進(jìn)行處理[3]。
將Android 平臺(tái)作為基礎(chǔ)設(shè)計(jì)系統(tǒng)客戶端,將XMPP作為即時(shí)通信協(xié)議,XMPP 是將XML 為基礎(chǔ),對(duì)兩個(gè)任意網(wǎng)絡(luò)終端進(jìn)行信息通信。使用Android 平臺(tái)中的XML 解析包解析XML,因?yàn)閼?yīng)用活動(dòng)在主線程中運(yùn)行,所以使用多線程技術(shù)使系統(tǒng)通信問題得到解決。對(duì)于通信安全網(wǎng)問題,系統(tǒng)聊天信息和用戶信息通過客戶端在Android中存儲(chǔ),圖片文件和多媒體文件在Android 虛擬文件存儲(chǔ)設(shè)備中存儲(chǔ)[4]。
XMPP 屬于基于標(biāo)準(zhǔn)通用標(biāo)記語言的子集XML 協(xié)議,具有較強(qiáng)的可擴(kuò)展性。此協(xié)議主要包括客戶端和服務(wù)器,利用計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用層協(xié)議進(jìn)行工作。XMPP 服務(wù)器與客戶端利用socket 方式進(jìn)行通信,實(shí)現(xiàn)穩(wěn)定TCP 連接的創(chuàng)建。通過JID 地址標(biāo)識(shí)符實(shí)現(xiàn)不同節(jié)點(diǎn)通信的網(wǎng)絡(luò)尋址,滿足設(shè)定標(biāo)準(zhǔn)需求,主要包括節(jié)點(diǎn)名、域名、資源名。另外,不同客戶端和服務(wù)器能夠通過XML 流實(shí)現(xiàn)消息的傳遞。
通過XMPP 協(xié)議實(shí)現(xiàn)可靠通信的連接,利用服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)組織的管理和消息路由的轉(zhuǎn)發(fā)。在此方式使用過程中,能夠在添加功能時(shí)對(duì)服務(wù)器修改實(shí)現(xiàn)??蛻舳嗽谠O(shè)計(jì)過程中的原則為實(shí)現(xiàn)人機(jī)交互,向下封裝能夠通信接口進(jìn)行處理,客戶端功能模塊包括:
2.1.1 注冊(cè)模塊
注冊(cè)模塊能夠驗(yàn)證用戶登錄信息,針對(duì)客戶端,登錄功能能夠?qū)?chuàng)建連接請(qǐng)求發(fā)送到服務(wù)器端,將用戶名與密碼作為驗(yàn)證信息。通過服務(wù)器查詢數(shù)據(jù)庫中用戶列表,對(duì)用戶名與密碼進(jìn)行驗(yàn)證。假如匹配失敗,說明驗(yàn)證沒有通過。注冊(cè)功能為新用戶提供通信服務(wù)入口,根據(jù)用戶密碼和ID 登錄,注冊(cè)模塊結(jié)構(gòu)詳見圖2。
圖2 注冊(cè)模塊結(jié)構(gòu)
2.1.2 好友管理模塊
通過好友管理模塊得出聯(lián)系人名冊(cè)并且刪除、添加和創(chuàng)建群組,得到聯(lián)系人名冊(cè)和用戶在線狀態(tài)與好友列表。通過用戶添加好友或者刪除,基于對(duì)方用戶名提出請(qǐng)求,等待應(yīng)答。通過客戶端實(shí)現(xiàn)群組聊天,根據(jù)用戶的不同需求實(shí)現(xiàn)不同群組的創(chuàng)建,還能夠?qū)崿F(xiàn)群組的信息交互。
2.1.3 消息處理模塊
消息處理模塊針對(duì)客戶端能夠接收文本信息、發(fā)送。在不同用戶之間,文本信息能夠利用XML 流傳遞,消息處理模塊能夠轉(zhuǎn)變XML 消息和文本消息。用戶對(duì)好友列表的聯(lián)系人發(fā)送消息,如果對(duì)方在線發(fā)送成功;如果不在線,利用服務(wù)器對(duì)信息存儲(chǔ)。一個(gè)用戶能夠?qū)Χ鄠€(gè)聯(lián)系人通信,通過客戶端對(duì)多線程技術(shù)提供支持[5]。
2.1.4 文件傳輸模塊
在已經(jīng)注冊(cè)的用戶成功登錄之后,能夠?qū)β?lián)系人發(fā)送文件傳輸請(qǐng)求,此請(qǐng)求通過服務(wù)器在客戶端中轉(zhuǎn)發(fā),客戶端接收請(qǐng)求之后回應(yīng)。假如對(duì)方同意,就能夠傳輸文件;要不然就終止文件傳輸。如果一種方法失敗了,就會(huì)自動(dòng)選擇另外一個(gè)方法:
第一,點(diǎn)對(duì)點(diǎn)方法??蛻舳嗽趯?duì)文件進(jìn)行傳輸?shù)倪^程中,要?jiǎng)?chuàng)建P2P 連接。兩個(gè)用戶在同個(gè)網(wǎng)絡(luò)中P2P 連接比較快。但是,在一個(gè)用戶通過防火墻后,利用P2P 方式傳輸文件的時(shí)候就會(huì)失敗。
第二,代理服務(wù)器方式。假如P2P 連接失敗,客戶端就會(huì)尋找一個(gè)代理服務(wù)器傳輸文件。雖然代理服務(wù)器方式在文件傳輸?shù)倪^程中傳輸速度比較慢,但是有效。代理服務(wù)器方式有效,除非某用戶在嚴(yán)格防火墻后,代理服務(wù)能夠作為服務(wù)器外部組件進(jìn)行使用。
第三,帶內(nèi)文件傳輸。假如上述傳輸方法失敗,客戶端就使文件分割成為數(shù)據(jù)塊,作為編碼信息利用IM 服務(wù)器實(shí)現(xiàn)帶內(nèi)傳輸。不管網(wǎng)絡(luò)配置怎樣,此方法能夠傳輸文件,但是傳輸速度比較慢。
系統(tǒng)中的服務(wù)器端利用ServerSocket 類監(jiān)聽客戶端發(fā)送Socket 連接請(qǐng)求,要不然就處于等待的狀態(tài);如果有,進(jìn)行后續(xù)操作。通過Socket accept()函數(shù)全面監(jiān)聽網(wǎng)絡(luò)中客戶端的連接請(qǐng)求。
在結(jié)束Socket 通信后,通過close()函數(shù)關(guān)閉終端Socket 通信。服務(wù)器能夠監(jiān)聽客戶端的連接請(qǐng)求,如果存在多客戶端連接請(qǐng)求時(shí),要全部處理,通過PC 實(shí)現(xiàn)服務(wù)器端的實(shí)驗(yàn)程序運(yùn)行[6]。
因?yàn)榇蟛糠旨磿r(shí)通信系統(tǒng)是公開的,所以要求重視即時(shí)通信市場(chǎng)的安全性。大部分IM 系統(tǒng)在設(shè)計(jì)過程中都會(huì)對(duì)可擴(kuò)展性進(jìn)行考慮,但并沒有考慮安全問題。主要是大部分免費(fèi)在線即時(shí)信息系統(tǒng)都缺乏加密功能,具備傳統(tǒng)企業(yè)防火墻功能,提高網(wǎng)絡(luò)管理難度。
另外,系統(tǒng)中密碼管理并不安全,導(dǎo)致賬戶受到攻擊,還能夠受到拒絕服務(wù)攻擊。以此要求假如知道一個(gè)用戶即時(shí)通訊地址,就能夠直接將信息發(fā)送給對(duì)方,導(dǎo)致企業(yè)員工、政府工作人員可能對(duì)外界泄露數(shù)據(jù)。其實(shí)IM 自身特點(diǎn)會(huì)導(dǎo)致IM 系統(tǒng)迅速傳輸混合病毒和計(jì)算機(jī)蠕蟲。例如,IM 應(yīng)用比較廣泛,為病毒傳播提供了環(huán)境。IM 集成能夠?qū)π履繕?biāo)目錄進(jìn)行查找,滿足病毒集群傳播需求。IM 能夠被簡(jiǎn)單易變腳本進(jìn)行控制,大部分IM 系統(tǒng)能夠編寫腳本,使用戶編寫VB 系統(tǒng),對(duì)不同方式信息代理進(jìn)行控制。在為用戶提供方便時(shí),還為混合病毒與蠕蟲傳播提供途徑。
企業(yè)內(nèi)部即時(shí)通信是高質(zhì)量統(tǒng)一通信綜合戰(zhàn)略中重要的一部分。在系統(tǒng)設(shè)計(jì)過程中要充分考慮交流、傳輸?shù)陌踩用芊椒?。目前?jiǎn)單可行的方法就是實(shí)現(xiàn)傳輸信息的加密傳輸,使信息流通控制和管理得到加強(qiáng),本文系統(tǒng)使用BlowFish 算法實(shí)現(xiàn)加密。BlowFish 算法能夠?qū)?4 Bit 長(zhǎng)度字符串進(jìn)行加密。BlowFish 算法包絡(luò)BF_En 核心算法,此算法輸入64 位信息。在預(yù)算之后,根據(jù)64 位密文方式進(jìn)行輸出。算法加密過程為:
第一,密鑰預(yù)處理;
第二,信息加密:
使用sbox 對(duì)key_sbox 進(jìn)行填充;
用自己所選擇的key8 亦或pbpx,key 能夠循環(huán)使用;
使用BF_En 加密全0 的64 位信息;
替換key_sbox。
信息加密就是使用函數(shù)將待加密信息x 分為32 位的兩部分,密鑰預(yù)處理過程和加密相同,信息解密過程就是使信息加密過程中的key_sbox 進(jìn)行使用。
系統(tǒng)平臺(tái)創(chuàng)建Openfire 服務(wù)器端,客戶端APP 創(chuàng)建Android 操作系統(tǒng)收集,測(cè)試異構(gòu)軟件為Spark 軟件。
即時(shí)聊天功能的測(cè)試指的是用戶在手機(jī)客戶端的即時(shí)聊天功能,客戶端用戶聊天發(fā)送請(qǐng)求得到服務(wù)器端正確響應(yīng),并且能夠在對(duì)方手機(jī)中即時(shí)發(fā)送,此系統(tǒng)功能根據(jù)需求準(zhǔn)確實(shí)現(xiàn),圖3為聊天功能界面,功能實(shí)現(xiàn)代碼為:
圖3 聊天功能界面
通過此模塊能夠調(diào)用好友數(shù)據(jù),展示用戶好友列表,管理用戶好友。比如,對(duì)好友進(jìn)行查詢和添加,系統(tǒng)利用服務(wù)器精準(zhǔn)調(diào)用數(shù)據(jù),展示在好友界面中[7],實(shí)現(xiàn)代碼詳見:
通過此模塊對(duì)用戶定位進(jìn)行發(fā)送,利用百度地圖實(shí)現(xiàn)免費(fèi)地圖的發(fā)送,在請(qǐng)求發(fā)送后自動(dòng)生成地圖定位界面,得出精度和維度。根據(jù)測(cè)試結(jié)果表示,系統(tǒng)將用戶坐標(biāo)定位精準(zhǔn)地展現(xiàn)出來。
綜上所述,在本文設(shè)計(jì)過程中,將XMPP 協(xié)議作為基礎(chǔ)實(shí)現(xiàn)通信系統(tǒng)客戶端的設(shè)計(jì)。XMPP 能夠基于開源網(wǎng)絡(luò)實(shí)時(shí)通信協(xié)議具有較高的靈活性。和XMPP 技術(shù)結(jié)合將其作為消息傳輸?shù)妮d體,使客戶端功能得到實(shí)現(xiàn)。另外,還能夠和其他即時(shí)通信軟件連接。根據(jù)XMPP 網(wǎng)關(guān)轉(zhuǎn)變協(xié)議,實(shí)現(xiàn)跨應(yīng)用、跨平臺(tái)的信息傳輸。