2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  河 南 警 察 學 院</p><p>  畢 業(yè) 論 文(設(shè)計)</p><p>  系 別 信息系 </p><p>  專 業(yè) 計算機網(wǎng)絡(luò)安全監(jiān)察 </p><p>  年 級

2、 2009 </p><p>  姓 名 張寧 </p><p>  論文(設(shè)計)題目 基于c/s架構(gòu)的 </p><p>  Java網(wǎng)絡(luò)聊天系統(tǒng) </p><p>  指導

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.即時通訊系統(tǒng)的相關(guān)研究………………………………………....7</p><p>  2.1 C/S開發(fā)模式……………………………………………...….7</p><p>  2.2即時通訊原理…………………………………………

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è)計………………………………………………………….....11</p><p>  4.1數(shù)據(jù)庫設(shè)計…………………………

9、…………………………11</p><p>  4.2數(shù)據(jù)庫模塊設(shè)計………………………………………………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活動圖…………………………………………………....14</p><p>  4.3系統(tǒng)類設(shè)計…………………………………………………….16</p><p>  5.系統(tǒng)實現(xiàn)…………………………………………………………......17</p><p>  5.1實現(xiàn)概況………………………………………

11、……………….17</p><p>  5.2注冊模塊……………………………………………………….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è)計…………………..………………..……..27</p><p>  5.8結(jié)語…………………………………….…………………………..30&

15、lt;/p><p>  基于c/s架構(gòu)的JAVA網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計與實現(xiàn)</p><p><b>  摘 要</b></p><p>  網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開發(fā)主要包括一個

16、網(wǎng)絡(luò)聊天服務(wù)器程序和一個網(wǎng)絡(luò)聊天客戶程序兩個方面。前者通過Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務(wù)器建立連接,來進行客戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機制的原理,通過直接繼承Thread類來建立多線程。開發(fā)中利用了計算機網(wǎng)絡(luò)編程的基本理論知識,如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計方法等。在網(wǎng)絡(luò)編程中對信息的讀取、發(fā)送

17、,是利用流來實現(xiàn)信息的交換,其中介紹了對實現(xiàn)一個系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過分析這些情況,該聊天工具采用Eclipse為基本開發(fā)環(huán)境和java語言進行編寫,首先可在短時間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對初始原型系統(tǒng)進行不斷修正和改進,直到形成可行系統(tǒng)。</p><p>  關(guān)鍵詞:即時通訊系統(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)了很多非常不錯的聊

22、天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。無論是個人還是企業(yè)等組織機構(gòu),對溝通的需求也在不斷發(fā)展,傳統(tǒng)的電話、傳真、郵件等溝通方式顯然已無法滿足當今人們工作和生活溝通的需要。隨著軟件、網(wǎng)絡(luò)和通訊三大現(xiàn)代信息技術(shù)的發(fā)展,在溝通、協(xié)作方面有著更多方便、快捷、實時等優(yōu)勢的即時通訊,成為繼電話、E-Mail之后又一個完全融入每個人生活的互聯(lián)網(wǎng)工具。</p><p>  Ja

23、va是一個由Sun公司開發(fā)而成的新一代編程語言。使用它可在各式各樣不同種機器、不同種操作平臺的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。不論你使用的是哪一種WWW瀏覽器,哪一種計算機,哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動的主頁。Java正在逐步成為Internet應(yīng)用的主要開發(fā)語言。它徹底改變了應(yīng)用軟件的開發(fā)模式,帶來了自PC機以來又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。</p><p&

24、gt;  1.2 開發(fā)目的和意義</p><p>  網(wǎng)絡(luò)通信在當今信息社會中起著不可或缺的作用,人們可以利用網(wǎng)絡(luò)通信技術(shù)進行即時的信息 交流。比如說QQ聊天工具,它就是利用網(wǎng)絡(luò)通信技術(shù)開發(fā)的一款眾所周知的網(wǎng)絡(luò)聊天工具。通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的范疇,隨著企業(yè)即時通訊工具的出現(xiàn),即時信息在網(wǎng)絡(luò)營銷中將發(fā)揮更大的作用。</p><p>  目前,信息交流是互聯(lián)網(wǎng)提供

