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