基于局域網(wǎng)的手機(jī)即時(shí)通訊聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
引 言
隨著手機(jī)終端的普及和互聯(lián)網(wǎng)的發(fā)展,即時(shí)通訊軟件因其即時(shí)性、便利性在日常生活中占據(jù)著重要地位。局域網(wǎng)內(nèi), 因?yàn)椴粫?huì)產(chǎn)生流量資費(fèi),而且其本身的網(wǎng)絡(luò)條件也適合文件傳輸、音視頻傳輸?shù)却罅繑?shù)據(jù)的文件傳輸,因而可成為人們?nèi)粘Mㄓ嵵械闹匾緩?。并且可拓展到廣域網(wǎng)中,讓更多的人受益。
1 軟件系統(tǒng)整體結(jié)構(gòu)設(shè)計(jì)
根據(jù)手機(jī)用戶在局域網(wǎng)內(nèi)通過手機(jī)等無線終端進(jìn)行即時(shí)通訊的需求,系統(tǒng)對(duì)即時(shí)通訊的常用功能進(jìn)行實(shí)現(xiàn),包括用戶個(gè)人信息設(shè)置,添加、刪除、修改、分組等。
由于在局域網(wǎng)內(nèi),用戶對(duì)文件傳輸和語音等即時(shí)通訊需求更大,在無線局域網(wǎng)的網(wǎng)絡(luò)環(huán)境下,帶寬、傳輸速度和效率更高,更適合用來進(jìn)行文件傳輸和語音的實(shí)時(shí)傳輸。
根據(jù)系統(tǒng)的不同功能,將系統(tǒng)分成兩大模塊 :文字語音聊天模塊和視頻聊天模塊。文字語音聊天模塊采用UDP 協(xié)議, 視頻聊天模塊采用TCP 協(xié)議,保證視頻圖像不會(huì)出現(xiàn)失幀的現(xiàn)象。圖 1 所示是該系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)圖。
2 系統(tǒng)功能模塊設(shè)計(jì)
系統(tǒng)功能的設(shè)計(jì),也就是即時(shí)通訊軟件即客戶端和服務(wù) 端的程序設(shè)計(jì),在局域網(wǎng)下,分別對(duì)客戶端和服務(wù)器端進(jìn)行 設(shè)計(jì)。
2.1 服務(wù)器端模塊設(shè)計(jì)
服務(wù)器的功能模塊主要負(fù)責(zé)建立監(jiān)聽、等待接收客戶端的鏈接請(qǐng)求、接收并建立新線程以響應(yīng)客戶端的請(qǐng)求。同時(shí) 根據(jù)請(qǐng)求類型決定是否需要訪問數(shù)據(jù)庫和對(duì)數(shù)據(jù)庫進(jìn)行操作。 服務(wù)器端工作流程 :服務(wù)器啟動(dòng)后,建立一個(gè)基于 TCP 的監(jiān) 聽進(jìn)程,用于監(jiān)聽客戶端發(fā)送過來的各種請(qǐng)求。在接收到客 戶端的連接請(qǐng)求信息時(shí),服務(wù)器會(huì)響應(yīng)連接,同時(shí)服務(wù)器會(huì) 建立一個(gè)新的線程,負(fù)責(zé)處理客戶端的各種請(qǐng)求信息。服務(wù) 器工作流程如圖 2 所示
2.2 客戶端模塊設(shè)計(jì)
客戶端的主要功能是與服務(wù)器端進(jìn)行通訊,以及對(duì)數(shù)據(jù) 庫進(jìn)行查詢、刪除、修改。 客戶端和服務(wù)器端通訊時(shí)創(chuàng)建三 個(gè)線程:一個(gè)線程負(fù)責(zé)信息的發(fā)送,一個(gè)線程負(fù)責(zé)信息的接收, 一個(gè)線程負(fù)責(zé)心跳信息的發(fā)送。其通訊流程圖如圖 3 所示。
客戶端采用 MVC 軟件開發(fā)結(jié)構(gòu),采用 Android 的 XML 文件對(duì)軟件界面進(jìn)行描述。
(1)視圖層。主要是 Android 的 layout 中的 XML文件進(jìn)行定義,該 XML文件用于定義并描述用戶界面,負(fù)責(zé)軟件界 面的顯示 ;
(2)控制層。Android 的 activity 活動(dòng)類通過 Android 的 activity 進(jìn)行邏輯處理,在 activity 里可以設(shè)置頁面事件的監(jiān) 聽響應(yīng),在 onCreate()方法里對(duì)主要邏輯進(jìn)行處理 ;
(3)model 層。主要是關(guān)于服務(wù)器和客戶端進(jìn)行連接并 對(duì)數(shù)據(jù)庫進(jìn)行處理,對(duì)本地 SQLite 數(shù)據(jù)庫進(jìn)行操作,把通訊 數(shù)據(jù)轉(zhuǎn)化成數(shù)據(jù)庫的相關(guān) SQL 存入數(shù)據(jù)庫,并封裝一些對(duì)數(shù) 據(jù)庫的查詢?cè)L問,存儲(chǔ)個(gè)人信息及聊天信息。
文字語音聊天模塊采用點(diǎn)對(duì)點(diǎn)通信,使用 UDP 協(xié)議作為 文字語音信息的實(shí)時(shí)傳輸協(xié)議。UDP 協(xié)議占用資源更少,效 率更高,但是 UDP 協(xié)議是面向無連接的,所以傳輸質(zhì)量無法 保證。文字語音聊天流程圖如圖 4 所示。
視頻聊天模塊采用 TCP 協(xié)議,TCP 是一種面向連接的、 可靠的傳輸層協(xié)議,通過安卓手機(jī)自帶的前置攝像頭進(jìn)行圖 像采集,采集的原始圖像數(shù)據(jù)轉(zhuǎn)換為 JPG 格式,轉(zhuǎn)化為數(shù)據(jù) 流發(fā)送給對(duì)方,并對(duì)數(shù)據(jù)進(jìn)行還原,重繪成一幀一幀的圖像, 然后顯示出來。其視頻聊天流程圖如圖 5 所示。
2.3 客戶端數(shù)據(jù)庫設(shè)計(jì)
根據(jù)用戶需求,客戶端需要對(duì)一些數(shù)據(jù)進(jìn)行本地存儲(chǔ), 本軟件借助 Android 內(nèi)置的 SQLite 數(shù)據(jù)庫作為客戶端的數(shù) 據(jù)庫。SQLite 是一款輕型的數(shù)據(jù)庫,是遵守 ACID 的關(guān)系型 數(shù)據(jù)庫管理系統(tǒng),占用資源很低,能夠支持 Windows/Linux/ Unix 等操作系統(tǒng),可以和很多程序語言結(jié)合。客戶端數(shù)據(jù)庫 主要存儲(chǔ)用戶個(gè)人信息(見表 1 所列),圖像信息以及聊天信息 如表 2 所列。
(4)對(duì)軟件的客戶端和服務(wù)器端進(jìn)行了設(shè)計(jì)和實(shí)現(xiàn)。
本文雖然設(shè)計(jì)實(shí)現(xiàn)了即時(shí)通訊功能,但對(duì)于視頻的傳輸簡化了設(shè)計(jì),而且對(duì)于視頻的實(shí)時(shí)傳輸,未采用專業(yè)的流媒體服務(wù)器,以及在通訊加密方面還可以加強(qiáng)及優(yōu)化。