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