基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)說明書_第1頁
基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)說明書_第2頁
基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)說明書_第3頁
基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)說明書_第4頁
基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)說明書_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、畢業(yè)論文聲明本人鄭重聲明:1 此畢業(yè)論文是本人在指導(dǎo)教師指導(dǎo)下獨(dú)立進(jìn)行研究取得的成果。除了特別加以標(biāo)注地方外,本文不包含他人或其它機(jī)構(gòu)已經(jīng)發(fā)表或撰寫過的研究成果。對(duì)本文研究做出重要貢獻(xiàn)的個(gè)人與集體均已在文中作了明確標(biāo)明。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。2本人完全了解學(xué)校、學(xué)院有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校與學(xué)院保留并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交此論文的復(fù)印件和電子版,允許此文被查閱和借閱。本人授權(quán)大學(xué)學(xué)院可以將此文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本文。3若在大學(xué)學(xué)院畢業(yè)論文審查小組復(fù)審中,發(fā)現(xiàn)本文有抄襲,一切后果均由本人承擔(dān),與

2、畢業(yè)論文指導(dǎo)老師無關(guān)。4. 本人所呈交的畢業(yè)論文,是在指導(dǎo)老師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的成果。論文中凡引用他人已經(jīng)發(fā)布或未發(fā)表的成果、數(shù)據(jù)、觀點(diǎn)等,均已明確注明出處。論文中已經(jīng)注明引用的內(nèi)容外,不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過的研究成果。對(duì)本文的研究成果做出重要貢獻(xiàn)的個(gè)人和集體,均已在論文中已明確的方式標(biāo)明。學(xué)位論文作者(簽名):年月關(guān)于畢業(yè)論文使用授權(quán)的聲明本人在指導(dǎo)老師的指導(dǎo)下所完成的論文及相關(guān)的資料(包括圖紙、實(shí)驗(yàn) 記錄、原始數(shù)據(jù)、實(shí)物照片、圖片、錄音帶、設(shè)計(jì)手稿等),知識(shí)產(chǎn)權(quán)歸屬華 北電力大學(xué)。本人完全了解大學(xué)有關(guān)保存,使用畢業(yè)論文的規(guī)定。同意學(xué)校 保存或向國(guó)家有關(guān)部門或機(jī)構(gòu)

3、送交論文的紙質(zhì)版或電子版,允許論文被查閱 或借閱。本人授權(quán)大學(xué)可以將本畢業(yè)論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫 進(jìn)行檢索,可以采用任何復(fù)制手段保存或編匯本畢業(yè)論文。如果發(fā)表相關(guān)成 果,一定征得指導(dǎo)教師同意,且第一署名單位為大學(xué)。本人畢業(yè)后使用畢業(yè) 論文或與該論文直接相關(guān)的學(xué)術(shù)論文或成果時(shí),第一署名單位仍然為大學(xué)。 本人完全了解大學(xué)關(guān)于收集、保存、使用學(xué)位論文的規(guī)定,同意如下各項(xiàng)內(nèi) 容:按照學(xué)校要求提交學(xué)位論文的印刷本和電子版本;學(xué)校有權(quán)保存學(xué)位論 文的印刷本和電子版,并采用影印、縮印、掃描、數(shù)字化或其它手段保存或 匯編本學(xué)位論文;學(xué)校有權(quán)提供目錄檢索以及提供本學(xué)位論文全文或者部分 的閱覽服務(wù);學(xué)

4、校有權(quán)按有關(guān)規(guī)定向國(guó)家有關(guān)部門或者機(jī)構(gòu)送交論文的復(fù)印 件和電子版,允許論文被查閱和借閱。本人授權(quán)大學(xué)可以將本學(xué)位論文的全 部或部分內(nèi)容編入學(xué)校有關(guān)數(shù)據(jù)庫和收錄到中國(guó)學(xué)位論文全文數(shù)據(jù)庫進(jìn) 行信息服務(wù)。在不以贏利為目的的前提下,學(xué)??梢赃m當(dāng)復(fù)制論文的部分或 全部?jī)?nèi)容用于學(xué)術(shù)活動(dòng)。論文作者簽名:日期:指導(dǎo)教師簽名:日期:課程設(shè)計(jì)說明書設(shè)計(jì)題目:基于java的聊天系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting 、騰訊QQ、MSN-Message等等。該

5、系統(tǒng)開發(fā)主要包括一個(gè)網(wǎng)絡(luò)聊天服務(wù)器程序和一個(gè)網(wǎng)絡(luò)聊天客戶程序兩個(gè)方面。前者通過Socket 套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務(wù)器建立連接,來進(jìn)行客戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過直接繼承Thread 類來建立多線程。開發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí), 如 TCP/IP 協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式) 、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過分析這些情況,該聊天工具

