版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 河 南 警 察 學(xué) 院</p><p> 畢 業(yè) 論 文(設(shè)計(jì))</p><p> 系 別 信息系 </p><p> 專 業(yè) 計(jì)算機(jī)網(wǎng)絡(luò)安全監(jiān)察 </p><p> 年 級(jí)
2、 2009 </p><p> 姓 名 張寧 </p><p> 論文(設(shè)計(jì))題目 基于c/s架構(gòu)的 </p><p> Java網(wǎng)絡(luò)聊天系統(tǒng) </p><p> 指導(dǎo)
3、教師 講師 </p><p> 2012年5月 4日</p><p><b> 目 錄</b></p><p> 摘要...........................................................................
4、............................1</p><p> 關(guān)鍵詞...................................................................................................1</p><p> Abstract……………………………………………………………….2</p&g
5、t;<p> Key Words………………………………………………………….....2</p><p> 1.引言…………………………………………………………............3</p><p> 1.1開發(fā)背景……………………………………………………...6</p><p> 1.2開發(fā)目的和意義……………………………………………..
6、.6</p><p> 1.3論文研究內(nèi)容…………………………………………….......7</p><p> 2.即時(shí)通訊系統(tǒng)的相關(guān)研究………………………………………....7</p><p> 2.1 C/S開發(fā)模式……………………………………………...….7</p><p> 2.2即時(shí)通訊原理…………………………………………
7、…...…8</p><p> 2.3 Socket通信技術(shù)………………………………………………8</p><p> 3.系統(tǒng)分析………………………………………………………….....9</p><p> 3.1系統(tǒng)基本功能描述………………………………….…...…....9</p><p> 3.2可行性分析………………………………
8、………….………...9</p><p> 3.3系統(tǒng)需求分析……………………………………….……..…10</p><p> 3.3.1功能分析……………………………………………..…10</p><p> 4.系統(tǒng)設(shè)計(jì)………………………………………………………….....11</p><p> 4.1數(shù)據(jù)庫設(shè)計(jì)…………………………
9、…………………………11</p><p> 4.2數(shù)據(jù)庫模塊設(shè)計(jì)………………………………………………12</p><p> 4.2.1聊天系統(tǒng)工作原理圖…………………………...………12</p><p> 4.2.2系統(tǒng)功能模塊圖…………………………………………13</p><p> 4.2.3系統(tǒng)用例圖……………………………………
10、…………13</p><p> 4.2.4活動(dòng)圖…………………………………………………....14</p><p> 4.3系統(tǒng)類設(shè)計(jì)…………………………………………………….16</p><p> 5.系統(tǒng)實(shí)現(xiàn)…………………………………………………………......17</p><p> 5.1實(shí)現(xiàn)概況………………………………………
11、……………….17</p><p> 5.2注冊(cè)模塊……………………………………………………….18</p><p> 5.2.1流程圖……………………………………………………18</p><p> 5.2.2關(guān)鍵代碼…………………………………………………18</p><p> 5.3登錄模塊………………………………………………………
12、.20</p><p> 5.3.1流程圖……………………………………………………20</p><p> 5.3.2關(guān)鍵代碼…………………………………………………20</p><p> 5.4聊天模塊……………………………………………………….23</p><p> 5.4.1流程圖……………………………………………………23<
13、/p><p> 5.4.2關(guān)鍵代碼…………………………………………………23</p><p> 5.5文件模塊……………………………………………………….24</p><p> 5.5.1流程圖……………………………………………………24</p><p> 5.5.2關(guān)鍵代碼…………………………………………………25</p>
14、<p> 5.6用戶管理模塊…………………………………………………...…26</p><p> 5.6.1流程圖………………………………………………………..26</p><p> 5.7用戶/服務(wù)器界面的設(shè)計(jì)…………………..………………..……..27</p><p> 5.8結(jié)語…………………………………….…………………………..30&
15、lt;/p><p> 基于c/s架構(gòu)的JAVA網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開發(fā)主要包括一個(gè)
16、網(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ā)送
17、,是利用流來實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過分析這些情況,該聊天工具采用Eclipse為基本開發(fā)環(huán)境和java語言進(jìn)行編寫,首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)。</p><p> 關(guān)鍵詞:即時(shí)通訊系統(tǒng) C/S Socket Swing</p><p> The Des
18、ign and Implementation of Instant Messaging System</p><p><b> Abstract</b></p><p> Along with the fast development of Internet, the network chating tool has already become one kind
19、 of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example, Netmeeting, QQ, MSN-Messager and so on. This system development main
20、ly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat. The former establishes the server through the Socket, the server ca</p><p> Keywords: Inst
21、ant Messaging System; C/S ;Socket; Swing;</p><p><b> 1.引言</b></p><p><b> 1.1 開發(fā)背景</b></p><p> 隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊
22、天工具,其中應(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í)通訊,成為繼電話、E-Mail之后又一個(gè)完全融入每個(gè)人生活的互聯(lián)網(wǎng)工具。</p><p> Ja
23、va是一個(gè)由Sun公司開發(fā)而成的新一代編程語言。使用它可在各式各樣不同種機(jī)器、不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。不論你使用的是哪一種WWW瀏覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動(dòng)的主頁。Java正在逐步成為Internet應(yīng)用的主要開發(fā)語言。它徹底改變了應(yīng)用軟件的開發(fā)模式,帶來了自PC機(jī)以來又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。</p><p&
24、gt; 1.2 開發(fā)目的和意義</p><p> 網(wǎng)絡(luò)通信在當(dāng)今信息社會(huì)中起著不可或缺的作用,人們可以利用網(wǎng)絡(luò)通信技術(shù)進(jìn)行即時(shí)的信息 交流。比如說QQ聊天工具,它就是利用網(wǎng)絡(luò)通信技術(shù)開發(fā)的一款眾所周知的網(wǎng)絡(luò)聊天工具。通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的范疇,隨著企業(yè)即時(shí)通訊工具的出現(xiàn),即時(shí)信息在網(wǎng)絡(luò)營銷中將發(fā)揮更大的作用。</p><p> 目前,信息交流是互聯(lián)網(wǎng)提供
25、的主要內(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上都可以使用。</p><p> 1.3 論文研究內(nèi)容</p><p><b> 1、即時(shí)通訊原理</b></
26、p><p> 首先驗(yàn)證登陸,如果成功,則建立與服務(wù)端的socket連接,服務(wù)端新開啟一個(gè)線程專門為它服務(wù),將打包好的Message發(fā)送給服務(wù)器端,服務(wù)器端根據(jù)Message里面的信息,再將信息轉(zhuǎn)發(fā)給其他用戶。一個(gè)標(biāo)準(zhǔn)的C/S模式。</p><p><b> 2、Swing技術(shù)</b></p><p> Swing是一個(gè)用于開發(fā)Java應(yīng)用程序
27、用戶界面的開發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。用來實(shí)現(xiàn)客服端的界面設(shè)計(jì)。</p><p><b> 3、系統(tǒng)的構(gòu)建</b></p><p> 客戶端采用C/S結(jié)構(gòu),以IO流的讀寫方式作為數(shù)據(jù)庫。使用戶信息以規(guī)定的格式在本地持久化存儲(chǔ)。</p><p> 2.即時(shí)通訊系統(tǒng)的相關(guān)研究&l
28、t;/p><p> 2.1 C/S開發(fā)模式</p><p> C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè): </p><p> 而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門的
29、設(shè)計(jì)來處理分布式的數(shù)據(jù)。 </p><p> 客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺(tái)電腦出問題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶機(jī)需要重新安裝,其維護(hù)和升級(jí)成本非常高。(大多數(shù)沒法自動(dòng)升級(jí)而需要人工升級(jí)) </p><p> 對(duì)客戶端的操作系統(tǒng)一般也會(huì)有限制。可能適應(yīng)于win7,但不能用于Windows 2000或W
30、indows XP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說Linux、Unix等。</p><p> 2.2 即時(shí)通訊原理</p><p> 登陸進(jìn)入聊天軟件后,即顯示出好友列表,在線的顯示亮頭像,不在線的顯示灰色頭像。雙擊好友頭像即會(huì)顯示出聊天界面。</p><p> 在聊天頁面上,有發(fā)送文字,發(fā)送截圖,和發(fā)送文件的功能按鈕。</p>&l
31、t;p> 點(diǎn)擊“發(fā)送”按鈕之后,程序就會(huì)把輸入的信息的種類,信息內(nèi)容、本人的ID號(hào)、對(duì)方的ID號(hào)以及當(dāng)前的時(shí)間等內(nèi)容打包成一個(gè)Message對(duì)象通過Socket發(fā)送到服務(wù)器端。</p><p> 服務(wù)器接收到Message之后,按照協(xié)議進(jìn)行解析和轉(zhuǎn)發(fā)。這樣,雙方的即時(shí)通訊就實(shí)現(xiàn)了。</p><p> 2.3 Socket通信技術(shù)</p><p> S
32、ocket程序的工作過程:</p><p> 1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p> 2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通信。</p><p> 3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。</p><p><b> 具體如下:</b&g
33、t;</p><p><b> 服務(wù)器</b></p><p> 圖 2-1 socket通信</p><p><b> 3.系統(tǒng)分析</b></p><p> 3.1 系統(tǒng)基本功能描述</p><p> 客戶端可以實(shí)現(xiàn)注冊(cè),即時(shí)聊天、在線好友查看、好友上、下線彈
34、出窗口通知、服務(wù)器后臺(tái)系統(tǒng)信息發(fā)布,相互之間收發(fā)文件等等。還有,收發(fā)消息時(shí),可以實(shí)現(xiàn)離線接收。</p><p> 服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超時(shí))。服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。</p><p><b> 3.2 可行性分析&l
35、t;/b></p><p> 本系統(tǒng)的可行性分析包括以下幾個(gè)方面的內(nèi)容:</p><p><b> (1) 技術(shù)可行性</b></p><p> 使用Swing 和socket技術(shù),可以很輕松地開發(fā)出實(shí)用、簡便、高效的基于網(wǎng)絡(luò)的即時(shí)通訊系統(tǒng)。</p><p> 因此技術(shù)上是可以實(shí)現(xiàn)的。</p>
36、<p><b> (2) 經(jīng)濟(jì)可行性</b></p><p> 計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)普及,因此在網(wǎng)絡(luò)設(shè)備上不需要進(jìn)行大的投入。本系統(tǒng)需要Java JRE環(huán)境,由于并發(fā)使用人數(shù)比較少,所以成本很低。</p><p><b> (3) 操作可行性</b></p><p> 只要一臺(tái)以上計(jì)算機(jī)連接在同一個(gè)局域網(wǎng)內(nèi),
37、本系統(tǒng)就可以安裝使用,所以操作上完全不存在問題。如果要實(shí)現(xiàn)internet上通訊,只需要將服務(wù)器端運(yùn)行在一個(gè)有固定IP的公網(wǎng)上就可以。</p><p> 綜上所述,即時(shí)Java即時(shí)通訊系統(tǒng)是可行的。</p><p> 3.3 系統(tǒng)需求分析</p><p><b> 3.3.1功能分析</b></p><p> 本
38、系統(tǒng)要實(shí)現(xiàn)的功能如下:</p><p><b> 1)注冊(cè)</b></p><p> 服務(wù)器收到用戶的注冊(cè)請(qǐng)求,便開始接受客戶傳遞的信息,諸如客戶的呢稱,性別,籍貫,個(gè)人資料等,接受完畢后,便通過JDBC與后臺(tái)數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記錄,如果成功,便向客戶返回其號(hào)碼。客戶收到服務(wù)器返回的信息后,便打開窗口登陸。</p><p><
39、;b> 2)登陸</b></p><p> 在客戶端,用戶輸入其號(hào)碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開始通過JDBC讀取數(shù)據(jù)庫,然后與用戶輸入的信息進(jìn)行比對(duì),如果成功,便打開主程序窗口。然后客戶向服務(wù)器請(qǐng)求讀取好友名單,服務(wù)器收到該請(qǐng)求,從數(shù)據(jù)庫中取出好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。</p><p>
40、<b> 3)聊天</b></p><p> 客戶端首先發(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)打開顯示。</p><p><b> 4)發(fā)送
41、截圖</b></p><p> 客戶端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)打開顯示。</p><p><b> 5)發(fā)送文件</b></p>&l
42、t;p> 客戶端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)造文件。</p><p><b> 6)日志</b></p><p> 客戶端發(fā)送和接收到的信息都會(huì)儲(chǔ)存在文本文檔中。默認(rèn)儲(chǔ)存在C盤下面,會(huì)以用戶的登錄賬
43、號(hào)為名。</p><p><b> 7)對(duì)用戶的操作 </b></p><p> 管理員通過B/S的系統(tǒng)對(duì)用戶進(jìn)行增加,修改,刪除,查找等操作,對(duì)系統(tǒng)進(jìn)行維護(hù)。</p><p> 8)在線用戶的操作 </p><p> 管理員通過B/S的系統(tǒng)對(duì)在線用戶操作,可以踢用戶下線。</p><p>
44、;<b> 4.系統(tǒng)設(shè)計(jì)</b></p><p><b> 4.1 數(shù)據(jù)庫設(shè)計(jì)</b></p><p> 本系統(tǒng)中所涉及的主要實(shí)體及其屬性有:</p><p> 用戶(用戶賬號(hào),用戶名,密碼,個(gè)性簽名,頭像ID,年齡,性別) </p><p> E-R模型如圖所示。</p>
45、<p> 圖 4-1系統(tǒng)實(shí)體及其屬性</p><p><b> 表4-1 User</b></p><p> 4.2 系統(tǒng)模塊設(shè)計(jì)</p><p> 4.2.1 聊天系統(tǒng)工作原理圖</p><p> 圖 4-2 系統(tǒng)工作原理</p><p> 4.2.2 系統(tǒng)功能模塊圖:&
46、lt;/p><p> 圖 4-3 系統(tǒng)模塊</p><p> 4.2.3 系統(tǒng)用例圖:</p><p><b> 普通用戶的用例圖:</b></p><p> 圖 4-4 普通用戶用例圖</p><p> 4.2.4 活動(dòng)圖:</p><p><b> 1
47、)用戶登陸活動(dòng)圖</b></p><p> 首先填寫登陸信息,提交以后服務(wù)器會(huì)對(duì)用戶名和密碼進(jìn)行驗(yàn)證。如果不正確,返回一個(gè)提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。</p><p> 圖 4-6 用戶登錄活動(dòng)圖</p><p><b> 2)發(fā)送消息活動(dòng)圖&l
48、t;/b></p><p> 短消息發(fā)送以后,服務(wù)器端對(duì)應(yīng)的監(jiān)聽線程會(huì)接收到一個(gè)數(shù)據(jù)包。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)到接收者。如果不在線,存在服務(wù)器端,等它上線在發(fā)送。</p><p> 圖 4-7發(fā)送消息活動(dòng)圖</p><p><b> 4.3 系統(tǒng)類設(shè)計(jì)</b></p><p>
49、 4.3.1 服務(wù)端線程的設(shè)計(jì):</p><p> 服務(wù)器端的核心是對(duì)應(yīng)客戶的線程,每個(gè)socket對(duì)應(yīng)一個(gè)線程,也就是每一個(gè)客戶端都在服務(wù)器端有一個(gè)相應(yīng)的線程。它負(fù)責(zé)轉(zhuǎn)發(fā)客戶端發(fā)來的消息。</p><p> 線程類為ClientThread:</p><p> 表4-3 ClientThread類</p><p><b&g
50、t; 客戶端線程類設(shè)計(jì)</b></p><p><b> 5.系統(tǒng)實(shí)現(xiàn)</b></p><p><b> 5.1 實(shí)現(xiàn)概況</b></p><p> 本系統(tǒng)可分為登錄、聊天、文件、用戶管理和注冊(cè)五個(gè)功能模塊。“登錄”模塊為用戶提供登錄界面,并在用戶登錄顯示好友列表;“聊天”模塊實(shí)現(xiàn)用戶的即時(shí)傳送信息,即
51、多用戶即時(shí)聊天,可以發(fā)送文字;“文件”模塊主要實(shí)現(xiàn)一用戶向另一用戶發(fā)送文件,對(duì)方可以選擇接受或者拒絕。聊天記錄會(huì)以文本文檔格式保存。</p><p> 下面詳細(xì)介紹各個(gè)模塊的具體實(shí)現(xiàn)。</p><p><b> 5.2 注冊(cè)模塊</b></p><p><b> 5.2.1 流程圖</b></p>&l
52、t;p> 圖 5-1 用戶注冊(cè)流程圖</p><p> 5.2.2 關(guān)鍵代碼</p><p> public class Regist {</p><p> private Socket socket = null;</p><p> private OutputStream os ; </p><p>
53、; private DataOutputStream dos;</p><p> private DataInputStream dis;</p><p> private RegistMsg rm;</p><p> private int answer=-1;</p><p> public void setAnswer(in
54、t answer) {</p><p> this.answer = answer;</p><p><b> }</b></p><p> public int getAnswer() {</p><p> return answer;</p><p><b> }</
55、b></p><p> public Regist(RegistMsg rm){</p><p><b> try {</b></p><p> Socket rs = new Socket("127.0.0.1",9999);</p><p> this.socket=rs;</
56、p><p> this.rm=rm;</p><p> System.out.println("[client]: "+new DateProcess().lProcess()+" 成功鏈接到服務(wù)器...");</p><p><b> } </b></p><p> catc
57、h (UnknownHostException e) {</p><p> System.out.println("[client]: "+new DateProcess().lProcess()+" 未知的服務(wù)器鏈接...");</p><p> } catch (IOException e) {</p><p> S
58、ystem.out.println("[client]: "+new DateProcess().lProcess()+" 讀寫錯(cuò)誤或者服務(wù)器未開啟...");</p><p><b> }</b></p><p><b> }</b></p><p><b> //
59、注冊(cè)方法</b></p><p> public int regist(RegistMsg rm) throws Exception{</p><p> InputStream is = socket.getInputStream();</p><p> os = socket.getOutputStream();</p><p
60、> dos=new DataOutputStream(os);</p><p> dis=new DataInputStream(is);</p><p> byte[] data = new Pack().pack(rm) ;</p><p> System.out.println("sdds"+dos);</p>
61、<p> dos.write(data);</p><p> dos.flush();</p><p> byte[] r = new byte[4];</p><p> dis.read(r);</p><p> String answer = new String(r).trim();</p><p
62、> return Integer.parseInt(answer);</p><p><b> }</b></p><p><b> }</b></p><p><b> 5.3 登錄模塊</b></p><p><b> 5.3.1 流程圖</
63、b></p><p> 圖 5-3 登錄流程圖</p><p> 5.3.2 關(guān)鍵代碼</p><p><b> 1)客戶端代碼</b></p><p> String username = name_text.getText();</p><p> String passwo
64、rd = pwd_text.getText();</p><p> System.out.println(username+"----"+password);</p><p> if(username==null||"".equals(username)||password==null||"".equals(password)
65、){</p><p> javax.swing.JOptionPane.showMessageDialog(null, "用戶名和密碼不能為空");</p><p><b> return;</b></p><p><b> }</b></p><p><b>
66、 else</b></p><p> {frame.dispose();</p><p> ClientThread client = new ClientThread();</p><p> int result = client.login(username, password);</p><p><b>
67、 //已經(jīng)登錄</b></p><p> if(result==1){</p><p> javax.swing.JOptionPane.showMessageDialog(null, "該用戶已經(jīng)登錄");</p><p><b> }</b></p><p> //用戶名,密碼
68、不匹配</p><p> else if(result==2){</p><p> javax.swing.JOptionPane.showMessageDialog(null, "用戶名和密碼不匹配");</p><p><b> }</b></p><p><b> //登錄成功
69、</b></p><p> else if(result==0){</p><p> //將該用戶添加到ClientTools里面</p><p> ClientTools.setClient(client);</p><p> client.start();</p><p> process =
70、 new ThreadProcess(Integer.parseInt(username));</p><p> process.addtray(new SystemtrayListener());</p><p> ClientTools.pt=process;</p><p> process.start();</p><p>&l
71、t;b> }</b></p><p><b> 2)服務(wù)器端代碼:</b></p><p> 服務(wù)器端接收用戶驗(yàn)證信息的代碼被寫在了一個(gè)線程public class ServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請(qǐng)求,建立socket連接,也不會(huì)堵塞在主線程當(dāng)中。</p>
72、;<p> public Socket getClient(){</p><p> return this.client;</p><p><b> }</b></p><p> private int userID;</p><p><b> //獲得用戶ID</b><
73、;/p><p> public int getUserID() {</p><p> return userID;</p><p><b> }</b></p><p> public void setUserID(int userID) {</p><p> this.userID = u
74、serID;</p><p> 如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)器上專門開啟一個(gè)針對(duì)當(dāng)前用戶的線程,并且吧線程放入管理類中,便于日后的管理。</p><p> LogonMsg lom = new LogonMsg();</p><p> lom.setDest(0);</p><p> lom.setS
75、ource(0);</p><p> lom.setType(Protocol.LOGON_MESSAGE);</p><p> lom.setId(getUserID());</p><p> lom.setTotalLen(20);</p><p> for(int f =1;f<firend.length;f++){<
76、;/p><p> for(ServerThread st :ChatTools.onlineUser){</p><p> if(st.getUserID()==Integer.parseInt(firend[f])){</p><p> st.getDos().write(new Pack().pack(lom));</p><p>
77、st.getDos().flush();</p><p> System.out.println("[server]: "+new DateProcess().lProcess()+"下發(fā)一條好友上線信息...");</p><p><b> }</b></p><p><b> }<
78、;/b></p><p><b> }</b></p><p><b> //發(fā)送離線消息</b></p><p> if(ChatTools.offlineMsg.size()!=0)</p><p> for (Iterator it = ChatTools.offlineMsg.
79、iterator();it.hasNext();){</p><p> MessageHead tm = (MessageHead)it.next();</p><p> if(tm.getDest()==getUserID()){</p><p> this.dos.write(new Pack().pack(tm));</p><p&g
80、t; this.dos.flush();</p><p> it.remove();</p><p> System.out.println("[server]: "+new DateProcess().lProcess()+"下發(fā)一條好友留言信息...");</p><p><b> }</b>
81、</p><p><b> }</b></p><p><b> 5.4 聊天模塊</b></p><p><b> 5.4.1 流程圖</b></p><p> 圖 5-4 聊天流程圖</p><p> 5.4.2 關(guān)鍵代碼</p&g
82、t;<p> dous.writeInt(totalLen);</p><p> dous.writeInt(type);</p><p> dous.writeInt(dest);</p><p> dous.writeInt(source);</p><p> dous.writeInt(rm.getUserID(
83、));</p><p> System.out.println("打包時(shí)候的userID "+rm.getUserID());</p><p> String tempPassword = rm.getPassword();</p><p> while(tempPassword.getBytes().length<16){</
84、p><p> tempPassword+="\0";</p><p><b> }</b></p><p> String tempNickname = rm.getNickname();</p><p> while(tempNickname.getBytes().length<20){&
85、lt;/p><p> tempNickname+="\0";</p><p><b> }</b></p><p> String tempPhoto = rm.getPhoto();</p><p> while(tempPhoto.getBytes().length<256){</
86、p><p> tempPhoto+="\0";</p><p><b> }</b></p><p> String tempSign = rm.getSign();</p><p> while(tempSign.getBytes().length<100){</p><
87、;p> tempSign+="\0";</p><p><b> }</b></p><p> dous.write(tempPassword.getBytes());</p><p> dous.write(tempNickname.getBytes());</p><p> dou
88、s.write(tempPhoto.getBytes());</p><p> dous.write(tempSign.getBytes());</p><p><b> 5.5 文件模塊</b></p><p><b> 5.5.1 流程圖</b></p><p> 圖 5-6 發(fā)送文件
89、流程圖</p><p> 5.5.2 關(guān)鍵代碼</p><p> 在客戶端采用JfileChooser來瀏覽本地文件,點(diǎn)擊瀏覽按鈕后,會(huì)彈出對(duì)話框,讓用戶選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。關(guān)鍵代碼如下:</p><p> if(((JLabel)e.getSource()).getName().equals("file&qu
90、ot;)){</p><p> JFileChooser jf=new JFileChooser("請(qǐng)選擇所要發(fā)送的文件"); //文件選擇器</p><p> jf.setDialogTitle("請(qǐng)選擇文件");</p><p> int result = jf.showOpenDialog(null);</p
91、><p> jf.setVisible(true);</p><p> if (result == JFileChooser.APPROVE_OPTION) {</p><p> selectedFile = jf.getSelectedFile();</p><p> if (selectedFile.exists()) {</p
92、><p> int len =0;</p><p> FileInputStream fis;</p><p> String name = selectedFile.getName();</p><p> ClientTools.name=name;</p><p> ClientTools.infor.set
93、Text("文件傳送邀請(qǐng)已經(jīng)發(fā)出,等待對(duì)方回應(yīng)...");</p><p> ClientTools.path=selectedFile.getAbsolutePath();</p><p><b> try {</b></p><p> fis = new FileInputStream(selectedFile);
94、</p><p> len = fis.available();</p><p> byte [] data = new byte[len];</p><p> fis.read(data);</p><p> } catch (Exception e1) {</p><p> e1.printStackTr
95、ace();</p><p><b> }</b></p><p> 5.6 用戶管理模塊</p><p><b> 5.6.1 流程圖</b></p><p> 圖 5-10 web用戶登錄圖</p><p> 由于這是后期延伸的項(xiàng)目功能,暫時(shí)并沒有實(shí)現(xiàn)。設(shè)計(jì)時(shí)
96、,決定是以Tomcat為服務(wù)器的Jsp頁面,對(duì)數(shù)據(jù)庫用戶通過Java JDBC技術(shù)對(duì)其數(shù)據(jù)進(jìn)行增刪改查。并附加踢用戶下線的功能。</p><p> 5.7 用戶界面的設(shè)計(jì)</p><p> 5.7.1 登陸界面</p><p> 登陸界面的實(shí)現(xiàn)比較簡單,是Jlabel ,JtextFeild,Jpanel等控件的集合</p><p>
97、 5.7.2 好友列表</p><p><b> 好友列表展開后:</b></p><p> 5.7.3 聊天界面</p><p> 雙擊好友頭像后,就會(huì)顯示出聊天界面:</p><p> 5.8服務(wù)器界面的設(shè)計(jì)</p><p><b> 6.系統(tǒng)測試</b>
98、</p><p> 6.1 測試中出現(xiàn)的問題</p><p> 1、單一用戶多人同時(shí)對(duì)話時(shí),出現(xiàn)有些用戶接收不到發(fā)過去的消息。</p><p><b> 2、</b></p><p><b> 6.2 如何解決</b></p><p> 1、采用獨(dú)立線程管理用戶對(duì)話
99、信息,實(shí)現(xiàn)聊天全雙工對(duì)話,確保鏈路暢通。</p><p> 6.3 項(xiàng)目存在沒有解決的問題</p><p> 1、軟件項(xiàng)目一開始,并沒有考慮過多數(shù)據(jù)持久化方面的安全性問題,所以所有的用戶信息、資料、帳號(hào)密碼等等都以Java IO流的方式,以預(yù)先設(shè)定好的格式、并以明文方式、Txt格式保存在本地磁盤下。這就造成了數(shù)據(jù)急不安全,操作麻煩等問題。</p><p> 2
100、、考慮到前期給后臺(tái)管理員的權(quán)限太少,后期將加入用戶管理模塊(前面論文中有具體設(shè)計(jì)),為管理員的操作增加功能。</p><p><b> 6.4擬用解決方法</b></p><p> 1、解決方法已經(jīng)在本論文數(shù)據(jù)庫設(shè)計(jì)中具體制定了出來,目標(biāo)將以Mysql為數(shù)據(jù)庫,Java JDBC技術(shù)對(duì)數(shù)據(jù)庫執(zhí)行增刪改查等操作。</p><p> 2、使用
101、JSP,Tomcat為服務(wù)器搭建動(dòng)態(tài)用戶交互平臺(tái),為管理員提供在線人員監(jiān)視,踢人下線等功能。</p><p><b> 結(jié)語</b></p><p> 本系統(tǒng)采用C/S模式,聊天室頁面簡潔,操作便捷,穩(wěn)定可靠,性能優(yōu)良。本系統(tǒng)可以實(shí)現(xiàn)通訊系統(tǒng)最基本的兩個(gè)功能:一是雙方能夠互相收發(fā)信息,二是雙方能夠互傳文件。后臺(tái)還可以對(duì)用戶進(jìn)行管理。</p><
102、p> 這次畢業(yè)設(shè)計(jì)用到了,Swing, Socket,采用MySQL作為數(shù)據(jù)庫,Eclipse作為開發(fā)工具?;旧习舜髮W(xué)所學(xué)習(xí)Java的所有知識(shí)。在畢業(yè)設(shè)計(jì)的過程中,加強(qiáng)了對(duì)多線程的理解和掌控。</p><p> 通過這次的畢業(yè)設(shè)計(jì),我充分體會(huì)到學(xué)習(xí)理論知識(shí)的重要性,但更加體會(huì)到動(dòng)手實(shí)踐的必要性。只有通過親身的動(dòng)手實(shí)踐,才能發(fā)現(xiàn)并解決問題,才能真正領(lǐng)悟某一技術(shù)的精髓。我相信自己會(huì)在將來的軟件設(shè)計(jì)、開
103、發(fā)過程中更進(jìn)一步地學(xué)習(xí),不斷提升自己的專業(yè)能力。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] Cornel,Horstmann 著.Core Java第3版.Prentice-Hall,1997 </p><p> [2] Bruce Eckel 著.Java編程思想.北京:機(jī)械工業(yè)出版社,2004.01<
104、/p><p> [3] Ivor Horton 著. Java2 入門經(jīng)典 .北京:機(jī)械工業(yè)出版社,2002.01</p><p> [4] Cay S.Horstmann,Gary Cornell 著.JAVA核心技術(shù) 卷Ⅰ(卷Ⅱ).北京:機(jī)械工業(yè)出版社</p><p> [5] 張蓓,趙國鋒著. JSP數(shù)據(jù)庫通用模塊開發(fā)與系統(tǒng)移植.北京:清華大學(xué)出版社 <
105、;/p><p> [6] 吳建,張旭東著. JSP網(wǎng)絡(luò)開發(fā)入門與實(shí)踐.北京:人民郵電出版社 </p><p> [7] 孫衛(wèi)琴著.Java網(wǎng)絡(luò)編程精解.北京::電子工業(yè)出版社</p><p> [8]饒鋒,毛迪林,代春陽.JAVA2安全機(jī)制與實(shí)例研究[J].計(jì)算機(jī)應(yīng)用與軟件, 2002 (11):35-37. </p><p> [9]
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---基于cs架構(gòu)的java網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)---畢業(yè)論文
- 畢業(yè)論文-基于java聊天系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)---畢業(yè)論文
- 畢業(yè)論文 基于java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文
- 基于java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文
- 基于java語言的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) (2)
- 基于java的聊天系統(tǒng)的設(shè)計(jì)于實(shí)現(xiàn)——畢業(yè)論文
- 基于java的聊天系統(tǒng)的設(shè)計(jì)于實(shí)現(xiàn)——畢業(yè)論文
- 本科畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文范文——基于java的聊天系統(tǒng)的設(shè)計(jì)于實(shí)現(xiàn)
- 基于java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)論文范文——基于java的聊天系統(tǒng)的設(shè)計(jì)于實(shí)現(xiàn)
- 網(wǎng)絡(luò)多人聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)論文】
- 基于java的cs模式網(wǎng)絡(luò)聊天室的畢業(yè)設(shè)計(jì)(doc畢業(yè)設(shè)計(jì)論文)
評(píng)論
0/150
提交評(píng)論