【正文】
............................................................................................421第 1 章 引言 開發(fā)背景隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。開發(fā)中利用了計算機網(wǎng)絡(luò)編程的基本理論知識,如 TCP/IP 協(xié)議、客戶端/服務(wù)器端模式(Client/Server 模式) 、網(wǎng)絡(luò)編程的設(shè)計方法等。后者通過與服務(wù)器建立連接,來進行客戶端與客戶端的信息交流。該系統(tǒng)開發(fā)主要包括一個網(wǎng)絡(luò)聊天服務(wù)器程序和一個網(wǎng)絡(luò)聊天客戶程序兩個方面。** 科 技 大 學 電 信 學 院課 程 設(shè) 計 說 明 書設(shè)計題目: 基于 java 的聊天系統(tǒng)設(shè)計與實現(xiàn)學院、系: 計算機系 專業(yè)班級: 計算機 20221 班 學生姓名: 指導教師: 成 績: 2022 年 10 月 27 日基于 JAVA 的聊天系統(tǒng)的設(shè)計與實現(xiàn)摘 要網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯的聊天工具,其中應用比較廣泛的有 Netmeeting、騰訊、MSNMessager 等等。前者通過 Socket 套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。其中用到了局域網(wǎng)通信機制的原理,通過直接繼承 Thread 類來建立多線程。在網(wǎng)絡(luò)編程中對信息的讀取、發(fā)送,是利用流來實現(xiàn)信息的交換,其中介紹了對實現(xiàn)一個系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。目前,出現(xiàn)了很多非常不錯的聊天工具,其中應用比較廣泛的有Netmeeting、騰訊 、MSNMessager 等等。隨著軟件、網(wǎng)絡(luò)和通訊三大現(xiàn)代信息技術(shù)的發(fā)展,在溝通、協(xié)作方面有著更多方便、快捷、實時等優(yōu)勢的即時通訊,成為繼電話、EMail 之后又一個完全融入每個人生活的互聯(lián)網(wǎng)工具。使用它可在各式各樣不同種機器、不同種操作平臺的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。Java 正在逐步成為 Inter 應用的主要開發(fā)語言。 開發(fā)目的和意義網(wǎng)絡(luò)通信在當今信息社會中起著不可或缺的作用,人們可以利用網(wǎng)絡(luò)通信技術(shù)進行即時的信息 交流。通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的范疇,隨著企業(yè)即時通訊工具的出現(xiàn),即時信息在網(wǎng)絡(luò)營銷中將發(fā)揮更大的作用。考慮到要可以在局域網(wǎng)中應用,本系統(tǒng)使用的是第二種方法,經(jīng)過設(shè)置,在局域網(wǎng)或 inter 上都可以使用。一個標準的 C/S 模式。它以抽象窗口工具包(AWT )為基礎(chǔ)使跨平臺應用程序可以使用任何可插拔的外觀風格。Java web 和 struts2 技術(shù) 采用 B/S 的結(jié)構(gòu)實現(xiàn)服務(wù)器端,對用戶和在線用戶進行增刪改查,和踢用戶下線,以及開啟服務(wù)器和關(guān)閉服務(wù)器。3第 2 章 即時通訊系統(tǒng)的相關(guān)研究 C/S 開發(fā)模式 C/S 結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端 PC 的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。缺點主要有以下幾個: 而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴展性。 客戶端需要安裝專用的客戶端軟件。還有,系統(tǒng)軟件升級時,每一臺客戶機需要重新安裝,其維護和升級成本非常高??赡苓m應于 Windows 98,但不能用于Windows 2022 或 Windows XP。 B/S 開發(fā)模式 B/S 結(jié)構(gòu)(Browser/Server 結(jié)構(gòu))結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過 WWW 瀏覽器來實現(xiàn),極少部分事務(wù)邏輯在前端(Browser )實現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server )實現(xiàn),形成所謂三層 3tier結(jié)構(gòu)。以目前的技術(shù)看,局域網(wǎng)建立 B/S 結(jié)構(gòu)的網(wǎng)絡(luò)應用,并通過 Inter/Intra 模式下數(shù)據(jù)庫應用,相對易于把握、成本也是較低的。特別是在 JAVA 這樣的跨平臺語言出現(xiàn)之后,B/S 架構(gòu)管理軟件更是方便、速度快、4效果優(yōu)。雙擊好友頭像即會顯示出聊天界面。點擊“發(fā)送”按鈕之后,程序就會把輸入的信息的種類,信息內(nèi)容、本人的 ID 號、對方的 ID 號以及當前的時間等內(nèi)容打包成一個 Message 對象通過 Socket 發(fā)送到服務(wù)器端。這樣,雙方的即時通訊就實現(xiàn)了。以及用戶的注冊,前臺驗證等等 MySQL 數(shù)據(jù)庫應用技術(shù)使用 MySQL 存儲用戶信息,采用 JDBC 技術(shù)對其進行增刪改查。數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進行通信。具體如下:服務(wù)器5 圖 21 socket 通信 開發(fā)環(huán)境的搭建客戶端采用 C/S 結(jié)構(gòu),管理端采用 B/S 的結(jié)構(gòu),用 Tomcat 作為服務(wù)器,MySQL 作為數(shù)據(jù)庫,還使用到了 WindowBuilder 開源框架進行界面開發(fā)。收發(fā)消息時,可以實現(xiàn)離線接收。服務(wù)器端應當是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。因此技術(shù)上是可以實現(xiàn)的。本系統(tǒng)需要一個MySQL 數(shù)據(jù)庫服務(wù)器,由于并發(fā)使用人數(shù)比較少,tomcat 可以作為 web 服務(wù)器,所以成本很低。如果要實現(xiàn) inter 上通訊,只需要將服務(wù)器端運行在一個有固定 IP的公網(wǎng)上就可以。7 系統(tǒng)需求分析 功能分析本系統(tǒng)要實現(xiàn)的功能如下:1)注冊服務(wù)器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的呢稱,性別,籍貫,個人資料等,接受完畢后,便通過 JDBC 與后臺數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記錄,如果成功,便向客戶返回其號碼。2)登陸在客戶端,用戶輸入其號碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開始通過 JDBC 讀取數(shù)據(jù)庫,然后與用戶輸入的信息進行比對,如果成功,便打開主程序窗口。3)聊天客戶端首先發(fā)送消息到服務(wù)器端,服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。如果 B 不在線則把信息儲存在服務(wù)器,等 B 上線了在發(fā)送給他。4)發(fā)送截圖客戶端 A 點擊截圖按鈕,將屏幕鎖定,截取圖片,將圖片儲存在 byte[]數(shù)組中發(fā)送到服務(wù)器端。B 接收到 A 發(fā)來的截圖信息,會根據(jù) byte[]構(gòu)造圖片,將圖片顯示出來。5)發(fā)送文件客戶端 A 點擊發(fā)送文件按鍵,從本地選擇文件,將文件在 byte[]數(shù)組中分批次發(fā)送到8服務(wù)器端。B 接收到 A 發(fā)來的文件信息,會根據(jù)文件發(fā)送的狀態(tài)和 byte[]構(gòu)造文件。默認儲存在 C 盤下面,會以用戶的登錄賬號為名。8)在線用戶的操作 管理員通過 B/S 的系統(tǒng)對在線用戶操作,可以踢用戶下線。u s e ra c c o u n tN a m ep a s s w o r ds i g n a t u r eP r o f i l e I Da g es e x圖 41 系統(tǒng)實體及其屬性表 41 User字段名 數(shù)據(jù)類型 字段說明 鍵引用 備注account int(6) ID PK 主鍵(自動增一)name varchar(20) 用戶名稱 非空password varchar(20) 用戶密碼 非空signature Varchar(255) 簽名profileID int(2) 頭像 IDage int(3) 年齡sex sex char(2) 性別10 系統(tǒng)模塊設(shè)計 聊天系統(tǒng)工作原理圖 圖 42 系統(tǒng)工作原理11 系統(tǒng)功能模塊圖:J A V A 聊天系統(tǒng) 文件模塊聊天模塊登錄模塊 用戶管理模塊文件接收 文件發(fā)送 發(fā)送文字發(fā)送圖片 在線用戶管理 增加用戶 刪除用戶 修改用戶 查找用戶 查看在線用戶 踢用戶下線 注冊 圖 43 系統(tǒng)模塊 系統(tǒng)用例圖:普通用戶的用例圖:用戶注冊登陸聊天文件發(fā)送文件接收文件文字圖片 u s e s u s e s u s e s u s e s 圖 44 普通用戶用例圖12后臺管理員的用例圖:管理員登陸增加用戶踢用戶下線查看在線用戶刪除用戶查找用戶修改用戶圖 45 后臺用戶用例圖 活動圖:1)用戶登陸活動圖首先填寫登陸信息,提交以后服務(wù)器會對用戶名和密碼進行驗證。如果登陸成功,就更新在線狀態(tài)。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會轉(zhuǎn)發(fā)到接收者。14圖 47 發(fā)送消息活動圖 系統(tǒng)類設(shè)計 Message 類的設(shè)計:客戶端和服務(wù)器端通信時,發(fā)送的都是 Message 類的對象,因此 Message 類的設(shè)計很重要。 信息類型private String content。 發(fā)送者 accountprivate Integer receiverAccount。 發(fā)送時間private User myself。自己本身對象,用與好友列表頭好友列表private transient Image img。 圖片的內(nèi)容private String fileName。 文件的長度private int length。 文件傳輸?shù)臓顟B(tài):0 是不接受文件,1 是接受文件,2 請求發(fā)送文件,3 文件傳輸中,4 文件傳送完成private Integer msgType消息的類型有這么幾種: public interface MessageType {Integer message_succeed=1。//表明登錄失敗Integer message_m_mes=3。//要求在線好友的包Integer message_ret_onLineFriend=5。//下線通知包Integer message_img=7。//文件包} 截圖類的設(shè)計:截圖類的實現(xiàn)類為:class Screenshot extends JFrame implements MouseListener,MouseMotionListener。先用截取全部屏幕的圖片,然后顯示出來,覆蓋住整個屏幕。雙擊表示截圖成功,右鍵表示取消截圖。+ a f t e r S e n d ( i n o : O b j e c t )+ a f t e r R e c e i v e ( i n o : O b j e c t )M e s s a g e R e c o r da f t e r S e n d : 記錄發(fā)出數(shù)據(jù)a f t e r R e c e i v e : 記錄接收到的數(shù)據(jù)+ r u n ( )+ s e n d ( i n o : O b j e c t )+ r e c e i v e ( ) : O b j e c tC l i e n t C o n n T o S e r v e r T h r e a d+ r u n ( )T h r e a d 圖 49 MessageRecord 類如果是圖片則顯示出,發(fā)送時間和圖片大小。 日志文件格式如下: 圖 410 記錄文件 服務(wù)端線程的設(shè)計:服務(wù)器端的核心是對應客戶的線程,每個 socket 對應