

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)設(shè)計(論文)</p><p> 題 目 </p><p> QQ : </p><p> 年 級 專 業(yè) </p><p> 班 級 學(xué) 號
2、 </p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師 職 稱 </p><p> 論文提交日期 </p><p><b> 摘 要</b></p>&l
3、t;p> 隨著網(wǎng)絡(luò)普及和上網(wǎng)人數(shù)的大增,進(jìn)行信息交流已經(jīng)成為人們?nèi)粘I钪胁豢扇鄙俚囊徊糠?,目前比較流行的聊天軟件如:Facebook、騰訊QQ、移動Fetion、MSN-Messager,等等,相比于手機(jī)話費的昂貴,手機(jī)短信的繁瑣等,網(wǎng)絡(luò)通信操作簡單,更重要的是給廣大用戶提供了一個廣闊的免費的交留平臺,讓原本不認(rèn)識的人也可以通過聊天軟件成為朋友,讓原本就熟悉的朋友們有更多的時間更多的機(jī)會交流,給我們的生活和工作帶來了很多便利,
4、因此受到越來越多的網(wǎng)民的青睞。該系統(tǒng)開發(fā)主要包括兩個方面,一個網(wǎng)絡(luò)聊天服務(wù)器端和一個網(wǎng)絡(luò)聊天客戶端。使用了最新的java2標(biāo)準(zhǔn)Swing組建,開發(fā)出簡潔美觀和布局合理的用戶服務(wù)器界面;前者通過Socket套接字建立服務(wù)器,使服務(wù)器能夠讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務(wù)器建立連接,接收客戶端之間的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,采用多線程多任務(wù)的設(shè)計思想。開發(fā)中利用了計算機(jī)網(wǎng)絡(luò)編程的基本理論知識,如TCP
5、/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計方法等。在網(wǎng)絡(luò)編程中對信息的讀取、發(fā)送,是利用流來實現(xiàn)信</p><p> 【關(guān)鍵詞】即時通訊系統(tǒng) B/S multithreading C/S MySQL Socket Swing </p><p><b> ABSTRACT</b></p><p&g
6、t; Along with the network popularization and the number of Internet users growth, the exchange of information in daily life has become an indispensable part of the relatively popular chat software such as: Facebook, ten
7、cent QQ, mobile Fetion, MSN-Messager, etc, when compared to the mobile phone calls of expensive, mobile phone short message such as the red tape, network communication operation simple, more important is to the general u
8、ser provides a broad free/leave platform, let originally not kno</p><p> 【Key words】Instant Messaging System B/S C/S MySQL Socket Swing</p><p><b> 目 錄</b></p><p&g
9、t;<b> 前言1</b></p><p> 第一章 聊天系統(tǒng)概述1</p><p> 第一節(jié) 開發(fā)背景1</p><p> 第二節(jié) 開發(fā)目的和意義1</p><p> 第三節(jié) 論文研究內(nèi)容2</p><p> 第四節(jié) 即時通訊系統(tǒng)的相關(guān)研究3</p>&
10、lt;p> 一 、C/S開發(fā)模式3</p><p> 二 、B/S開發(fā)模式3</p><p> 三 、即時通訊原理4</p><p> 四 、Java web 、Struts2、AJAX、JavaScript應(yīng)用技術(shù)4</p><p> 五 、MySQL數(shù)據(jù)庫應(yīng)用技術(shù)4</p><p> 六
11、 、socket通信技術(shù)4</p><p> 七 、開發(fā)環(huán)境的搭建5</p><p> 第三章 系統(tǒng)分析6</p><p> 第一節(jié) 系統(tǒng)基本功能描述6</p><p> 第二節(jié) 可行性分析6</p><p> 第三節(jié) 系統(tǒng)需求分析7</p><p><b>
12、一 、功能分析7</b></p><p> 第四章 系統(tǒng)設(shè)計9</p><p> 第一節(jié) 數(shù)據(jù)庫設(shè)計9</p><p> 第二節(jié) 系統(tǒng)模塊設(shè)計10</p><p> 一 、聊天系統(tǒng)工作原理圖10</p><p> 二 、系統(tǒng)功能模塊圖:11</p><p>
13、三 、系統(tǒng)用例圖:11</p><p> 四 、活動圖:12</p><p> 第三節(jié) 系統(tǒng)類設(shè)計14</p><p> 一 、Message類的設(shè)計14</p><p> 二 、截圖類的設(shè)計15</p><p> 三 、聊天記錄類的設(shè)計16</p><p> 四 、服務(wù)
14、器線程類設(shè)計17</p><p> 第五章 系統(tǒng)實現(xiàn)18</p><p> 第一節(jié) 實現(xiàn)概況18</p><p> 第二節(jié) 注冊模塊18</p><p><b> 一 、流程圖18</b></p><p> 二 、關(guān)鍵代碼18</p><p> 第
15、三節(jié) 登錄模塊20</p><p><b> 一 、流程圖20</b></p><p> 二 、關(guān)鍵代碼20</p><p> 第四節(jié) 聊天模塊24</p><p><b> 一 、流程圖24</b></p><p> 二 、關(guān)鍵代碼24</p&g
16、t;<p> 第五節(jié) 文件模塊28</p><p><b> 一 、流程圖28</b></p><p> 二 、關(guān)鍵代碼28</p><p> 第六節(jié) 用戶管理模塊33</p><p><b> 一 、流程圖33</b></p><p>
17、二 、關(guān)鍵代碼33</p><p> 第七節(jié) 其他功能的實現(xiàn)36</p><p> 一 、截圖功能的實現(xiàn)36</p><p> 二 、聊天記錄功能的實現(xiàn)37</p><p> 三 、服務(wù)端線程的實現(xiàn)38</p><p> 第八節(jié) 用戶界面的設(shè)計38</p><p>&l
18、t;b> 結(jié)論42</b></p><p><b> 致謝43</b></p><p><b> 參考文獻(xiàn)44</b></p><p> 附 錄 ………………………………………………………………………………………44</p><p> 一、英文原文………………
19、…………………………………………………………………44</p><p> 二、英文翻譯…………………………………………………………………………………51</p><p> 三、工程設(shè)計圖紙……………………………………………………………………………59</p><p> 四、源程序……………………………………………………………………………………60</p&
20、gt;<p> 五、其它………………………………………………………………………………………61</p><p><b> 前言</b></p><p> 隨著信息時代的到來,信息的交流也與日俱增,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,網(wǎng)絡(luò)通信軟件,正是由于它的安裝方便,只需要彼此之間都有連上網(wǎng)的電腦,安裝有相應(yīng)的客服端,就可以進(jìn)行信息交流;并
21、且可以實現(xiàn)與不同地區(qū),不同國家的人進(jìn)行交流目前,因此受到越來越多的網(wǎng)民的青睞。目前出現(xiàn)了很多非常不錯的聊天工具,其中特別受青少年追捧的且應(yīng)用比較廣泛的有Facebook、騰訊QQ、MSN-Messager等等。無論是個人還是企業(yè)等組織機(jī)構(gòu),對溝通的需求也在不斷發(fā)展,比如大量信息資料的傳輸,甚至視頻通信等,傳統(tǒng)的電話、傳真、郵件等溝通方式顯然已無法滿足當(dāng)今人們工作和生活溝通的需要。隨著軟件、網(wǎng)絡(luò)和通訊三大現(xiàn)代信息技術(shù)的發(fā)展,在溝通、協(xié)作方
22、面有著更多方便、快捷、實時、免費等優(yōu)勢的即時通訊,成為繼電話、E-Mail之后又一個完全融入每個人生活的互聯(lián)網(wǎng)工具。</p><p> Java它最初被命名為Oak,是一個由Sun公司開發(fā)而成的新一代編程語言。隨著互聯(lián)網(wǎng)的發(fā)展,Sun看到了Oak在計算機(jī)網(wǎng)絡(luò)上的廣闊應(yīng)用前景,于是改造了Oak,以“Java”的名稱正式發(fā)布。使用它可在各式各樣不同種機(jī)器、不同種操作平臺的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。不論你使用的是哪一種WW
23、W瀏覽器,哪一種計算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動的主頁。Java正在逐步成為Internet應(yīng)用的主要開發(fā)語言。它徹底改變了應(yīng)用軟件的開發(fā)模式,帶來了自PC機(jī)以來又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。</p><p> 第一章 基于java網(wǎng)絡(luò)聊天系統(tǒng)概述</p><p> 第一節(jié) 開發(fā)目的和意義</p>
24、<p> 網(wǎng)絡(luò)即時通訊(Instant Messenger,簡稱IM),是指能夠即時發(fā)送和接收互聯(lián)網(wǎng)消息等的業(yè)務(wù)。自1998年面世以來,特別是近幾年的迅速發(fā)展,通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的范疇,隨著企業(yè)即時通訊工具的出現(xiàn),即時通訊不再是一個單純的聊天工具,即時信息在網(wǎng)絡(luò)營銷中將發(fā)揮更大的作用。是一種終端連往即時通訊網(wǎng)絡(luò)的服務(wù)。即時通訊不同于e-mail在于它的交談是即時的。逐漸集成了電子郵件、博客、音
25、樂、電視、游戲和搜索等多種功能。比如我們熟知的QQ聊天工具,它就是利用網(wǎng)絡(luò)通信技術(shù)開發(fā)的一款眾所周知的網(wǎng)絡(luò)聊天工具。在為網(wǎng)民帶來方便的同時也為騰訊帶來了豐富的利潤。目前,信息交流是互聯(lián)網(wǎng)提供的主要內(nèi)容,網(wǎng)絡(luò)通信系統(tǒng)有多種實現(xiàn)方 式,類似ICQ屬于一種點對點的聊天系統(tǒng);還有一種是基于socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登錄統(tǒng)一的聊天服務(wù)器??紤]到要可以在局域網(wǎng)中應(yīng)用,本系統(tǒng)使用的是第二種方法,經(jīng)過設(shè)置,在局域網(wǎng)或internet
26、上都可以使用。</p><p> 第二節(jié) 主要研究技術(shù)</p><p><b> 一、 通訊連接原理</b></p><p> 在系統(tǒng)啟動時首先驗證登陸,如果成功,則建立與服務(wù)端的socket連接,客戶端與服務(wù)器是基于TCP/IP建立連接的,該協(xié)議是一種基于連接的協(xié)議,服務(wù)端新開啟一個線程專門客戶端服務(wù),客戶端將打包好的Message發(fā)送
27、給服務(wù)器端,服務(wù)器端根據(jù)Message里面的信息,再將信息轉(zhuǎn)發(fā)給其他用戶,它在幾臺計算機(jī)中提供了可靠的數(shù)據(jù)流,即標(biāo)準(zhǔn)的C/S模式。</p><p> Socket程序的工作過程:</p><p> 1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p> 2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通信。&l
28、t;/p><p> 3、關(guān)閉:通信結(jié)束時,再將所建的虛擬連接拆除。</p><p><b> 具體如下:</b></p><p><b> 服務(wù)器</b></p><p> 圖 2-1 socket通信</p><p><b> 二、Swing技術(shù)</
29、b></p><p> 當(dāng)java1.0剛剛出現(xiàn)時還沒有swing,當(dāng)時的GUI基本編程庫,sun取名叫AWT(Abstract Window Tookit),基本AWT庫處理用戶界面的方法是將這些元素的創(chuàng)建行為交給,底層操作系統(tǒng)的GUI工具箱進(jìn)行處理,來實現(xiàn)WORA的目的.而因為種種原因,不同的OS之間存在差異,使得AWT界面庫存在許多bug.1996年sun同netscape通力合作創(chuàng)建了新的庫取名
30、Swing.如果,沒有Swing,java的圖形就面就不名一文.swing是java的基礎(chǔ)類,是JFC的一部分,完整的JFC是很巨大的.包括的組件也很多.Swing具有更豐富而且更加方便的用戶界面元素集合,Swing對于底層平臺的依賴更少,因此,特殊平臺上的bug會很少,Swing會帶來交叉平臺上的統(tǒng)一的視覺體驗。三、Java web和struts2技術(shù)</p><p> Java Web,是用Java技術(shù)來
31、解決相關(guān)web互聯(lián)網(wǎng)領(lǐng)域的技術(shù)總和。web包括:web服務(wù)器和web客戶端兩部分。Java在客戶端的應(yīng)用有java applet,Java在服務(wù)器端的應(yīng)用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術(shù)對Web領(lǐng)域的發(fā)展注入了強(qiáng)大的動力本系統(tǒng)采用B/S的結(jié)構(gòu)實現(xiàn)服務(wù)器端,對用戶和在線用戶進(jìn)行增刪改查,和踢用戶下線,以及開啟服務(wù)器和關(guān)閉服務(wù)器。</p><p><b> 四、系統(tǒng)的構(gòu)
32、建討論</b></p><p> 本系統(tǒng)在客戶端采用C/S結(jié)構(gòu),C/S結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。缺點主要有以下幾個: </p><p> 客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺電腦出問題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。還有,系統(tǒng)軟件升級時,每一
33、臺客戶機(jī)需要重新安裝,其維護(hù)和升級成本非常高。(大多數(shù)沒法自動升級而需要人工升級) </p><p> 對客戶端的操作系統(tǒng)一般也會有限制??赡苓m應(yīng)于Windows 98,但不能用于Windows 2000或Windows XP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說Linux、Unix等。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時
34、要對系統(tǒng)進(jìn)行專門的設(shè)計來處理分布式的數(shù)據(jù)。 </p><p> 管理端采用B/S的結(jié)構(gòu), B/S結(jié)構(gòu)(Browser/Server結(jié)構(gòu))結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。</p><p> 在這種結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Ser
35、ver)實現(xiàn),形成所謂三層3-tier結(jié)構(gòu)。這樣就大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級的成本和工作量,降低了用戶的總體成本(TCO)。</p><p> 以目前的技術(shù)看,局域網(wǎng)建立B/S結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用,并通過Internet/Intranet模式下數(shù)據(jù)庫應(yīng)用,相對易于把握、成本也是較低的。它是一次性到位的開發(fā),能實現(xiàn)不同的人員,從不同的地點,以不同的接入方式(比如LAN, WAN, Internet/
36、Intranet等)訪問和操作共同的數(shù)據(jù)庫;它能有效地保護(hù)數(shù)據(jù)平臺和管理訪問權(quán)限,服務(wù)器數(shù)據(jù)庫也很安全 。</p><p> 特別是在JAVA這樣的跨平臺語言出現(xiàn)之后,B/S架構(gòu)管理軟件更是方便、速度快、效果優(yōu)。</p><p> 用Tomcat 作為服務(wù)器,MySQL作為數(shù)據(jù)庫,還使用到了WindowBuilder開源框架進(jìn)行界面開發(fā)。</p><p><
37、;b> 即時通訊原理</b></p><p> 登陸進(jìn)入聊天軟件后,即顯示出好友列表,在線的顯示亮頭像,不在線的顯示灰色頭像。雙擊好友頭像即會顯示出聊天界面。</p><p> 在聊天頁面上,有發(fā)送文字,發(fā)送截圖,和發(fā)送文件的功能按鈕。</p><p> 點擊“發(fā)送”按鈕之后,程序就會把輸入的信息的種類,信息內(nèi)容、本人的ID號、對方的ID號
38、以及當(dāng)前的時間等內(nèi)容打包成一個Message對象通過Socket發(fā)送到服務(wù)器端。</p><p> 服務(wù)器接收到Message之后,按照協(xié)議進(jìn)行解析和轉(zhuǎn)發(fā)。這樣,雙方的即時通訊就實現(xiàn)了。</p><p> MySQL數(shù)據(jù)庫應(yīng)用技術(shù)</p><p> 使用MySQL存儲用戶信息,采用JDBC技術(shù)對其進(jìn)行增刪改查。</p><p><
39、b> 第3章 系統(tǒng)分析</b></p><p> 3.1 系統(tǒng)基本功能描述</p><p> 客戶端可以實現(xiàn)注冊,即時聊天,相互之間收發(fā)文件,發(fā)送截圖,查看歷史聊天記錄等功能。收發(fā)消息時,可以實現(xiàn)離線接收。</p><p> 服務(wù)器端應(yīng)當(dāng)建立一個ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超
40、時)。服務(wù)器端應(yīng)當(dāng)是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。</p><p> 在后臺管理系統(tǒng),可以到對用戶進(jìn)行增刪改查,查看在線用戶,和踢用戶下線</p><p><b> 3.2 可行性分析</b></p><p> 本系統(tǒng)的可行性分析包括以下幾個方面的內(nèi)容:</p><p&g
41、t;<b> (1) 技術(shù)可行性</b></p><p> 使用Swing 和socket技術(shù),可以很輕松地開發(fā)出實用、簡便、高效的基于網(wǎng)絡(luò)的即時通訊系統(tǒng)。</p><p> 因此技術(shù)上是可以實現(xiàn)的。</p><p><b> (2) 經(jīng)濟(jì)可行性</b></p><p> 計算機(jī)網(wǎng)絡(luò)已經(jīng)普
42、及,因此在網(wǎng)絡(luò)設(shè)備上不需要進(jìn)行大的投入。本系統(tǒng)需要一個MySQL數(shù)據(jù)庫服務(wù)器,由于并發(fā)使用人數(shù)比較少,tomcat可以作為web服務(wù)器,所以成本很低。</p><p><b> (3) 操作可行性</b></p><p> 只要一臺以上計算機(jī)連接在同一個局域網(wǎng)內(nèi),本系統(tǒng)就可以安裝使用,所以操作上完全不存在問題。如果要實現(xiàn)internet上通訊,只需要將服務(wù)器端運行
43、在一個有固定IP的公網(wǎng)上就可以。</p><p> 綜上所述,即時Java即時通訊系統(tǒng)是可行的。</p><p> 3.3 系統(tǒng)需求分析</p><p><b> 3.3.1功能分析</b></p><p> 本系統(tǒng)要實現(xiàn)的功能如下:</p><p><b> 1)注冊<
44、/b></p><p> 服務(wù)器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的呢稱,性別,籍貫,個人資料等,接受完畢后,便通過JDBC與后臺數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記錄,如果成功,便向客戶返回其號碼??蛻羰盏椒?wù)器返回的信息后,便打開窗口登陸。</p><p><b> 2)登陸</b></p><p> 在客戶端,用
45、戶輸入其號碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開始通過JDBC讀取數(shù)據(jù)庫,然后與用戶輸入的信息進(jìn)行比對,如果成功,便打開主程序窗口。然后客戶向服務(wù)器請求讀取好友名單,服務(wù)器收到該請求,從數(shù)據(jù)庫中取出好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。</p><p><b> 3)聊天</b></p><p> 客戶端
46、首先發(fā)送消息到服務(wù)器端,服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。例如服務(wù)器接收到一個A發(fā)給B的消息,先判斷B是否已經(jīng)在線,如果在線就將信息發(fā)送過去。如果B不在線則把信息儲存在服務(wù)器,等B上線了在發(fā)送給他。B接收到A發(fā)來的信息,如果是未建立對話窗口,則自動打開顯示。</p><p><b> 4)發(fā)送截圖</b></p><p> 客戶端A點擊截圖按鈕,將屏幕鎖定
47、,截取圖片,將圖片儲存在byte[]數(shù)組中發(fā)送到服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。B接收到A發(fā)來的截圖信息,會根據(jù)byte[]構(gòu)造圖片,將圖片顯示出來。同樣,如果是未建立對話窗口,則自動打開顯示。</p><p><b> 5)發(fā)送文件</b></p><p> 客戶端A點擊發(fā)送文件按鍵,從本地選擇文件,將文件在byte[]數(shù)組中分批次發(fā)送到服務(wù)
48、器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。B接收到A發(fā)來的文件信息,會根據(jù)文件發(fā)送的狀態(tài)和byte[]構(gòu)造文件。</p><p><b> 6)日志</b></p><p> 客戶端發(fā)送和接收到的信息都會儲存在文本文檔中。默認(rèn)儲存在C盤下面,會以用戶的登錄賬號為名。</p><p><b> 7)對用戶的操作 </b
49、></p><p> 管理員通過B/S的系統(tǒng)對用戶進(jìn)行增加,修改,刪除,查找等操作,對系統(tǒng)進(jìn)行維護(hù)。</p><p> 8)在線用戶的操作 </p><p> 管理員通過B/S的系統(tǒng)對在線用戶操作,可以踢用戶下線。</p><p><b> 第4章 系統(tǒng)設(shè)計</b></p><p>
50、<b> 4.1 數(shù)據(jù)庫設(shè)計</b></p><p> 本系統(tǒng)中所涉及的主要實體及其屬性有:</p><p> 用戶(用戶賬號,用戶名,密碼,個性簽名,頭像ID,年齡,性別) </p><p> E-R模型如圖所示。</p><p> 圖 4-1系統(tǒng)實體及其屬性</p><p><
51、b> 表4-1 User</b></p><p> 4.2 系統(tǒng)模塊設(shè)計</p><p> 4.2.1 聊天系統(tǒng)工作原理圖</p><p> 圖 4-2 系統(tǒng)工作原理</p><p> 4.2.2 系統(tǒng)功能模塊圖:</p><p> 圖 4-3 系統(tǒng)模塊</p><p
52、> 4.2.3 系統(tǒng)用例圖:</p><p><b> 普通用戶的用例圖:</b></p><p> 圖 4-4 普通用戶用例圖</p><p> 后臺管理員的用例圖:</p><p> 圖 4-5 后臺用戶用例圖</p><p> 4.2.4 活動圖:</p>&
53、lt;p><b> 1)用戶登陸活動圖</b></p><p> 首先填寫登陸信息,提交以后服務(wù)器會對用戶名和密碼進(jìn)行驗證。如果不正確,返回一個提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。</p><p> 圖 4-6 用戶登錄活動圖</p><p>&l
54、t;b> 2)發(fā)送消息活動圖</b></p><p> 短消息發(fā)送以后,服務(wù)器端對應(yīng)的監(jiān)聽線程會接收到一個數(shù)據(jù)包。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會轉(zhuǎn)發(fā)到接收者。如果不在線,存在服務(wù)器端,等它上線在發(fā)送。</p><p> 圖 4-7發(fā)送消息活動圖</p><p><b> 4.3 系統(tǒng)類設(shè)計</b>&
55、lt;/p><p> 4.3.1 Message類的設(shè)計:客戶端和服務(wù)器端通信時,發(fā)送的都是Message類的對象,因此Message類的設(shè)計很重要。</p><p> 表4-2 Message</p><p> private Integer msgType消息的類型有這么幾種:</p><p> public interface
56、MessageType {</p><p> Integer message_succeed=1;//表明是登陸成功</p><p> Integer message_login_fail=2;//表明登錄失敗</p><p> Integer message_comm_mes=3;//普通信息包</p><p> Integer m
57、essage_get_onLineFriend=4;//要求在線好友的包</p><p> Integer message_ret_onLineFriend=5;//返回在線好友的包</p><p> Integer message_offline=6;//下線通知包</p><p> Integer message_img=7;//圖片包</p>
58、<p> Integer message_file=8;//文件包</p><p><b> }</b></p><p> 4.3.2 截圖類的設(shè)計:</p><p><b> 截圖類的實現(xiàn)類為:</b></p><p> class Screenshot extends
59、 JFrame implements MouseListener,MouseMotionListener。</p><p> 圖 4-8 Screenshot類</p><p> 截圖類的核心是JDK中:Robot類中createScreenCapture(Rectangle screenRect) 創(chuàng)建包含從屏幕中讀取的像素的圖像。</p><p>
60、; 先用截取全部屏幕的圖片,然后顯示出來,覆蓋住整個屏幕。然后監(jiān)聽鼠標(biāo)事件,再用createScreenCapture(Rectangle screenRect)方法截圖。</p><p> 雙擊表示截圖成功,右鍵表示取消截圖。</p><p> 4.3.3 聊天記錄類的設(shè)計:</p><p> 記錄日志的功能被封裝在MessageRecord
61、類中,所在包為com.im.client.record,在發(fā)送或接受到數(shù)據(jù)后,將其寫入日志文件。</p><p> 圖 4-9 MessageRecord類</p><p> 如果是圖片則顯示出,發(fā)送時間和圖片大小。如果是文件則顯示出請求發(fā)送時間,同意接收時間,接收完成時間,和文件大小。 </p><p><b> 日志文件格式如下:<
62、;/b></p><p> 圖 4-10 記錄文件</p><p> 4.3.4 服務(wù)端線程的設(shè)計:</p><p> 服務(wù)器端的核心是對應(yīng)客戶的線程,每個socket對應(yīng)一個線程,也就是每一個客戶端都在服務(wù)器端有一個相應(yīng)的線程。它負(fù)責(zé)轉(zhuǎn)發(fā)客戶端發(fā)來的消息。</p><p> 線程類為ClientThread:</p&
63、gt;<p> 表4-3 ClientThread類</p><p><b> 第5章 系統(tǒng)實現(xiàn)</b></p><p><b> 5.1 實現(xiàn)概況</b></p><p> 本系統(tǒng)可分為登錄、聊天、文件、用戶管理和注冊五個功能模塊?!暗卿洝蹦K為用戶提供登錄界面,并在用戶登錄顯示好友列表;“聊天”
64、模塊實現(xiàn)用戶的即時傳送信息,即多用戶即時聊天,可以發(fā)送文字或者截圖;“文件”模塊主要實現(xiàn)一用戶向另一用戶發(fā)送文件,對方可以選擇接受或者拒絕。聊天記錄會以文本文檔格式保存?!坝脩艄芾怼蹦K即管理員對用戶進(jìn)行增刪改查,和踢用戶下線的操作。</p><p> 下面詳細(xì)介紹各個模塊的具體實現(xiàn)。</p><p><b> 5.2 注冊模塊</b></p>&l
65、t;p><b> 5.2.1 流程圖</b></p><p> 圖 5-1 用戶注冊流程圖</p><p> 5.2.2 關(guān)鍵代碼</p><p> 注冊的前臺頁面是showDetail.jsp,后臺是UserAction類,UserAction類中有方法:</p><p> public String
66、saveOrUpdate(){</p><p> us.saveOrUpdate(user);</p><p> return "refresh";</p><p><b> }</b></p><p> saveOrUpdate則是用到了Userservice里面的方法:</p>
67、<p> public void saveOrUpdate(User u){</p><p> System.out.println("u.getAccount()="+u.getAccount());</p><p> if(u.getAccount()==null)</p><p> ud.save(u);</p&
68、gt;<p> else ud.update(u);</p><p><b> }</b></p><p><b> DAO類中的方法:</b></p><p> public void save(User u){</p><p> conn=getConnection();
69、</p><p><b> try {</b></p><p> ps=conn.prepareStatement(SAVE);</p><p> ps.setString(1, u.getName());</p><p> ps.setString(2, u.getPassword());</p>
70、<p> ps.setString(3, u.getSignature());</p><p> ps.setInt(4, 1);</p><p> ps.setInt(5, u.getAge());</p><p> ps.setString(6, u.getSex());</p><p> ps.execute();
71、</p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }finally{</b></p><p>
72、;<b> close();</b></p><p><b> } </b></p><p><b> }</b></p><p> 網(wǎng)頁上顯示用戶的account</p><p> 圖 5-2 用戶注冊信息</p><p><b
73、> 5.3 登錄模塊</b></p><p><b> 5.3.1 流程圖</b></p><p> 圖 5-3 登錄流程圖</p><p> 5.3.2 關(guān)鍵代碼</p><p><b> 1)客戶端代碼</b></p><p> 登錄事件
74、是定義在class IMClientLogin extends JFrame 這個類的監(jiān)聽事件中。登錄成功后,立即向服務(wù)器請求自己的好友列表。</p><p><b> //登錄事件</b></p><p> login.addActionListener(new ActionListener() {</p><p> public vo
75、id actionPerformed(ActionEvent e) {</p><p> //cus=new IMClientUserServer();</p><p> //System.out.println(cus.getServer());</p><p> User u=new User();</p><p>
76、 u.setAccount(Integer.parseInt(account.getText().trim()));</p><p> u.setPassword(new String(passwordField.getPassword()));</p><p> //登陸成功</p><p> if(cus.checkLogin(u)){</
77、p><p> //向服務(wù)器發(fā)送數(shù)據(jù)包,請求在線人得信息</p><p> ClientConnToServerThread t=Manager.THREAD;</p><p> Message m=new Message();</p><p> m.setMsgType(MessageType.message_get_onLineFri
78、end);</p><p> m.setSenderAccount(u.getAccount());</p><p><b> try {</b></p><p> t.send(m);</p><p> } catch (IOException e1) {</p><p> e1.pr
79、intStackTrace();</p><p><b> }</b></p><p> dispose();</p><p><b> }</b></p><p><b> else</b></p><p> JOptionPane.
80、showMessageDialog(null, "用戶名或密碼錯誤", "錯誤", JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> });</b></p><p> 登錄邏輯是在public class I
81、MClientUserServer 里面,認(rèn)證成功者就會新建一個線程,專門負(fù)責(zé)接收服務(wù)器端發(fā)來的信息class ClientConnToServerThread extends Thread 。</p><p> public boolean checkLogin(Object o) {</p><p> boolean success=false;</p><p&
82、gt; Message msg=(Message) server.sendLoginInfo(o);</p><p> //System.out.println(msg.getMsgType());</p><p> //System.out.println(MessageType.message_succeed);</p><p> if(msg.
83、getMsgType().intValue()==MessageType.message_succeed.intValue()){</p><p> success=true;</p><p> User u=(User) o;</p><p> //將好友列表放到管理器中,進(jìn)行上下線操作</p><p> IMFriendList
84、 fl=new IMFriendList(msg.getMyself(),msg.getFriends());</p><p> Manager.FRIEND_LIST=fl;</p><p> //開啟客戶線程 ,接收服務(wù)器端的信息</p><p> connThread =new ClientConnToServerThread(server.getSoc
85、ket());</p><p> connThread.setSocket(server.getSocket());</p><p> connThread.start();</p><p> connThread.setName(u.getAccount()+"");</p><p> Manager.THREA
86、D=connThread;</p><p><b> }</b></p><p> return success;</p><p><b> }</b></p><p> 客戶端通過public class IMClientServer 類與服務(wù)器通信</p><p>
87、; public Object sendLoginInfo(Object o) {</p><p><b> try {</b></p><p> ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());</p><p> oos.writeOb
88、ject(o);</p><p> ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());</p><p> Message ms = (Message) ois.readObject();</p><p> return ms;</p><p>
89、 } catch (IOException e) {</p><p> e.printStackTrace();</p><p> } catch (ClassNotFoundException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p
90、><p> return null;</p><p><b> }</b></p><p> 這樣按照MVC的模式設(shè)計,減小的系統(tǒng)耦合。</p><p><b> 2)服務(wù)端代碼</b></p><p> 服務(wù)器端接收用戶驗證信息的代碼被寫在了一個線程public cl
91、ass ServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請求,建立socket連接,也不會堵塞在主線程當(dāng)中。</p><p> 從數(shù)據(jù)庫中搜索用戶,看是否存在</p><p> public boolean checkLogin(User u){</p><p> User user=ud.find
92、ById(u.getAccount());</p><p> if(user!=null){</p><p> return user.getPassword().equals(u.getPassword());</p><p><b> }</b></p><p> return false;</p>
93、;<p><b> }</b></p><p> 如果驗證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)器上專門開啟一個針對當(dāng)前用戶的線程,并且吧線程放入管理類中,便于日后的管理。</p><p> if (checkLogin(u)) {</p><p> // 返回一個成功登陸的信息報</p>&
94、lt;p> User myself=ud.findById(u.getAccount());</p><p> m.setMsgType(MessageType.message_succeed);</p><p> m.setMyself(myself);</p><p> m.setFriends(ud.findAll());//好友列表</p
95、><p> oos.writeObject(m);</p><p> //為用戶單獨創(chuàng)建線程</p><p> ClientThread t=new ClientThread(s);</p><p> //查看是否有離線消息</p><p> LinkedList<Message> list=OffL
96、ineMsgManager.get(u.getAccount());</p><p> if(list!=null){</p><p> for(Message msg:list){</p><p> t.send(msg);</p><p><b> }</b></p><p> li
97、st.clear();</p><p><b> }</b></p><p><b> //開啟線程</b></p><p> t.start();</p><p> t.setName(u.getAccount()+"");</p><p>
98、//把用戶線程放入管理類中</p><p> ClientThreadManager.addClientThread(u.getAccount(), t);</p><p><b> //通知其他的用戶</b></p><p> t.notifyOnline();</p><p> System.out.prin
99、tln(" 成功");</p><p><b> } else {</b></p><p> m.setMsgType(3);</p><p> oos.writeObject(m);</p><p> System.out.println(" 失敗");</p&
100、gt;<p> // 關(guān)閉Socket</p><p> s.close();</p><p><b> }</b></p><p><b> 5.4 聊天模塊</b></p><p><b> 5.4.1 流程圖</b></p><
101、p> 圖 5-4 聊天流程圖</p><p> 5.4.2 關(guān)鍵代碼</p><p><b> 1)客服端代碼</b></p><p><b> 發(fā)送文字信息:</b></p><p> 客戶端發(fā)送和顯示信息的代碼被封裝在了IMChat extends JFrame impleme
102、nts ActionListener類中,其中發(fā)送文字信息的代碼</p><p> //點擊的如果是發(fā)送button</p><p> if (e.getSource() == confirmButton) {</p><p> Message m=(Message) makePackage(MessageType.message_comm_mes,null)
103、;</p><p><b> //發(fā)送</b></p><p> sendMessage(m);</p><p> //在自己的Ouput上顯示</p><p> showMessage(m,Color.BLACK);</p><p><b> //清空輸入</b>
104、</p><p> input_textArea.setText("");</p><p><b> }</b></p><p> 當(dāng)用戶點擊發(fā)送按鈕后,先把先把信息顯示在自己的聊天窗口上,后方發(fā)送信息,自己發(fā)送的信息和接收到的信息用不同的顏色顯示。</p><p> 顯示文字信息,顯示在Jt
105、extPane控件中 </p><p> SimpleAttributeSet attrset = new SimpleAttributeSet();</p><p> StyleConstants.setForeground(attrset,c);</p><p> Document docs = output_pane.getDocument();<
106、/p><p> // 利用getDocument()方法取得JTextPane的Document</p><p><b> //一般信息</b></p><p> if(m.getMsgType().intValue()==MessageType.message_comm_mes){</p><p> Strin
107、g str=m.getSenderAccount() + " " +m.getTime()+"\n"+" "+ m.getContent()+ "\n";</p><p><b> try {</b></p><p> docs.insertString(docs.getLen
108、gth(), str, attrset);</p><p><b> //設(shè)置光標(biāo)到末尾</b></p><p> output_pane.setCaretPosition(docs.getLength());</p><p> } catch (BadLocationException e) {</p><p>
109、 e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> 發(fā)送圖片信息:</b></p><p> 在發(fā)送圖片信息的時候,先將圖片轉(zhuǎn)換成為byte[]數(shù)組,包裝在信息包種發(fā)送出去,
110、接收到圖片信息時,從byte[]數(shù)組構(gòu)建圖片,顯示出來。</p><p> 圖片和byte[]之間相互轉(zhuǎn)換的關(guān)鍵代碼如下:</p><p> //將image轉(zhuǎn)換成 byte[]</p><p> public byte[] imageToBytes(Image img){</p><p> ByteArrayOutputStream
111、 bos=new ByteArrayOutputStream();</p><p><b> try {</b></p><p> ImageIO.write((RenderedImage) img, "jpg", bos);</p><p> } catch (IOException e) {</p>
112、<p> e.printStackTrace();</p><p><b> }</b></p><p> return bos.toByteArray();</p><p><b> }</b></p><p> //將 byte[]轉(zhuǎn)換成image</p>&l
113、t;p> public Image bytesToImage(byte[] b){</p><p><b> try {</b></p><p> return ImageIO.read(new ByteArrayInputStream(b));</p><p> } catch (IOException e) {</p&
114、gt;<p> e.printStackTrace();</p><p><b> }</b></p><p> return null;</p><p><b> }</b></p><p> 在JtextPane中顯示圖片的代碼:</p><p>
115、 if(m.getMsgType().intValue()==MessageType.message_img){</p><p><b> //圖片信息</b></p><p> String str=m.getSenderAccount() + " " +m.getTime()+ "\n";</p><
116、;p><b> try {</b></p><p> //顯示發(fā)送人 和時間</p><p> docs.insertString(docs.getLength(), str, attrset);</p><p><b> //設(shè)置光標(biāo)到末尾</b></p><p> output_
117、pane.setCaretPosition(docs.getLength());</p><p> output_pane.insertIcon(new ImageIcon(m.getImg()));</p><p> docs.insertString(docs.getLength(), "\n", attrset);</p><p>&l
118、t;b> //設(shè)置光標(biāo)到末尾</b></p><p> output_pane.setCaretPosition(docs.getLength());</p><p> } catch (BadLocationException e) {</p><p> e.printStackTrace();</p><p>&
119、lt;b> }</b></p><p><b> }</b></p><p> 在客戶端顯示截圖示例:</p><p> 圖 5-5 聊天截圖</p><p><b> 2)服務(wù)端代碼</b></p><p> 服務(wù)端接收到客戶端的信息后,只需
120、要根據(jù)他的接收人,進(jìn)行轉(zhuǎn)發(fā)就可以。關(guān)鍵代碼如下:</p><p> Message m = (Message) receive();</p><p> // 如果是普通信息</p><p> if (m.getMsgType() == MessageType.message_comm_mes.intValue()) {</p><p>
121、 System.out.println(m.getSenderAccount() + "send to"+ m.getReceiverAccount() + "at" + m.getTime());</p><p> Integer receiverAccount = m.getReceiverAccount();</p><p> Clien
122、tThread t = ClientThreadManager.getClientThread(receiverAccount);</p><p> if (t == null) {</p><p> //不在線就暫時存儲在服務(wù)器上</p><p> OffLineMsgManager.putSingle(receiverAccount, m);</p&
123、gt;<p><b> } else</b></p><p> t.send(m);</p><p><b> }</b></p><p><b> 5.5 文件模塊</b></p><p><b> 5.5.1 流程圖</b>&l
124、t;/p><p> 圖 5-6 發(fā)送文件流程圖</p><p> 5.5.2 關(guān)鍵代碼</p><p><b> 1)客戶端代碼</b></p><p> 在客戶端采用JfileChooser來瀏覽本地文件,點擊瀏覽按鈕后,會彈出對話框,讓用戶選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。關(guān)鍵代碼如下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的cs模式網(wǎng)絡(luò)聊天室的畢業(yè)設(shè)計(doc畢業(yè)設(shè)計論文)
- java開發(fā)的畢業(yè)設(shè)計-聊天系統(tǒng)
- 畢業(yè)論文-基于java聊天系統(tǒng)設(shè)計與實現(xiàn)
- 【畢業(yè)設(shè)計】基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)設(shè)計----基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 【畢業(yè)設(shè)計】基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 基于java的網(wǎng)絡(luò)安全聊天工具畢業(yè)設(shè)計
- 畢業(yè)論文---基于cs架構(gòu)的java網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)論文---基于cs架構(gòu)的java網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 基于java的聊天系統(tǒng)的設(shè)計于實現(xiàn)——畢業(yè)論文
- 基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文
- 畢業(yè)論文 基于java即時聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 基于java語言的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與實現(xiàn)畢業(yè)論文
- 基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文
- 基于java的聊天系統(tǒng)的設(shè)計于實現(xiàn)——畢業(yè)論文
- 基于java即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_畢業(yè)論文
- 基于java即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_畢業(yè)論文
- 基于java網(wǎng)絡(luò)聊天室設(shè)計
- 畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn) (2)
評論
0/150
提交評論