文/虞國全
網絡聊天系統設計與應用
文/虞國全
目前,計算機的發展離不開網絡這一方向,網絡將大大擴展計算機的功能,研究計算機在網絡方面的技術以及應用,挖掘計算機的網絡潛能,將能夠大大提高我們對計算機的本身的認識,同時也能加深對計算機網絡的認識。根據當前網絡的需求,網絡聊天越來越受各種網民青睞。因此開發網絡聊天是相當有必要,而且在網站內增加聊天功能,不僅可以提高網站的訪問量,同時可以留著訪客,更重要的是讓訪客透過聊天室實時的互相交流。
本論文是從實際工程應用角度出發,以計算機網絡原理為指導,結合當前網絡中的一些常用技術開發了本聊天室工具,具有聊天室聊天、二人私聊、表情的應用以及請離用戶的功能,主要對當今聊天軟件的發展情況、與該聊天軟件相關的各種技術以及該聊天系統的設計實現做了一個詳細的闡述。
本聊天系統的開發主要用到了Socket通信,在此基礎上,實現點對點聊天、廣播聊天、一對多聊天,可以運行于任何支持TCP/IP協議的機器上,用到了多線程的設計,因此線程之間的同步是一大關鍵之處。由于系統采用C/S (Client/ Server)結構,客戶端與客戶端以及客戶端與服務器端需要傳送一些控制消息,因此系統需要自定義一些消息類型,這是該網絡聊天系統的又一大關鍵之處。
1.硬件要求:安裝了網卡,并連入局域網。
2.軟件要求: Windows98以上的系統;安裝了支持Socket通信的TCP/IP或者協議;JDK1.4以上版本。
如今流行的聊天軟件功能已經非常強大,基本上朝著三個大的方向發展,即個人及時通信,企業實時通信和娛樂資訊。它的功能主要有:
1.個人文本聊天;
2.個人語音聊天;
3.個人視頻聊天;
4.圖像傳輸;
5.文件傳輸;
6.在線游戲;
7.聊天室聊天;
8.隱身,上線;
9.群聊天;
10.企業級實時通信。
聊天軟件的發展方向是三維化,人性化,綜合化。
設計并實現基于Socket的文本聊天程序包括廣播聊天,二人私聊。涉及的內容包括用戶登錄,聊天方式的選擇,附帶表情,以及悄悄話選項,管理員身份可以看到私聊的和內容。由一個管理員運行ChatRoomServer建立主機服務器,其他用戶運行ChatRoomClient運行客戶端,通過服務器的IP和設置的端口號與之建立連接。在服務器端可以顯示用戶登錄的信息,客戶端可以看見當前在線用戶的人數和昵稱。在由于開發目的的原因,所以不采用登錄驗證模式,只要輸入用戶昵稱即可登錄,對惡意刷屏或語言不禮貌者,管理員可以請離該用戶。
該系統網站總體分為四大模塊,分別是:歡迎界面、管理員模塊、用戶管理模塊、聊天模塊。其中歡迎模塊就是開始的歡迎頁面,是全網站的首頁,也是帶領用戶進入本網站的向導,其中包含進入登錄界面和進入注冊界面兩個鏈接。
管理員模塊是管理員進行對網站的管理使用的模塊,有管理員登錄頁面、管理員管理頁面和管理員操作反饋頁面等組成,主要實現對已注冊用戶和在線用戶的管理,通過對用戶的了解確定用戶這冊身份的去與留。這主要通過管理員擁有的對數據庫操作的權限,從而決定是否從數據庫內將用戶信息刪除以達到踢出用戶的功能。利用網站內提供的JavaBean實現和數據庫連接,在管理員操作頁面內設有動態delete刪除SQL語句,通過

圖1 用戶E-R關系

表1 用戶數據表屬性設計
用戶模塊主要包括用戶登錄和用戶注冊兩個單元,分別是用來給用戶登錄和用戶注冊使用的頁面。用戶的登錄可以使用已經注冊的注冊用戶身份登錄,也可以使用游客身份進行登錄。使用游客身份登錄是不需要注冊的,可以每次使用一個不同的名字,比較自由,但同時也難以在聊天室內有個完整的虛擬形象,可以彌補此處就是使用注冊用戶身份,這樣便可以有一個固定的稱呼,可以更好地與聊友們交流。用戶的注冊單元是常規的注冊,主要包含用戶名、密碼和聯系方式三項,其中聯系方式是比較常用的E-mail聯系方式。注冊的成功與否會有相應的提示。

圖2 服務器結構流程

圖3 客戶端結構流程
已注冊用戶的登錄實現主要通過將用戶的提交用戶名與數據庫中的對比,查找是否有該用戶名,使用動態select選取SQL語句。如果數據庫內沒有該用戶名,則該用戶顯然尚未注冊,反饋相應信息;如果有該用戶名則繼續對應用戶提交的密碼與數據庫內該用戶名項的密碼相對比,結構則允許用戶登錄,并將頁面轉到聊天界面,否則提示相應錯誤信息。并同時將登錄成功的用戶的用戶名寫進Application從而在聊天界面的用戶列表里能被顯示出來。游客的登錄則只要判別用戶沒有重復,并合乎用戶的規范就可以登錄并轉到聊天界面了,這里沒有數據庫的操作。游客與已注冊用戶有著一樣的使用界面。
由于篇幅原因,部分數據庫設計如下。
數據庫邏輯結構
因為每個實體都必須轉化為一個關系模式,所以有三個關系模式,可以將上述E-R簡化為如下關系模式:
用戶(號碼,昵稱,密碼,性別,頭像號碼,所在ip地址,在線狀態,連接使用的端口號,郵箱,籍貫)
好友(用戶號碼,好友號碼)
聊天記錄(發送方號碼,接收方號碼,發送時間,聊天內容)
用戶E-R如圖1所示。
根據關系模式,可以得到三張表,其中用戶數據表的屬性設計見表1。

圖4 客戶端主頁面效果
客戶通過Socket(InetAddress,port)建立與服務器的連接。服務器與客戶都通過構造ObjectInputStream,ObjectOutputStream來建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務器accept()方法返回一個新建的Socket對象。客戶端然后向服務器發送消息,比如文件傳輸等,服務器收到來自客戶的請求后,針對不同的消息處理請求。如圖3所示。
最終主界面效果如圖4所示。
本系統是典型的C/S架構,它的優點是大部分功能由服務器完成,客戶端簡單易維護,這樣做用戶就更為容易接受。并且占用的系統資源少,提高了性能。缺點是聊天的內容沒有儲存,當清屏以后就無法再看到以前的聊天記錄了。日后可以考慮增加日志的功能,把聊天記錄及一些用戶信息存儲在.txt文件或者數據庫中,使其有處可查。本聊天系統設計是為軟件開發人員在局域網中方便交流,減少成本,消除由于交流不同帶來的開發成本上升,可能部分模塊功能有所不全,對此本人會再加強設計以期全部完成實現。
(作者單位為南昌理工學院計算機系)