25、的主要內(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上都可以使用。</p><p>  1.3 論文研究內(nèi)容</p><p><b>  1、即時通訊原理</b></

26、p><p>  首先驗證登陸,如果成功,則建立與服務(wù)端的socket連接,服務(wù)端新開啟一個線程專門為它服務(wù),將打包好的Message發(fā)送給服務(wù)器端,服務(wù)器端根據(jù)Message里面的信息,再將信息轉(zhuǎn)發(fā)給其他用戶。一個標準的C/S模式。</p><p><b>  2、Swing技術(shù)</b></p><p>  Swing是一個用于開發(fā)Java應(yīng)用程序

27、用戶界面的開發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺應(yīng)用程序可以使用任何可插拔的外觀風格。用來實現(xiàn)客服端的界面設(shè)計。</p><p><b>  3、系統(tǒng)的構(gòu)建</b></p><p>  客戶端采用C/S結(jié)構(gòu),以IO流的讀寫方式作為數(shù)據(jù)庫。使用戶信息以規(guī)定的格式在本地持久化存儲。</p><p>  2.即時通訊系統(tǒng)的相關(guān)研究&l

28、t;/p><p>  2.1 C/S開發(fā)模式</p><p>  C/S結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。缺點主要有以下幾個: </p><p>  而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴展性。這種方式遠程訪問需要專門的技術(shù),同時要對系統(tǒng)進行專門的

29、設(shè)計來處理分布式的數(shù)據(jù)。 </p><p>  客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺電腦出問題,如病毒、硬件損壞,都需要進行安裝或維護。還有,系統(tǒng)軟件升級時,每一臺客戶機需要重新安裝,其維護和升級成本非常高。(大多數(shù)沒法自動升級而需要人工升級) </p><p>  對客戶端的操作系統(tǒng)一般也會有限制??赡苓m應(yīng)于win7,但不能用于Windows 2000或W

30、indows XP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說Linux、Unix等。</p><p>  2.2 即時通訊原理</p><p>  登陸進入聊天軟件后,即顯示出好友列表,在線的顯示亮頭像,不在線的顯示灰色頭像。雙擊好友頭像即會顯示出聊天界面。</p><p>  在聊天頁面上,有發(fā)送文字,發(fā)送截圖,和發(fā)送文件的功能按鈕。</p>&l

31、t;p>  點擊“發(fā)送”按鈕之后,程序就會把輸入的信息的種類,信息內(nèi)容、本人的ID號、對方的ID號以及當前的時間等內(nèi)容打包成一個Message對象通過Socket發(fā)送到服務(wù)器端。</p><p>  服務(wù)器接收到Message之后,按照協(xié)議進行解析和轉(zhuǎn)發(fā)。這樣,雙方的即時通訊就實現(xiàn)了。</p><p>  2.3 Socket通信技術(shù)</p><p>  S

32、ocket程序的工作過程:</p><p>  1、建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。</p><p>  2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進行通信。</p><p>  3、關(guān)閉:通信結(jié)束時,再將所建的虛擬連接拆除。</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>  客戶端可以實現(xiàn)注冊,即時聊天、在線好友查看、好友上、下線彈

34、出窗口通知、服務(wù)器后臺系統(tǒng)信息發(fā)布,相互之間收發(fā)文件等等。還有,收發(fā)消息時,可以實現(xiàn)離線接收。</p><p>  服務(wù)器端應(yīng)當建立一個ServerSocket,并且不斷進行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超時)。服務(wù)器端應(yīng)當是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。</p><p><b>  3.2 可行性分析&l