6、采用Eclipse 為基本開發(fā)環(huán)境和java 語言進(jìn)行編寫,首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)關(guān)鍵詞:即時(shí)通訊系統(tǒng)B/S C/S MySQL Socket Swing第 1 章 引言 11.1 開發(fā)背景11.2 開發(fā)目的和意義1.1.3 論文研究?jī)?nèi)容2.第 2 章 即時(shí)通訊系統(tǒng)的相關(guān)研究32.1 C/S 開發(fā)模式3.2.2 B/S 開發(fā)模式3.2.3 即時(shí)通訊原理4.2.4 Java web 、 Struts2 、 AJAX、 JavaScript 應(yīng)用技術(shù)4.2.5 MySQL 數(shù)據(jù)庫應(yīng)用技術(shù)4.2.6 Socket 通信技術(shù)4.2.7

7、 開發(fā)環(huán)境的搭建5.第3 章系統(tǒng)分析63.1 系統(tǒng)基本功能描述6.3.2 可行性分析63.3 系統(tǒng)需求分析 功能分析7.第4 章系統(tǒng)設(shè)計(jì)94.1 數(shù)據(jù)庫設(shè)計(jì)94.2 系統(tǒng)模塊設(shè)計(jì).1 聊天系統(tǒng)工作原理圖.2 系統(tǒng)功能模塊圖:.3 系統(tǒng)用例圖:.4 活動(dòng)圖: 系統(tǒng)類設(shè)計(jì).1 Message類的設(shè)計(jì) 截圖類的設(shè)計(jì).3 聊天記錄類的設(shè)計(jì).4 服務(wù)器線程類設(shè)計(jì)1.7.第 5 章 系統(tǒng)實(shí)現(xiàn)185.1 實(shí)現(xiàn)概況 注冊(cè)模塊.1 流程圖 1

8、. 關(guān)鍵代碼 登錄模塊.1 流程圖 .2 關(guān)鍵代碼 聊天模塊.1 流程圖 .2 關(guān)鍵代碼 文件模塊.1 流程圖 .2 關(guān)鍵代碼 用戶管理模塊.1 流程圖 .2 關(guān)鍵代碼 其他功能的實(shí)現(xiàn).1 截圖功能的實(shí)現(xiàn).2 聊天記錄功能的實(shí)現(xiàn).3 服務(wù)端線程的實(shí)現(xiàn) 用戶界面的設(shè)計(jì)3.8.結(jié)語 42第1章引言1.1 開發(fā)背景隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)

9、作為一種重要的信息交流工具,受到越來 越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有 Netmeeting、騰訊QQ MSN-Messager等等。無論是個(gè)人還是企業(yè)等組織機(jī)構(gòu),對(duì)溝通的 需求也在不斷發(fā)展,傳統(tǒng)的電話、傳真、郵件等溝通方式顯然已無法滿足當(dāng)今人們工作和 生活溝通的需要。隨著軟件、網(wǎng)絡(luò)和通訊三大現(xiàn)代信息技術(shù)的發(fā)展,在溝通、協(xié)作方面有 著更多方便、快捷、實(shí)時(shí)等優(yōu)勢(shì)的即時(shí)通訊,成為繼電話、 E-Mail之后又一個(gè)完全融入每 個(gè)人生活的互聯(lián)網(wǎng)工具。Java是一個(gè)由Sun公司開發(fā)而成的新一代編程語言。使用它可在各式各樣不同種機(jī)器、 不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開發(fā)

10、軟件。不論你使用的是哪一種WWW(覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要 WWWI覽器上面注明了 “支持Java”,你就可以看到生動(dòng)的主 頁。Java正在逐步成為Internet應(yīng)用的主要開發(fā)語言。它徹底改變了應(yīng)用軟件的開發(fā)模 式,帶來了自PC機(jī)以來又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。1.2 開發(fā)目的和意義網(wǎng)絡(luò)通信在當(dāng)今信息社會(huì)中起著不可或缺的作用,人們可以利用網(wǎng)絡(luò)通信技術(shù)進(jìn)行即 時(shí)的信息 交流。比如說QQM大工具,它就是利用網(wǎng)絡(luò)通信技術(shù)開發(fā)的一款眾所周知的網(wǎng) 絡(luò)聊天工具。通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的范疇,隨著企業(yè) 即時(shí)通訊工具的出現(xiàn),即時(shí)信息在網(wǎng)絡(luò)營(yíng)

11、銷中將發(fā)揮更大的作用。目前,信息交流是互聯(lián)網(wǎng)提供的主要內(nèi)容,網(wǎng)絡(luò)通信系統(tǒng)有多種實(shí)現(xiàn)方式,類似ICQ屬于一種點(diǎn)對(duì)點(diǎn)的聊天系統(tǒng);還有一種是基于Socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登錄統(tǒng)一的聊天服務(wù)器。考慮到要可以在局域網(wǎng)中應(yīng)用,本系統(tǒng)使用的是第二種方法, 經(jīng)過設(shè)置,在局域網(wǎng)或internet上都可以使用。1.3 研究?jī)?nèi)容 1、即時(shí)通訊原理首先驗(yàn)證登陸,如果成功,則建立與服務(wù)端的 socket連接,服務(wù)端新開啟一個(gè)線程 專門為它服務(wù),將打包好的Message發(fā)送給服務(wù)器端,服務(wù)器端根據(jù)Message里面的信息, 再將信息轉(zhuǎn)發(fā)給其他用戶。一個(gè)標(biāo)準(zhǔn)的 C/S模式。2、Swing 技術(shù)Swing

