李波 楊雪飛
摘 要:該文采用了具有面向?qū)ο筇攸c的Java語言來進行程序設計,提出了即時通訊服務器整體架的構(gòu)概念并且對即時通訊系統(tǒng)的功能及服務進行了全面的分析。該系統(tǒng)軟件分別設計了客戶端以及服務器端,客戶端可以實現(xiàn)對基本的文字消息和相關文件進行交流和傳遞,這在保障了網(wǎng)絡安全的基礎上也相對提高了效率。服務器端實現(xiàn)了對在線用戶的管理和維護功能,性能比較穩(wěn)定且簡單實用。系統(tǒng)軟件設計并實現(xiàn)了用戶注冊,登陸,用戶即時聊天,文件傳輸,聊天記錄管理,時鐘及文件傳輸記錄等相關功能。
關鍵詞:即時通訊 Java Eclipse 客戶端 服務器端
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1672-3791(2015)07(a)-0018-03
隨著飛速發(fā)展的移動互聯(lián)網(wǎng),IM軟件已經(jīng)成為目前軟件中用戶使用頻率最高,并且用戶粘度最高的軟件之一,越來越多的人利用網(wǎng)上的資源來享受不斷完善且發(fā)展的網(wǎng)絡服務,網(wǎng)絡技術也被越來越多的應用于人們生活的各個領域,而如何更有效的處理用戶的請求,服務器如何更加易于維護和更新就成了比較重要的問題。該項目該論文主要特征是動態(tài)的、實時的完成信息的讀取、發(fā)送,利用流來實現(xiàn)信息的交換,并且具有高效的交互性,能夠較好的滿足了運行環(huán)境的需求和用戶的要求。
近年來,隨著計算機硬件技術的發(fā)展,硬件方面的制約越來越小,并且伴隨著不斷推出的心得通信技術,和不斷改進的網(wǎng)絡條件,集成多個功能的IM軟件,已經(jīng)使得越來越多的用戶感受到了網(wǎng)絡的便利。同時即時通訊軟件也具有較低的成本,一系列的便利性也促使人們對這個領域更加深入的探索,這對于加強信息交流溝通的質(zhì)量和效率都具有較為重要的作用[1]。
1 系統(tǒng)功能簡介
1.1 客戶端
(1)用戶注冊功能,使用戶進行賬號注冊并完成相關信息的填寫。
(2)用戶登錄功能,保證用戶能夠安全的登錄軟件,進入聊天界面。
(3)聊天功能,實現(xiàn)在線用戶和用戶之間兩人或多人的在線溝通交流。
(4)文件傳輸,在線用戶兩兩之間可進行文件的相互傳輸。
(5)聊天記錄功能,實現(xiàn)當前用戶能夠查閱已保存的聊天內(nèi)容。
1.2 服務器端
(1)對用戶登錄信息進行管理,并且進行保存,以供后續(xù)查詢和處理。
(2)能夠向所有用戶發(fā)送系統(tǒng)消息。
(3)保存并顯示用戶之間的通話記錄內(nèi)容以及文件傳輸記錄,將該信息儲存在文件中,能夠滿足后續(xù)的查詢,并且在控制臺將其輸出,能夠完成實時的信息預覽[2]。
2 通訊軟件系統(tǒng)客戶端的設計
2.1 圖形界面的設計實現(xiàn)
該IM軟件采用C/S的工作模式,客戶端能夠?qū)崿F(xiàn)圖像界面的展示,方便用戶之間交流和更多的邏輯交互。以下為圖形界面實現(xiàn)相關類及方法的說明:
(1) setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
應用Border類來進行邊框的寬度及高度設置,以便用戶輸入昵稱及密碼。登陸界面方面CellRenderer:JList里的一個元素,當選擇和未選擇的時候,會有不同的背景色樣式。
UUListModel類繼承自AbstractListModel,實現(xiàn)了父類的抽象方法,可以作為JList的數(shù)據(jù)模型。
(2)public Chatroom(String u_name, Socket client) {
name=u_name;
clientSocket=client;
onlines=newVector();
其中CatChatroom類繼承自Jframe,用戶聊天窗口的界面。由公共聊天區(qū)域,個人打字區(qū)域,發(fā)送文件區(qū)域,開始按鈕,關閉按鈕,在線用戶列表,發(fā)送文件區(qū)域等部分組成。它綁定了客戶端socket對象,可以實現(xiàn)向服務器端發(fā)送各種類型的消息的功能。
(3)final JButton btnNewButton=new JButton("\u5173\u95ED");
btnNewButton.setBounds(214,448,60,30);
getContentPane().add(btnNewButton); //關閉按鈕功能
發(fā)送按鈕功能:在用戶點擊的時候,會獲取當前輸入框的內(nèi)容,并檢查選擇的對象,將內(nèi)容發(fā)送出去,如圖1所示[3]。
2.2 消息及文件的收發(fā)
消息的收發(fā)使用了socket編程,簡單而言,在客戶端用戶登陸成功后,服務器端會對客戶端進行一個Socket的建立和相應端口的分發(fā),因此,服務器端應用程序只用檢測該端口的數(shù)據(jù)就能夠確定是當前用戶中的哪一個進行數(shù)據(jù)的分發(fā),在服務器端得到相對應端口的數(shù)據(jù)時,根據(jù)用戶的消息和相對應的處理邏輯進行數(shù)據(jù)的處理。
其中ServerSocket的工作流程可以描述如下:首先使用ServerSocket方法選取服務器的某個端口進行連接的建立,并且監(jiān)聽該端口。之后建立的對象在ServerSocket指定的端口利用accept的方法對信息進行監(jiān)聽,一直到檢測有來自客戶端發(fā)送的試圖連接服務器的請求,accept方法才能由之前一直阻塞的狀態(tài)改變?yōu)橥〞碃顟B(tài)。同時返回到服務器端使客戶端的Socket接口與服務器端的Socket接口進行連接。再來依據(jù)服務器中getInputStream、getOutputStream的類型調(diào)用方法中的一個或兩個來建立與客戶端進行交互的輸出流和輸入流。在這個整個過程中,服務器與客戶端是依據(jù)一定的協(xié)議來進行交互的,直到二者的連接關閉為止。最后服務器或客戶端或兩個都關閉連接之后服務器才能繼續(xù)監(jiān)聽來自客戶端的下一次連接,如圖2所示[4]。
3 通訊軟件系統(tǒng)服務器端的設計
作為網(wǎng)絡節(jié)點的服務器端,其主要作用會存儲并處理網(wǎng)絡上的大部分數(shù)據(jù),該項目中設計的服務器端用來監(jiān)聽來自客戶端發(fā)送的相關信息,并且進行來自客戶端的信息管理,作用類似于網(wǎng)絡服務器。
作為服務器端,主要工作內(nèi)容為:接受客戶端的消息,并根據(jù)消息類型進行數(shù)據(jù)的轉(zhuǎn)發(fā)和存儲,作用非常相似與目前網(wǎng)絡體系中的網(wǎng)絡服務器。
服務器的作用就是承載各種各樣的數(shù)據(jù),和軟件編寫者的處理邏輯,并且同時根據(jù)接收到的消息類型的不同,跳轉(zhuǎn)至不同的處理邏輯,進行數(shù)據(jù)的梳理。同時轉(zhuǎn)發(fā)數(shù)據(jù),處理數(shù)據(jù),存儲記錄,打印日志。
該即時通訊軟件系統(tǒng)首先必須開啟服務器端進行不斷的監(jiān)聽并即時反饋,當客戶端用戶上線并交流,服務器日志會記錄相關通話內(nèi)容和時鐘顯示,當用戶之間發(fā)送文件,同樣會顯示文件大小以及保存位置等相關信息,如圖3所示[5]。
4 測試過程及結(jié)果
該IM軟件系統(tǒng)進行代碼部分的編寫工作完成后,需要進行一些列的測試工作,不僅要測試系統(tǒng)各個方面的執(zhí)行準確性,還要測試高效性和交互性等很多“軟實力”。
該即時通訊系統(tǒng)通過Java語言在Eclipse平臺上實現(xiàn)。測試結(jié)果如下:
(1) 服務器端能夠正確并且順利的啟動,并且能夠監(jiān)聽客戶端的行為。
(2) 客戶端界面能夠?qū)崿F(xiàn)。完成用戶的注冊功能,使用戶能夠輸入昵稱、密碼及再次確認密碼。
(3)客戶端能夠完成用戶的登錄,并且檢測輸入的用戶名和密碼是否匹配,以及該用戶名是否存在于當前系統(tǒng)中,如果密碼錯誤,則提示錯誤信息,并且提示用戶再次輸入。
(4) 客戶端文件傳輸功能實現(xiàn)。雙擊選擇用戶進行文件的傳輸,接收方可選擇接收或不接收,之后可選擇存儲位置,同時有進度條顯示進程。
(5) 客戶端私聊及群聊功能實現(xiàn)。用戶可選擇一個或多個用戶進行溝通交流。
(6) 客戶端字體及大小的設置。用戶可以調(diào)整字形及字體的大小
(7) 服務器端日志記錄用戶相關操作。從開始服務器啟動,到用戶上線提示,再到聊天記錄以及文件傳輸記錄均能夠顯示在日志當中,方便查閱。
5 結(jié)語
目前來講,其實即時通訊軟件在生活中已經(jīng)較為常見,但從一定程度上來講,許多都是側(cè)重于娛樂功能的開發(fā),用于實現(xiàn)單一通訊以及傳輸文件信息的軟件較為缺少。在點對點交流的同時,擺脫了對遠程服務器的依賴,避免浪費過的網(wǎng)絡資源,具有較好的實用性。在此次即時通訊軟件系統(tǒng)的設計過程中,詳細闡述了一個即時通訊軟件模型的設計思路,并對各個模塊概念及功能及技術分別進行了分析,最終完成了一個相對成熟的設計方案。
參考文獻
[1] 馮博,應群.面向?qū)ο蟮腏ava網(wǎng)絡編程[M].北京:清華大學出版社,2003.
[2] 印旻.Java語言與面向?qū)ο蟪绦蛟O計[M].北京:清華大學出版社,2000:256-230.
[3] Bruce Eckel著.陳昊鵬譯.Java編程思想[M].北京:人民郵電出版社,2004.
[4] 吳越勝,李新磊,等.Eclipse 3.0程序開發(fā)技術詳解[M].北京:清華大學出版社,2010.
[5] 翟高粵,基于Java語言Socket C/S通信的實現(xiàn)方法[J].甘肅科技縱橫,2005(6):28-29,202.