35、t;/b></p><p>  本系統(tǒng)的可行性分析包括以下幾個方面的內(nèi)容:</p><p><b>  (1) 技術(shù)可行性</b></p><p>  使用Swing 和socket技術(shù),可以很輕松地開發(fā)出實用、簡便、高效的基于網(wǎng)絡(luò)的即時通訊系統(tǒng)。</p><p>  因此技術(shù)上是可以實現(xiàn)的。</p>

36、<p><b>  (2) 經(jīng)濟可行性</b></p><p>  計算機網(wǎng)絡(luò)已經(jīng)普及,因此在網(wǎng)絡(luò)設(shè)備上不需要進行大的投入。本系統(tǒng)需要Java JRE環(huán)境,由于并發(fā)使用人數(shù)比較少,所以成本很低。</p><p><b>  (3) 操作可行性</b></p><p>  只要一臺以上計算機連接在同一個局域網(wǎng)內(nèi),

37、本系統(tǒng)就可以安裝使用,所以操作上完全不存在問題。如果要實現(xiàn)internet上通訊,只需要將服務(wù)器端運行在一個有固定IP的公網(wǎng)上就可以。</p><p>  綜上所述,即時Java即時通訊系統(tǒng)是可行的。</p><p>  3.3 系統(tǒng)需求分析</p><p><b>  3.3.1功能分析</b></p><p>  本

38、系統(tǒng)要實現(xiàn)的功能如下:</p><p><b>  1)注冊</b></p><p>  服務(wù)器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的呢稱,性別,籍貫,個人資料等,接受完畢后,便通過JDBC與后臺數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記錄,如果成功,便向客戶返回其號碼。客戶收到服務(wù)器返回的信息后,便打開窗口登陸。</p><p><

39、;b>  2)登陸</b></p><p>  在客戶端,用戶輸入其號碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開始通過JDBC讀取數(shù)據(jù)庫,然后與用戶輸入的信息進行比對,如果成功,便打開主程序窗口。然后客戶向服務(wù)器請求讀取好友名單,服務(wù)器收到該請求,從數(shù)據(jù)庫中取出好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。</p><p>

40、<b>  3)聊天</b></p><p>  客戶端首先發(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ā)送

41、截圖</b></p><p>  客戶端A點擊截圖按鈕,將屏幕鎖定,截取圖片,將圖片儲存在byte[]數(shù)組中發(fā)送到服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。B接收到A發(fā)來的截圖信息,會根據(jù)byte[]構(gòu)造圖片,將圖片顯示出來。同樣,如果是未建立對話窗口,則自動打開顯示。</p><p><b>  5)發(fā)送文件</b></p>&l

42、t;p>  客戶端A點擊發(fā)送文件按鍵,從本地選擇文件,將文件在byte[]數(shù)組中分批次發(fā)送到服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來轉(zhuǎn)發(fā)。B接收到A發(fā)來的文件信息,會根據(jù)文件發(fā)送的狀態(tài)和byte[]構(gòu)造文件。</p><p><b>  6)日志</b></p><p>  客戶端發(fā)送和接收到的信息都會儲存在文本文檔中。默認儲存在C盤下面,會以用戶的登錄賬

43、號為名。</p><p><b>  7)對用戶的操作 </b></p><p>  管理員通過B/S的系統(tǒng)對用戶進行增加,修改,刪除,查找等操作,對系統(tǒng)進行維護。</p><p>  8)在線用戶的操作 </p><p>  管理員通過B/S的系統(tǒng)對在線用戶操作,可以踢用戶下線。</p><p>

44、;<b>  4.系統(tǒng)設(shè)計</b></p><p><b>  4.1 數(shù)據(jù)庫設(shè)計</b></p><p>  本系統(tǒng)中所涉及的主要實體及其屬性有:</p><p>  用戶(用戶賬號,用戶名,密碼,個性簽名,頭像ID,年齡,性別) </p><p>  E-R模型如圖所示。</p>

45、<p>  圖 4-1系統(tǒng)實體及其屬性</p><p><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)功能模塊圖:&

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 活動圖:</p><p><b>  1

47、)用戶登陸活動圖</b></p><p>  首先填寫登陸信息,提交以后服務(wù)器會對用戶名和密碼進行驗證。如果不正確,返回一個提示信息。如果登陸成功,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶。</p><p>  圖 4-6 用戶登錄活動圖</p><p><b>  2)發(fā)送消息活動圖&l

48、t;/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></p><p>

49、  4.3.1 服務(wù)端線程的設(shè)計:</p><p>  服務(wù)器端的核心是對應(yīng)客戶的線程,每個socket對應(yīng)一個線程,也就是每一個客戶端都在服務(wù)器端有一個相應(yīng)的線程。它負責轉(zhuǎn)發(fā)客戶端發(fā)來的消息。</p><p>  線程類為ClientThread:</p><p>  表4-3 ClientThread類</p><p><b&g

50、t;  客戶端線程類設(shè)計</b></p><p><b>  5.系統(tǒng)實現(xiàn)</b></p><p><b>  5.1 實現(xiàn)概況</b></p><p>  本系統(tǒng)可分為登錄、聊天、文件、用戶管理和注冊五個功能模塊。“登錄”模塊為用戶提供登錄界面,并在用戶登錄顯示好友列表;“聊天”模塊實現(xiàn)用戶的即時傳送信息,即

51、多用戶即時聊天,可以發(fā)送文字;“文件”模塊主要實現(xiàn)一用戶向另一用戶發(fā)送文件,對方可以選擇接受或者拒絕。聊天記錄會以文本文檔格式保存。</p><p>  下面詳細介紹各個模塊的具體實現(xiàn)。</p><p><b>  5.2 注冊模塊</b></p><p><b>  5.2.1 流程圖</b></p>&l

52、t;p>  圖 5-1 用戶注冊流程圖</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()+" 讀寫錯誤或者服務(wù)器未開啟...");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //

59、注冊方法</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ù)器端接收用戶驗證信息的代碼被寫在了一個線程public class ServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽端口,接收來自不同客戶端的請求,建立socket連接,也不會堵塞在主線程當中。</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>  如果驗證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)器上專門開啟一個針對當前用戶的線程,并且吧線程放入管理類中,便于日后的管理。</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("打包時候的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來瀏覽本地文件,點擊瀏覽按鈕后,會彈出對話框,讓用戶選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。關(guān)鍵代碼如下:</p><p>  if(((JLabel)e.getSource()).getName().equals("file&qu

90、ot;)){</p><p>  JFileChooser jf=new JFileChooser("請選擇所要發(fā)送的文件"); //文件選擇器</p><p>  jf.setDialogTitle("請選擇文件");</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("文件傳送邀請已經(jīng)發(fā)出,等待對方回應(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àn)。設(shè)計時

96、,決定是以Tomcat為服務(wù)器的Jsp頁面,對數(shù)據(jù)庫用戶通過Java JDBC技術(shù)對其數(shù)據(jù)進行增刪改查。并附加踢用戶下線的功能。</p><p>  5.7 用戶界面的設(shè)計</p><p>  5.7.1 登陸界面</p><p>  登陸界面的實現(xiàn)比較簡單,是Jlabel ,JtextFeild,Jpanel等控件的集合</p><p>

97、  5.7.2 好友列表</p><p><b>  好友列表展開后:</b></p><p>  5.7.3 聊天界面</p><p>  雙擊好友頭像后,就會顯示出聊天界面:</p><p>  5.8服務(wù)器界面的設(shè)計</p><p><b>  6.系統(tǒng)測試</b>

98、</p><p>  6.1 測試中出現(xiàn)的問題</p><p>  1、單一用戶多人同時對話時,出現(xiàn)有些用戶接收不到發(fā)過去的消息。</p><p><b>  2、</b></p><p><b>  6.2 如何解決</b></p><p>  1、采用獨立線程管理用戶對話

99、信息,實現(xiàn)聊天全雙工對話,確保鏈路暢通。</p><p>  6.3 項目存在沒有解決的問題</p><p>  1、軟件項目一開始,并沒有考慮過多數(shù)據(jù)持久化方面的安全性問題,所以所有的用戶信息、資料、帳號密碼等等都以Java IO流的方式,以預先設(shè)定好的格式、并以明文方式、Txt格式保存在本地磁盤下。這就造成了數(shù)據(jù)急不安全,操作麻煩等問題。</p><p>  2

100、、考慮到前期給后臺管理員的權(quán)限太少,后期將加入用戶管理模塊(前面論文中有具體設(shè)計),為管理員的操作增加功能。</p><p><b>  6.4擬用解決方法</b></p><p>  1、解決方法已經(jīng)在本論文數(shù)據(jù)庫設(shè)計中具體制定了出來,目標將以Mysql為數(shù)據(jù)庫,Java JDBC技術(shù)對數(shù)據(jù)庫執(zhí)行增刪改查等操作。</p><p>  2、使用

101、JSP,Tomcat為服務(wù)器搭建動態(tài)用戶交互平臺,為管理員提供在線人員監(jiān)視,踢人下線等功能。</p><p><b>  結(jié)語</b></p><p>  本系統(tǒng)采用C/S模式,聊天室頁面簡潔,操作便捷,穩(wěn)定可靠,性能優(yōu)良。本系統(tǒng)可以實現(xiàn)通訊系統(tǒng)最基本的兩個功能:一是雙方能夠互相收發(fā)信息,二是雙方能夠互傳文件。后臺還可以對用戶進行管理。</p><

102、p>  這次畢業(yè)設(shè)計用到了,Swing, Socket,采用MySQL作為數(shù)據(jù)庫,Eclipse作為開發(fā)工具?;旧习舜髮W所學習Java的所有知識。在畢業(yè)設(shè)計的過程中,加強了對多線程的理解和掌控。</p><p>  通過這次的畢業(yè)設(shè)計,我充分體會到學習理論知識的重要性,但更加體會到動手實踐的必要性。只有通過親身的動手實踐,才能發(fā)現(xiàn)并解決問題,才能真正領(lǐng)悟某一技術(shù)的精髓。我相信自己會在將來的軟件設(shè)計、開

103、發(fā)過程中更進一步地學習,不斷提升自己的專業(yè)能力。</p><p><b>  參考文獻</b></p><p>  [1] Cornel,Horstmann 著.Core Java第3版.Prentice-Hall,1997 </p><p>  [2] Bruce Eckel 著.Java編程思想.北京:機械工業(yè)出版社,2004.01<

104、/p><p>  [3] Ivor Horton 著. Java2 入門經(jīng)典 .北京:機械工業(yè)出版社,2002.01</p><p>  [4] Cay S.Horstmann,Gary Cornell 著.JAVA核心技術(shù) 卷Ⅰ(卷Ⅱ).北京:機械工業(yè)出版社</p><p>  [5] 張蓓,趙國鋒著. JSP數(shù)據(jù)庫通用模塊開發(fā)與系統(tǒng)移植.北京:清華大學出版社 <

105、;/p><p>  [6] 吳建,張旭東著. JSP網(wǎng)絡(luò)開發(fā)入門與實踐.北京:人民郵電出版社 </p><p>  [7] 孫衛(wèi)琴著.Java網(wǎng)絡(luò)編程精解.北京::電子工業(yè)出版社</p><p>  [8]饒鋒,毛迪林,代春陽.JAVA2安全機制與實例研究[J].計算機應(yīng)用與軟件, 2002 (11):35-37. </p><p>  [9]

溫馨提示

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

最新文檔

評論

0/150

提交評論