12、是一個(gè)用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包。 它以抽象窗口工具包 (AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。用來實(shí)現(xiàn)客服端的界 面設(shè)計(jì)。3、Java web和 struts2 技術(shù)采用B/S的結(jié)構(gòu)實(shí)現(xiàn)服務(wù)器端,對(duì)用戶和在線用戶進(jìn)行增刪改查,和踢用戶下線, 以及開啟服務(wù)器和關(guān)閉服務(wù)器。4、系統(tǒng)的構(gòu)建客戶端采用C/S結(jié)構(gòu),管理端采用B/S的結(jié)構(gòu),用Tomcat作為服務(wù)器,MySQL 作為數(shù)據(jù)庫,還使用到了 WindowBuilder開源框架進(jìn)行界面開發(fā)。25第2章 即時(shí)通訊系統(tǒng)的相關(guān)研究2.1 C/S開發(fā)模式C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端 PC的處理能力,很多工作可

13、以在客戶端處理后 再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè):而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具 有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門的設(shè)計(jì)來處理分布 式的數(shù)據(jù)??蛻舳诵枰惭b專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺(tái)電腦出 問題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶 機(jī)需要重新安裝,具維護(hù)和升級(jí)成本非常高。(大多數(shù)沒法自動(dòng)升級(jí)而需要人工升級(jí))對(duì)客戶端的操作系統(tǒng)一般也會(huì)有限制。 可能適應(yīng)于 Windows 98,但不能用于 Windows 2000或Wind

14、ows XP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說Linux、Unix等。2.2 B/S開發(fā)模式B/S結(jié)構(gòu)(Browser/Server結(jié)構(gòu))結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過 WWW瀏覽器來實(shí)現(xiàn),極少部分事務(wù)邏輯在前端 (Browser)實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn),形成所謂三層 3-tier結(jié) 構(gòu)。這樣就大大簡(jiǎn)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了 用戶的總體成本(TCO)。以目前的技術(shù)看,局域網(wǎng)建立 B/S結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用,并通過Inter

15、net/Intranet模式下數(shù) 據(jù)庫應(yīng)用,相對(duì)易于把握、成本也是較低的。它是一次性到位的開發(fā),能實(shí)現(xiàn)不同的人員, 從不同的地點(diǎn),以不同的接入方式(比如 LAN, WAN, Internet/Intranet等)訪問和操作共同 的數(shù)據(jù)庫;它能有效地保護(hù)數(shù)據(jù)平臺(tái)和管理訪問權(quán)限,服務(wù)器數(shù)據(jù)庫也很安全。特別是在JAVA這樣的跨平臺(tái)語言出現(xiàn)之后,B/S架構(gòu)管理軟件更是方便、速度快、 效果優(yōu)。2.3 即時(shí)通訊原理登陸進(jìn)入聊天軟件后,即顯示出好友列表,在線的顯示亮頭像,不在線的顯示灰色 頭像。雙擊好友頭像即會(huì)顯示出聊天界面。在聊天頁面上,有發(fā)送文字,發(fā)送截圖,和發(fā)送文件的功能按鈕。點(diǎn)擊“發(fā)送”按鈕之后,程

16、序就會(huì)把輸入的信息的種類,信息內(nèi)容、本人的 ID號(hào)、 對(duì)方的ID號(hào)以及當(dāng)前的時(shí)間等內(nèi)容打包成一個(gè) Message對(duì)象通過Socket發(fā)送到服務(wù)器端c 服務(wù)器接收到Message之后,按照協(xié)議進(jìn)行解析和轉(zhuǎn)發(fā)。這樣,雙方的即時(shí)通訊就實(shí) 現(xiàn)了。2.4 Java Web、struts2、Ajax、javascript 應(yīng)用技術(shù)通過這些技術(shù),實(shí)現(xiàn)服務(wù)器的后臺(tái)管理端,對(duì)用戶和在線用戶進(jìn)行增刪改查,和踢用 戶下線,以及開啟服務(wù)器和關(guān)閉服務(wù)器。以及用戶的注冊(cè),前臺(tái)驗(yàn)證等等2.5 MySQL數(shù)據(jù)庫應(yīng)用技術(shù)使用MySQL存儲(chǔ)用戶信息,采用JDBC技術(shù)對(duì)其進(jìn)行增刪改查。2.6 Socket 通信技術(shù)Socket程序

