朱浩悅 侯敏
摘要:該課題主要研究基于Android的移動(dòng)即時(shí)通訊系統(tǒng),該系統(tǒng)以使用戶獲得更好的用戶體驗(yàn)性為目的,并力求做到界面簡(jiǎn)潔、用戶易操作。該系統(tǒng)的主要功能:用戶注冊(cè)、登錄、好友一對(duì)一聊天。該即時(shí)通訊工具采用多線程原理,數(shù)據(jù)傳輸通過(guò)socket編程實(shí)現(xiàn)。
關(guān)鍵詞:Android;socket 編程;多線程;即時(shí)通訊
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)34-0106-02
Abstract: The main research topic of this paper is the mobile instant messaging system based on Android, This system is aiming at making users acquire better user experience, and striving to make concise interface, making users easy to operate. The main functions of this instant messaging system are user registration, login, one-to-one chat between friends. The instant messaging tool uses multi thread principle, and data transmission in this Instant Messenger is accomplished by socket programming.
Key words: Android; socket programming; multi-threaded; Instant Messaging
以前,人們的信息交流是通過(guò)電話、信件、電報(bào)等手段,由于功能的局限給收發(fā)雙方帶來(lái)了很多不便。更加即時(shí)直觀,且能在網(wǎng)上識(shí)別在線用戶并與他們實(shí)時(shí)交換消息的即時(shí)通訊技術(shù)應(yīng)運(yùn)而生,它是電子郵件發(fā)明以來(lái)迅速崛起的在線通訊方式,為網(wǎng)絡(luò)用戶提供一個(gè)實(shí)時(shí)交流聊天的平臺(tái)。即時(shí)通訊和社會(huì)化網(wǎng)絡(luò)、統(tǒng)一通信、在線協(xié)同三大技術(shù)熱點(diǎn)的關(guān)系越來(lái)越密切已經(jīng)構(gòu)成融合發(fā)展的趨勢(shì)。開(kāi)發(fā)技術(shù)現(xiàn)已非常成熟的網(wǎng)絡(luò)通信工具一般采用UDP或者TCP協(xié)議體系來(lái)實(shí)現(xiàn),比如較早的MSN即時(shí)通訊軟件,還有國(guó)產(chǎn)的有名的QQ,阿里旺旺這些工具統(tǒng)統(tǒng)都實(shí)現(xiàn)了廣域網(wǎng)上的即時(shí)通信、即時(shí)聊天,以及文件傳輸?shù)闹饕δ?,但是也各有各的特色,MSN的個(gè)性化表情,QQ方便的屏幕截圖功能,阿里旺旺則專為淘寶買(mǎi)賣(mài)雙方提供服務(wù)。這些軟件在使用方面各有特色,在實(shí)現(xiàn)方面也各有所長(zhǎng),但基于這些產(chǎn)品正在商業(yè)運(yùn)營(yíng)階段,其實(shí)現(xiàn)方式屬于商業(yè)機(jī)密,具體細(xì)節(jié)不可能得知。與此同時(shí),基于Android平臺(tái)的手機(jī)應(yīng)用程序的出現(xiàn),及其具有眾多出色的品質(zhì),如應(yīng)用無(wú)界限、應(yīng)用程序輕松嵌入網(wǎng)絡(luò)、應(yīng)用程序可并行運(yùn)行等,Android 手機(jī)平臺(tái)的應(yīng)用越來(lái)越廣泛,應(yīng)用的需求也越來(lái)越強(qiáng)烈,因此,開(kāi)展對(duì)移動(dòng)設(shè)備的即時(shí)通訊系統(tǒng)的研究是十分必要的。
1 系統(tǒng)功能及主要工具
Android的上層應(yīng)用程序的開(kāi)發(fā)是在Eclipse開(kāi)發(fā)環(huán)境中進(jìn)行的,運(yùn)用Java語(yǔ)言開(kāi)發(fā),同時(shí)還需要基于Android虛擬機(jī),并安裝JDK、SDK、ADT等插件。SDK 實(shí)質(zhì)就是一個(gè)工具包,包含創(chuàng)建和運(yùn)行Android應(yīng)用程序所必需的工具集合;而Android SDK采用了Java語(yǔ)言,所以還必須先安裝JDK插件;為了使Eclipse能與Android SDK進(jìn)行連接,我們還必須安裝ADT。數(shù)據(jù)庫(kù)采用了SQL SERVER 2008,數(shù)據(jù)庫(kù)中的每個(gè)數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)Java語(yǔ)言中的一個(gè)類Class,并在該類中沒(méi)有基本的Get/Set方法。程序從數(shù)據(jù)庫(kù)提取和存儲(chǔ)數(shù)據(jù)都會(huì)將數(shù)據(jù)封裝成一個(gè)Java對(duì)象Class,然后通過(guò)SQL語(yǔ)句完成對(duì)數(shù)據(jù)庫(kù)的操作。通過(guò)Java封裝的類Class對(duì)象,來(lái)對(duì)前臺(tái)界面和后臺(tái)界面提供數(shù)據(jù),達(dá)到在前后臺(tái)界面顯示用戶所需要的信息。
本系統(tǒng)共分為三個(gè)模塊。注冊(cè)模塊:注冊(cè)模塊包括個(gè)人信息的填寫(xiě)、驗(yàn)證與提交。登錄模塊:登錄模塊包括個(gè)人賬戶與密碼的正確填寫(xiě)以及后臺(tái)的驗(yàn)證提示信息。聊天模塊:聊天模塊中有個(gè)人好友列表也有群組聊天。
2 多線程Socket網(wǎng)絡(luò)編程
系統(tǒng)通訊的主要技術(shù)采用的是基于Java的多線程Socket網(wǎng)絡(luò)編程,Android手機(jī)端將組裝好的數(shù)據(jù)包通過(guò)無(wú)線網(wǎng)絡(luò)發(fā)送到服務(wù)器。每一個(gè)在線用戶占用獨(dú)立的線程與服務(wù)器進(jìn)行交互,用戶首先將信息發(fā)送到服務(wù)器,服務(wù)器解析信息,對(duì)Android端提交的數(shù)據(jù)進(jìn)行處理然后將信息轉(zhuǎn)發(fā)給相應(yīng)的用戶并在客戶端顯示。使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某個(gè)事件的處理,可以彈出一個(gè)進(jìn)度條用來(lái)顯示處理的進(jìn)度,程序的運(yùn)行速度可能加快,用戶界面可以更加吸引人。
Socket通信是網(wǎng)絡(luò)中計(jì)算機(jī)進(jìn)行通信的一種方法。應(yīng)用程序通過(guò)調(diào)用系統(tǒng)提供的Socket庫(kù)函數(shù)很容易實(shí)現(xiàn)網(wǎng)絡(luò)里計(jì)算機(jī)的通信。首先搭建基于Socket的C/S結(jié)構(gòu)設(shè)計(jì)的核心骨架,服務(wù)端和客戶端,同時(shí)在使用Socket進(jìn)行通信的過(guò)程中,對(duì)于兩端的端口號(hào)要一致??蛻舳说某绦蚴褂肧ocket類建立負(fù)責(zé)連接到服務(wù)器的套接字對(duì)象。Socket的構(gòu)造方法是Socket(String host,int port),參數(shù)host是服務(wù)器的IP地址,port是一個(gè)端口號(hào)。建立套接字可能會(huì)發(fā)生IoException異常,因此需要捕獲異常。在客戶端建立一個(gè)Socket需如下步驟:1)通過(guò)系統(tǒng)調(diào)用Socket()建立一個(gè)Socket。2)通過(guò)系統(tǒng)調(diào)用Connect()將Socket和服務(wù)器的地址連接起來(lái)。3)發(fā)送和接收消息,有很多方法可以實(shí)現(xiàn)這個(gè)功能,最簡(jiǎn)單的是使用系統(tǒng)調(diào)用read()和write()。在服務(wù)器端建立一個(gè)Socket需如下步驟:1)通過(guò)系統(tǒng)調(diào)用socket()建立一個(gè) Socket。2)通過(guò)系統(tǒng)調(diào)用bind()將Socket綁定到一個(gè)地址,對(duì)于一個(gè)Internet上的 Socket,這個(gè)地址是由主機(jī)和端口號(hào)組成的。3)通過(guò)系統(tǒng)調(diào)用listen()監(jiān)聽(tīng)是否有客戶端的連接。4)通過(guò)系統(tǒng)調(diào)用accept()受理一個(gè)請(qǐng)求。5)發(fā)送和接收消息。
3 系統(tǒng)實(shí)現(xiàn)及結(jié)果展示
對(duì)整個(gè)系統(tǒng)劃分的三個(gè)子系統(tǒng),我們依次進(jìn)行流程描述。首先,用戶進(jìn)入注冊(cè)界面,按照相關(guān)提示輸入信息,信息經(jīng)封裝后由服務(wù)器接收處理并給用戶返回注冊(cè)的qq號(hào)。用戶根據(jù)界面提示輸入相關(guān)信息,信息先在客戶端進(jìn)行格式判斷后封裝傳遞給服務(wù)器進(jìn)行驗(yàn)證,最后返回相應(yīng)信息。用戶登錄成功后,選擇好友進(jìn)行聊天,服務(wù)器對(duì)數(shù)據(jù)進(jìn)行封裝以及轉(zhuǎn)發(fā)。
服務(wù)器端實(shí)現(xiàn)了三個(gè)具體功能:登錄信息:檢查登錄信息是否正確,并向客戶端返回信息,如信息正確就將在線用戶發(fā)給該用戶,并將該用戶的狀態(tài)發(fā)給在線客戶。同時(shí)在服務(wù)器端顯示出來(lái)。聊天信息:轉(zhuǎn)發(fā)給消息指定的客戶。申請(qǐng)信息:自動(dòng)分配用戶密碼,并保存該用戶,同時(shí)將信息返回給客戶端。
用戶登錄界面如圖1所示: