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