17、的工作過程:1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連 接通道。2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通信。3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。具體如下:服務(wù)器圖2-1 socket 通信2.7 開發(fā)環(huán)境的搭建客戶端采用C/S結(jié)構(gòu),管理端采用B/S的結(jié)構(gòu),用Tomcat作為服務(wù)器,MySQL作為 數(shù)據(jù)庫,還使用到了 WindowBuilder開源框架進(jìn)行界面開發(fā)。第3章系統(tǒng)分析3.1 系統(tǒng)基本功能描述客戶端可以實(shí)現(xiàn)注冊(cè),即時(shí)聊天,相互之間收發(fā)文件,發(fā)送截圖,查看歷史聊天記錄 等功能。收發(fā)消息時(shí),可以實(shí)現(xiàn)離線接收。服務(wù)器端應(yīng)當(dāng)建立一個(gè)Ser

18、verSocket ,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開 連接(包括判斷沒有響應(yīng)的連接超時(shí))。服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的 信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。在后臺(tái)管理系統(tǒng),可以到對(duì)用戶進(jìn)行增刪改查,查看在線用戶,和踢用戶下線3.2 可行性分析本系統(tǒng)的可行性分析包括以下幾個(gè)方面的內(nèi)容:(1)技術(shù)可行性使用Swing和socket技術(shù),可以很輕松地開發(fā)出實(shí)用、簡(jiǎn)便、高效的基于網(wǎng)絡(luò)的即 時(shí)通訊系統(tǒng)。因此技術(shù)上是可以實(shí)現(xiàn)的。(2)經(jīng)濟(jì)可行性計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)普及,因此在網(wǎng)絡(luò)設(shè)備上不需要進(jìn)行大的投入。本系統(tǒng)需要一個(gè) MySQ激據(jù)庫服務(wù)器,由于并發(fā)使用人數(shù)比較少,tomc

19、at可以作為web服務(wù)器,所以成本 很低。(3)操作可行性只要一臺(tái)以上計(jì)算機(jī)連接在同一個(gè)局域網(wǎng)內(nèi),本系統(tǒng)就可以安裝使用,所以操作上完全不存在問題。如果要實(shí)現(xiàn)internet上通訊,只需要將服務(wù)器端運(yùn)行在一個(gè)有固定IP的公網(wǎng)上就可以。綜上所述,即時(shí)Java即時(shí)通訊系統(tǒng)是可行的。3.3 系統(tǒng)需求分析3.3.1 功能分析本系統(tǒng)要實(shí)現(xiàn)的功能如下:1)注冊(cè)服務(wù)器收到用戶的注冊(cè)請(qǐng)求,便開始接受客戶傳遞的信息,諸如客戶的呢稱,性別, 籍貫,個(gè)人資料等,接受完畢后,便通過 JDBC與后臺(tái)數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記 錄,如果成功,便向客戶返回其號(hào)碼。客戶收到服務(wù)器返回的信息后,便打開窗口登陸。2)登陸在客戶

20、端,用戶輸入其號(hào)碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄, 服務(wù)器收到后,開始通過JDBC讀取數(shù)據(jù)庫,然后與用戶輸入的信息進(jìn)行比對(duì),如果成功, 便打開主程序窗口。然后客戶向服務(wù)器請(qǐng)求讀取好友名單,服務(wù)器收到該請(qǐng)求,從數(shù)據(jù)庫 中取出好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。3)聊天客戶端首先發(fā)送消息到服務(wù)器端,服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。例 如服務(wù)器接收到一個(gè) A發(fā)給B的消息,先判斷B是否已經(jīng)在線,如果在線就將信息發(fā)送 過去。如果B不在線則把信息儲(chǔ)存在服務(wù)器,等B上線了在發(fā)送給他。B接收到A發(fā)來的 信息,如果是未建立對(duì)話窗口,則自動(dòng)打開顯示。4)

21、發(fā)送截圖客戶端A點(diǎn)擊截圖按鈕,將屏幕鎖定,截取圖片,將圖片儲(chǔ)存在byte口數(shù)組中發(fā)送到服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。B接收到A發(fā)來的截圖信息,會(huì)根據(jù)byte構(gòu)造圖片,將圖片顯示出來。同樣,如果是未建立對(duì)話窗口,則自動(dòng)打開顯 示。5)發(fā)送文件客戶端A點(diǎn)擊發(fā)送文件按鍵,從本地選擇文件,將文件在 byte口數(shù)組中分批次發(fā)送到 服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。 B接收到A發(fā)來的文件信息, 會(huì)根據(jù)文件發(fā)送的狀態(tài)和byte口構(gòu)造文件。6)日志客戶端發(fā)送和接收到的信息都會(huì)儲(chǔ)存在文本文檔中。默認(rèn)儲(chǔ)存在C盤下面,會(huì)以用戶的登錄賬號(hào)為名。7)對(duì)用戶的操作管理員通過B/S的

22、系統(tǒng)對(duì)用戶進(jìn)行增加,修改,刪除,查找等操作,對(duì)系統(tǒng)進(jìn)行維護(hù)。8)在線用戶的操作管理員通過B/S的系統(tǒng)對(duì)在線用戶操作,可以踢用戶下線。第4章系統(tǒng)設(shè)計(jì)4.1數(shù)據(jù)庫設(shè)計(jì)本系統(tǒng)中所涉及的主要實(shí)體及其屬性有:用戶(用戶賬號(hào),用戶名,密碼,個(gè)性簽名,頭像 ID,年齡,性別)E-R模型如圖所示。圖4-1系統(tǒng)實(shí)體及其屬性表 4-1 User字段名數(shù)據(jù)類型字段說明鍵引用備注accountint(6)IDPK主鍵(自動(dòng)土)namevarchar(20)用戶名稱非空passwordvarchar(20)用戶密碼非空signatureVarchar(255)簽名profileIDint(2)頭像IDageint(3)

23、年齡sexsex char(2)性別4.2系統(tǒng)模塊設(shè)計(jì)4.2.1聊天系統(tǒng)工作原理圖圖4-2系統(tǒng)工作原理4.2.2系統(tǒng)功能模塊圖:圖4-3系統(tǒng)模塊4.2.3系統(tǒng)用例圖:普通用戶的用例圖:圖4-4普通用戶用例圖后臺(tái)管理員的用例圖:圖4-5后臺(tái)用戶用例圖4.2.4活動(dòng)圖:1)用戶登陸活動(dòng)圖首先填寫登陸信息,提交以后服務(wù)器會(huì)對(duì)用戶名和密碼進(jìn)行驗(yàn)證。如果不正確,返回 一個(gè)提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再 檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。2)發(fā)送消息活動(dòng)圖短消息發(fā)送以后,服務(wù)器端對(duì)應(yīng)的監(jiān)聽線程會(huì)接收到一個(gè)數(shù)據(jù)包。此包中包含接收者 的信息,如果接收者

24、在線,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)到接收者。如果不在線,存在服務(wù)器端,等它 上線在發(fā)送。4.3系統(tǒng)類設(shè)計(jì)4.3.1 Message 類的設(shè)計(jì):客戶端和服務(wù)器端通信時(shí),發(fā)送的都是 Message類的對(duì)象,因此Message類的設(shè)計(jì)很 重要。表 4-2 Message屬性名作用private Integer msgType;信息類型private Stringcontent ;信息的文本內(nèi)容private Integer senderAccount;發(fā)送者accountprivate Integer receiverAccount;接收者accountprivate String time;發(fā)送時(shí)間privat

25、e User myself ;自己本身對(duì)象,用與好友列表頭private List<User> friends;好友列表privatetransientImage img ;圖片對(duì)象(不傳送)privatebyteimageByte ;圖片的內(nèi)容privateStringfileName ;文件名稱privatebytefileByte ;文件的長(zhǎng)度private為單位intlength ; /文件長(zhǎng)度,以 KB文件的內(nèi)容privateintstate ;文件傳輸?shù)臓顟B(tài):0是不接受文件,1是接受文件,2請(qǐng)求發(fā)送 文件,3文件傳輸中,4文件傳送完成private Integer ms

26、gType消息的類型有這么幾種:public interface MessageType Integer message_succeed =1; / 表明是登陸成功Integermessage_login_fail =2; / 表明登錄失敗Integermessage_comm_mes =3; / 普通信息包Integermessage_get_onLineFriend=4; / 要求在線好友的包Integermessage_ret_onLineFriend=5; / 返回在線好友的包Integer message_offline =6; / 下線通知包Integer message_img

27、=7; / 圖片包Integer message_file =8; / 文件包4.3.2 截圖類的設(shè)計(jì):截圖類的實(shí)現(xiàn)類為:class Screenshot extends JFrame implements MouseListener,MouseMotionListeneiaJFrame+paint(in Graphics g)MouseListenerScreenshot監(jiān)聽各種鼠標(biāo)動(dòng)作MouseMotionListener+mouseDragged(in MouseEvent e)+mouseClicked(in MouseEvent e)O圖 4-9 MessageRecord 類+mo

28、usePressed(in MouseEvente)+mouseReleased(in MouseEvent e)+paint(in Graphics g)圖 4-8 Screenshots截圖類的核心是 JDK 中:Robot 類中 createScreenCapture (Rectangle screenRect) 創(chuàng)建 包含從屏幕中讀取的像素的圖像。先用截取全部屏幕的圖片,然后顯示出來,覆蓋住整個(gè)屏幕。然后監(jiān)聽鼠標(biāo)事件,再用 createScreenCapture( Rectangle screenRect) 方法截圖。雙擊表示截圖成功,右鍵表示取消截圖。4.3.3 聊天記錄類的設(shè)計(jì):記

29、錄日志的功能被封裝在 MessageRecord類中,所在包為com.im.client.record在發(fā)送或接受到數(shù)據(jù)后,將其寫入日志文件如果是圖片則顯示出,發(fā)送時(shí)間和圖片大小。如果是文件則顯示出請(qǐng)求發(fā)送時(shí)間,同意接收時(shí)間,接收完成時(shí)間,和文件大小。日志文件格式如下:100000.txt -寫字板交怦里編相 查看 插入© 格式電)幫助如0 4 m昌 m 金迪g遜20M-05-22 13:43:35 發(fā)送消,&給 你好2011-05-22 13:43:51 收到消息來自 hello2011-05-22 13:43:57 發(fā)送四片給圖片大小;TS63tyte1D0001;100

30、001;1000C1;2011-05-22 13:44:35請(qǐng)求發(fā)送文件給文件名;閱讀材料.rar文件大?。籗421EB ZQ11-05-22 口消4:301口口口田同意接受文件2(H 1一口5-22 t3:44:52 發(fā)送給 1 口口皿 1 的文件100001;網(wǎng)讀材料,nr:閱讀材料發(fā)送完成2011-06-22 13:45:04 收到消息來自100001 :好了2011-05-22 13;45;07炭送消息給1加加:1;穌圖4-10記錄文件4.3.4 服務(wù)端線程的設(shè)計(jì):服務(wù)器端的核心是對(duì)應(yīng)客戶的線程,每個(gè) socket對(duì)應(yīng)一個(gè)線程,也就是每一個(gè)客 戶端都在服務(wù)器端有一個(gè)相應(yīng)的線程。它負(fù)責(zé)轉(zhuǎn)

31、發(fā)客戶端發(fā)來的消息。線程類為 ClientThread:表 4-3 ClientThread 類屬性名public void notifyOnline()publicvoidrun()publicvoidnotifyOffline()publicvoidsend(Object o)public Object receive。作用通知其他線程,自己上線了,讓客戶方更新頭像線程的主題,轉(zhuǎn)發(fā)消息通知其他線程,自己下線了,讓客戶方更新頭像發(fā)送消息接收消息第5章系統(tǒng)實(shí)現(xiàn)5.1 實(shí)現(xiàn)概況本系統(tǒng)可分為登錄、聊天、文件、用戶管理和注冊(cè)五個(gè)功能模塊?!暗卿洝蹦K為用戶提供登錄界面,并在用戶登錄顯示好友列表;“聊

32、天”模塊實(shí)現(xiàn)用戶的即時(shí)傳送信息,即多用戶即時(shí)聊天,可以發(fā)送文字或者截圖;“文件”模塊主要實(shí)現(xiàn)一用戶向另一用戶發(fā)送文件,對(duì)方可以選擇接受或者拒絕。聊天記錄會(huì)以文本文檔格式保存?!坝脩艄芾怼蹦K即管理員對(duì)用戶進(jìn)行增刪改查,和踢用戶下線的操作。下面詳細(xì)介紹各個(gè)模塊的具體實(shí)現(xiàn)。5.2 注冊(cè)模塊5.2.1 流程圖圖5-1用戶注冊(cè)流程圖5.2.2關(guān)鍵代碼注冊(cè)的前臺(tái)頁面是showDetail.jsp,后臺(tái)是 UserAction 類,UserAction 類中有方法:user );public String saveOrUpdate()us .saveOrUpdate(return "refres

33、h"saveOrUpdate 則是用到了 Userservice 里面的方法:public void saveOrUpdate(User u)System. out .println("u.getAccount(尸"+u.getAccount();if (u.getAccount(尸null )ud .save(u);else ud .update(u);DAO類中的方法:public void save(User u)conn =getConnection();try ps=conn .prepareStatement( SAVE);ps .setString(

34、1, u.getName();ps .setString(2, u.getPassword();ps .setString(3, u.getSignature();ps .setInt(4, 1);ps .setInt(5, u.getAge();ps .setString(6, u.getSex();ps .execute。; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); finally close();網(wǎng)頁上顯示用戶的account您的賬號(hào)為.100032請(qǐng)妥善保管圖5-2用戶注冊(cè)信

35、息5.3登錄模塊5.3.1 流程圖開始結(jié)束圖5-3 登錄流程圖5.3.2關(guān)鍵代碼1)客戶端代碼extends JFrame這個(gè)類的監(jiān)聽事件中。登登錄事件是定義在class IMClientLogin錄成功后,立即向服務(wù)器請(qǐng)求自己的好友列表。/登錄事件login .addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /cus=new IMClientUserServer();/System.out.println(cus.getServer();User u= new User();u

36、.setAccount(Integer.parseInt ( account .getText().trim();u.setPassword( new String( passwordField .getPassword(); /登陸成功if (cus .checkLogin(u)/向服務(wù)器發(fā)送數(shù)據(jù)包,請(qǐng)求在線人得信息ClientConnToServerThread t=Manager.THREAD;Message m= new Message。; m.setMsgType(MessageType. message_get_onLineFriend ); m.setSenderAccount(

37、u.getAccount(); try t.send(m); catch (IOException e1) e1.printStackTrace(); dispose。; elseJOptionPane. showMessageDialog (null ,"用戶名或密碼錯(cuò)誤 ","錯(cuò)誤" JOptionPane. ERROR_MESSAGE); );登錄邏輯是在public class IMClientUserServer 里面,認(rèn)證成功者就會(huì)新建一個(gè)線 程,專門負(fù)責(zé)接收服務(wù)器端發(fā)來的信息 class ClientConnToServerThread e

38、xtends Thread public boolean checkLogin(Object o) boolean success= false ; Message msg=(Message) server .sendLoginInfo(o);/System.out.println(msg.getMsgType();/System.out.println(MessageType.message succeed);if (msg.getMsgType().intValue(尸MessageType.message_succeed .intValue()success= true ; User u

39、=(User) o;/將好友列表放到管理器中,進(jìn)行上下線操作IMFriendList fl= new IMFriendList(msg.getMyself(),msg.getFriends() Manager. FRIEND_LIST =fl;/開啟客戶線程,接收服務(wù)器端的信息connThread = new ClientConnToServerThread(server .getSocket();connThread .setSocket( server .getSocket(); connThread .start(); connThread .setName(u.getAccount()

40、+"");Manager. THREAD=connThread ; return success; 客戶端通過public class IMClientServer 類與服務(wù)器通信public Object sendLoginInfo(Object o) try ObjectOutputStream oos =newObjectOutputStream( socket .getOutputStream();oos.writeObject(o);ObjectInputStream ois =newObjectInputStream( socket .getInputStrea

41、m();Message ms = (Message) ois.readObject();return ms; catch (IOException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); return null ;這樣按照MVC勺模式設(shè)計(jì),減小的系統(tǒng)耦合。2)服務(wù)端代碼服務(wù)器端接收用戶驗(yàn)證信息的代碼被寫在了一個(gè)線程public class ServerThreadextends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請(qǐng)求,建 立socke旌接,也不會(huì)

42、堵塞在主線程當(dāng)中。從數(shù)據(jù)庫中搜索用戶,看是否存在public boolean checkLogin(User u)User user= ud .findById(u.getAccount();i f (user!= null )return user.getPassword().equals(u.getPassword();r eturn false ;如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)器上專門開啟 一個(gè)針對(duì)當(dāng)前用戶的線程,并且吧線程放入管理類中,便于日后的管理。if (checkLogin(u) /返回一個(gè)成功登陸的信息報(bào)User myself=ud .findB

43、yId(u.getAccount();m.setMsgType(MessageType. message_succeed );m.setMyself(myself);m.setFriends( ud .findAll(); / 好友列表oos.writeObject(m);/為用戶單獨(dú)創(chuàng)建線程ClientThread t=new ClientThread(s);27/查看是否有離線消息LinkedList<Message>list=OffLineMsgManager.get (u.getAccount();if (list!= null )for (Message msg:list

44、)t.send(msg);list.clear();/開啟線程t.start();t.setName(u.getAccount()+"");/把用戶線程放入管理類中ClientThreadManager./通知其他的用戶t.notifyOnline();System. out .println( else m.setMsgType(3); oos.writeObject(m);System. out .println( / 關(guān)閉 Socket s.close();addClientThread成功");失敗");(u.getAccount(), t);5

45、.4.1流程圖輸入數(shù)據(jù)發(fā)送數(shù)據(jù)結(jié)束圖5-4聊天流程圖5.4.2關(guān)鍵代碼1)客服端代碼 發(fā)送文字信息:客戶端發(fā)送和顯示信息的代碼被封裝在了IMChat extends JFrame implementsActionListener類中,其中發(fā)送文字信息的代碼/點(diǎn)擊的如果是發(fā)送buttonif (e.getSource() =confirmButton ) Message m=(Message) makePackage(MessageType.message_comm_mes , null );/發(fā)送sendMessage(m);/在自己的Ouput上顯示showMessage(m,Color.B

46、LACK);/清空輸入input_textArea .setText( "");當(dāng)用戶點(diǎn)擊發(fā)送按鈕后,先把先把信息顯示在自己的聊天窗口上,后方發(fā)送信息,自 己發(fā)送的信息和接收到的信息用不同的顏色顯示。顯示文字信息,顯示在JtextPane控件中SimpleAttributeSet attrset =new SimpleAttributeSet();StyleConstants. setForeground (attrset,c); Document docs = output_pane .getDocument(); / 利用 getDocument() 方法取得 JTex

47、tPane 的 Document / 一般信息 if (m.getMsgType().intValue(尸MessageType.message_comm_mes )String str=m.getSenderAccount() +" " +m.getTime()+ "n" +""+m.getContent()+ "n" try docs.insertString(docs.getLength(), str, attrset); /設(shè)置光標(biāo)到末尾 output_pane .setCaretPosition(docs

48、.getLength(); catch (BadLocationException e) e.printStackTrace(); 發(fā)送圖片信息:在發(fā)送圖片信息的時(shí)候,先將圖片轉(zhuǎn)換成為byte口數(shù)組,包裝在信息包種發(fā)送出去,接收到圖片信息時(shí),從byte口數(shù)組構(gòu)建圖片,顯示出來。圖片和byte口之間相互轉(zhuǎn)換的關(guān)鍵代碼如下:/將image轉(zhuǎn)換成byte口 public byte 口 imageToBytes(Image img)ByteArrayOutputStream bos=new ByteArrayOutputStream();try ImageIO. write (RenderedImag

49、e) img,"jpg" , bos); catch (IOException e) e.printStackTrace(); return bos.toByteArray(); / 將 byte 轉(zhuǎn)換成 imagepublic Image bytesToImage( byte 口 b)try return ImagelO. read (new ByteArraylnputStream(b); catch (lOException e) e.printStackTrace(); return null ;在JtextPane中顯示圖片的代碼:if (m.getMsgType

50、().intValue()=MessageType.message_img )/圖片信息"'n"String str=m.getSenderAccount() +" " +m.getTime()+try /顯示發(fā)送人 和時(shí)間docs.insertString(docs.getLength(), str, attrset);/設(shè)置光標(biāo)到末尾output_pane .setCaretPosition(docs.getLength();output_pane .insertIcon( new ImageIcon(m.getImg();docs.inse

51、rtString(docs.getLength(),"n" , attrset);/設(shè)置光標(biāo)到末尾output_pane .setCaretPosition(docs.getLength(); catch (BadLocationException e) e.printStackTrace();在客戶端顯示截圖示例:架三(IMOOli盤百福忙銀忙lOOOOC 2D11-05-OB 21:27:31A發(fā)送關(guān)閉圖5-5聊天截圖2)服務(wù)端代碼服務(wù)端接收到客戶端的信息后,只需要根據(jù)他的接收人,進(jìn)行轉(zhuǎn)發(fā)就可以。關(guān)鍵代碼如下:Message m = (Message) receive。

52、;/如果是普通信息if (m.getMsgType() = MessageType.message_comm_mes .intValue() System. out .println(m.getSenderAccount() +"send to" +m.getReceiverAccount() +"at" + m.getTime();Integer receiverAccount = m.getReceiverAccount();ClientThread t =ClientThreadManager.ifgetClientThread (receiver

53、Account);(t = null ) /不在線就暫時(shí)存儲(chǔ)在服務(wù)器上OffLineMsgManager.elseputSingle (receiverAccount, m);29t.send(m);355.5文件模塊5.5.1 流程圖圖5-6發(fā)送文件流程圖5.5.2關(guān)鍵代碼1)客戶端代碼讓用戶在客戶端采用JfileChooser來瀏覽本地文件,點(diǎn)擊瀏覽按鈕后,會(huì)彈出對(duì)話框, 選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。關(guān)鍵代碼如下:Overridepublic void mouseClicked(MouseEvent e) fileDialog.setDialogTitle("選擇文件");fileDialog.showOpenDialog(IMChat. this );/只能選中文件fileDialog .setFileSelectionMode(JFi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論