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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p>  (科研訓練、畢業(yè)設計)</p><p>  題 目:基于JAVA的網絡安全聊天工具:網絡功能部分</p><p><b>  姓 名: </b></p><p>  學 院:信息科學與技術學院</p>

2、<p><b>  系:計算機科學系</b></p><p>  專 業(yè):計算機科學與技術專業(yè)</p><p><b>  年 級: </b></p><p><b>  學 號: </b></p><p>  指導教師(校內): 職稱:

3、助理教授</p><p>  2010年 5 月 7 日</p><p>  基于JAVA的網絡安全聊天工具:網絡功能部分</p><p>  摘要 :人隨著互聯(lián)網的快速發(fā)展,網絡聊天工具已經作為一種重要的信息交流工具,受到越來越多的網民的青睞。目前,出現了很多非常不錯的聊天工具,其中應用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messag

4、er等等。但是越來越多的服務導致了信息的安全性一直在下降,所以小團體小范圍內的聊天工具就顯得十分有必要了,這也是我們一開始選擇這個課題的初衷。</p><p>  本工具系統(tǒng)開發(fā)主要包括一個服務器程序和一個客戶程序兩個方面。前者通過Socket套接字建立服務器,服務器能讀取、轉發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務器建立連接,來進行客戶端與客戶端的信息交流。其中通過直接繼承Thread類來建立多線程。

5、開發(fā)中利用了計算機網絡編程的基本理論知識,如TCP/IP協(xié)議、客戶端/服務器端模式(Client/Server模式)、網絡編程的設計方法等。</p><p>  關鍵詞: 聊天工具 數據庫 socket java C/S</p><p>  JAVA-based network safety chat implement: Network function part</p&g

6、t;<p>  Abstract: Person develops with Internet fleetness , the network chat implement already exchanges an implement as one kind of important information, favour by more and more many rebel citizen. At present, m

7、any very good chat implements has appeared , Netmeeting applying comparatively broad having among them, has pranced message QQ , MSN-Messager etc.More and more many service has led to but the information security have be

8、en coming down , the chat implement within range has looked like being nece</p><p>  Keyword: Chat implement ; data base ;socket ; java ; C/S</p><p><b>  目錄</b></p><p>&

9、lt;b>  目錄4</b></p><p><b>  第一章 緒論5</b></p><p>  1.1 JAVA的網絡功能與編程5</p><p>  1.1.1 網絡編程基礎知識5</p><p>  1.1.2 IP/TCP協(xié)議常識5</p><p>  1.

10、1.3 Socket的簡介6</p><p>  1.2 網絡編程在JAVA上的實現8</p><p>  1.2.1 Java網絡應用模型8</p><p>  1.2.2 客戶機/服務器環(huán)境下的Java應用程序8</p><p>  第二章 java網絡安全聊天系統(tǒng)設計10</p><p>  2.1課題

11、來源10</p><p>  2.2 聊天系統(tǒng)的設計步驟及功能模塊劃分10</p><p>  2.3聊天系統(tǒng)各功能模塊10</p><p>  2.4 需求分析11</p><p>  2.5 聊天系統(tǒng)的總體設計要點12</p><p>  第三章 系統(tǒng)設計與實現16</p><p&g

12、t;  3.1 開發(fā)環(huán)境與工具16</p><p>  3.2 硬件環(huán)境16</p><p>  3.3 各個功能模塊的具體實現16</p><p>  3.3.1 服務器的具體實現16</p><p>  3.3.2客戶端的具體實現18</p><p>  3.3.3 組員的加密實現19</p&g

13、t;<p>  3.4 功能模塊的測試20</p><p><b>  第四章 總結26</b></p><p>  4.1 畢業(yè)設計總結與展望26</p><p>  4.2 經驗與感想26</p><p><b>  致謝語27</b></p><p&

14、gt;<b>  [參考文獻]28</b></p><p><b>  緒論</b></p><p><b>  引言</b></p><p>  隨著互聯(lián)網逐步普及,人們的生活和工作也越來越離不開信息網絡的支持, 而QQ聊天工具等是人們最常見, 最直接的網上交流的方式。本聊天系統(tǒng)以聊天交流為主,為

15、廣大用戶提供一個借助網絡進行人際交往的平臺。</p><p>  本文所介紹的網絡聊天系統(tǒng)是基于開放的JAVA應用程序開發(fā)設計的,其主要特性是能動態(tài)、實時的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請求,易于維護和更新,其運行所需環(huán)境及其工作流程和各個功能控件的工作原理將在本文依次介紹,并且文中提供了部分程序源代碼。</p><p>  1.1 JAVA的網絡功能與編程</

16、p><p>  1.1.1 網絡編程基礎知識</p><p>  網絡編程的目的就是指直接或間接地通過網絡協(xié)議與其他計算機進行通訊。網絡編程中有兩個主要的問題,一個是如何準確的定位網絡上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數據傳輸。在TCP/IP協(xié)議中IP層主要負責網絡主機的定位,數據傳輸的路由,由IP地址可以唯一地確定Internet上的一臺主機。而TCP層則提供面向應用的

17、可靠的或非可靠的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心IP層是如何處理數據的。   目前較為流行的網絡編程模型是客戶機/服務器(C/S)結構。即通信雙方一方作為服務器等待客戶提出請求并予以響應??蛻魟t在需要服務時向服務器提出申請。服務器一般作為守護進程始終運行,監(jiān)聽網絡端口,一旦有客戶請求,就會啟動一個服務進程來響應該客戶,同時自己繼續(xù)監(jiān)聽服務端口,使后來的客戶也能及時得到服務。(參考文獻[2][3])</p>

18、;<p>  1.1.2 IP/TCP協(xié)議常識</p><p>  (1)IP、TCP協(xié)議的特點:</p><p>  TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協(xié)議/網際協(xié)議的縮寫, TCP/IP是當今網絡互聯(lián)的核心協(xié)議。TCP/IP協(xié)議的體系結構共有四個層次,即應用層、傳輸層、網絡互聯(lián)層和網絡接

19、口層。</p><p>  IP協(xié)議的作用:第一,它是網絡層的協(xié)議,提供互聯(lián)網上數據傳輸的統(tǒng)一格式。第二,提供不可靠的無連接的服務。第三,定義了互聯(lián)網上的傳輸數據的基本單元,提供了供路由選擇的信息,沒有差錯校驗和處理的機制。</p><p>  TCP協(xié)議的功能:差錯控制——可靠性、面向連接、分段(Segment)、端口號。TCP是傳輸控制協(xié)議,是面向連接的提供了一種可靠的傳輸服務,它用三

20、次握手和滑動窗口機制來保證傳輸的可靠性,及進行流量控制。</p><p>  TCP/IP協(xié)議具有以下特點:協(xié)議標準具有開放性,其獨立于特定的計算機硬件及操作系統(tǒng),可以免費使用。統(tǒng)一分配網絡地址,使得每個TCP/IP 設備在網絡中都具有唯一的IP地址。實現了高層協(xié)議的標準化,能為用戶提供多種可靠的服務。</p><p>  (2)TCP/IP協(xié)議進行傳輸數據傳輸的過程:</p>

21、<p>  應用程序為了傳輸數據會調用TCP,將數據和對應的參數傳給TCP,將TCP 數據包封裝在IP包內,通過網絡送給目的TCP。接收方TCP在接收到數據后通知上層應用程序,TCP將保證接收數據的正確性。在實現TCP的主機上,TCP可以被看成是一個模塊,和文件系統(tǒng)區(qū)別不大,TCP 也可以調用一些操作系統(tǒng)的功能,TCP不直接和網絡打交道,控制網絡的任務由專門的設備驅動模塊完成。TCP只是調用IP接口,向TCP提供所有TC

22、P需要的服務。</p><p><b>  (3)端口號:</b></p><p>  有的時候,一個ip地址不能完整的標識一臺服務器,這是應為一臺物理性的計算機同時運行著多個應用程序,這就需要我們來區(qū)別同一臺機子上的不同的服務,所以就在傳輸層和應用層上設置接口,就是 端口。端口實際是一個16位長的 地址,他的范圍是0~65535之間,其中0~1023是熟知端口,主要

23、是給提供服務的應用程序使用,這些端口是所有應用進程都只道的,1024~65535為一般端口,也稱動態(tài)端口、連接端口,用來隨時分配要求通信的各個客戶端應用程序。在數據傳輸過程中,服務器不斷的檢測分配給他的端口,發(fā)現要求和他通信的客戶端。(參考文獻[2][4])</p><p>  1.1.3 Socket的簡介</p><p>  Socket,簡稱套接字,用于實現網絡上客戶和服務器之間的連

24、接。也就是說網絡上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字,套接字是在比較低的層次上通信的。</p><p>  具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服務器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個socket建立連接,客戶端通過寫socket來通知服務器,以讀socket中的信息,類似的服務

25、器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個socket,通過讀寫和客戶端通信。</p><p>  Socket程序的工作過程:</p><p>  1、建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。</p><p>  2、數據通信:利用虛擬連接通道傳送數據信息進

26、行通道。</p><p>  3、關閉:通信結束時,再將所建的虛擬連接拆除。</p><p><b>  具體如下:</b></p><p><b>  服務器</b></p><p> ?。▓D1.1 網絡socket主要流程圖)</p><p><b>  三次握

27、手:</b></p><p>  第一次握手:原主機發(fā)送一個帶有本次連接的序號的請求的一個數據幀</p><p>  第二次握手:目的主機收到請求后,如果同意連接,則發(fā)回一個帶有一個本次連接序號和源端機連接序列號的確認。</p><p>  第三此握手:源端機收到含有兩次初始序列號的應答后,在向目的主機發(fā)送一個帶有兩次連接的序列號的確認。</p&g

28、t;<p><b>  具體過程如下</b></p><p>  (圖1.2 三次握手的流程)</p><p>  1.2 網絡編程在JAVA上的實現</p><p>  1.2 .1 Java網絡應用模型</p><p>  和Internet上的許多環(huán)境一樣,完整的Java應用環(huán)境實際上也是一個客戶機/

29、服務器環(huán)境,更確切地說是瀏覽器/服務器模型(即Browser/Server模型,簡稱Web模型)。但與傳統(tǒng)的客戶機/服務器(C/S) 的二層結構不同,應用Java的Web模型是由三層結構組成的。傳統(tǒng)的C/S結構通過消息傳遞機制,由客戶端發(fā)出請求給服務器,服務器進行相應處理后經傳遞機制送回客戶端。而在Web模型中,服務器一端被分解成兩部分:一部分是應用服務器(Web 服務器),另一部分是數據庫服務器。   針對分布式計算環(huán)境,Java通

30、過其網絡類庫提供了良好的支持。對數據分布,Java提供了一個URL(Uniform Resource Locator) 對象, 利用此對象可打開并訪問網絡上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。對操作分布,Java的客戶機/ 服務器模式可以把運算從服務器分散到客戶一端(服務器負責提供查詢結果,客戶機負責組織結果的顯示),從而提高整個系統(tǒng)的執(zhí)行效率,增加動態(tài)可擴充性。Java網絡類庫是Java 語言為適應Internet 環(huán)境

31、而進行的擴展。另外,為適應Interne</p><p>  1.2 .2 客戶機/服務器環(huán)境下的Java應用程序  </p><p>  客戶機/服務器在分布處理過程中,使用基于連接的網絡通信模式。該通信模式首先在客戶機和服務器之間定義一套通信協(xié)議,并創(chuàng)建一Socket類,利用這個類建立一條可靠的鏈接;然后,客戶機/服務器再在這條鏈接上可靠地傳輸數據。客戶機發(fā)出請求,服務器監(jiān)聽來自客戶機

32、的請求,并為客戶機提供響應服務。這就是典型的"請求-- 應答" 模式。下面是客戶機/服務器的一個典型運作過程:   1、服務器監(jiān)聽相應端口的輸入;   2、客戶機發(fā)出一個請求;   3、服務器接收到此請求;   4、服務器處理這個請求,并把結果返回給客戶機;   5、重復上述過程,直至完成一次會話過程。   按照以上過程,我們使用Java語言編寫一個分別針對服務器和客戶機的應用程序(Application

33、)。該程序在服務器上時,程序負責監(jiān)聽客戶機請求,為每個客戶機請求建立Socket 連接,從而為客戶機提供服務。本程序提供的服務為:讀取來自客戶機的一行文本,反轉該文本,并把它發(fā)回給客戶機?! ⊥ㄟ^該程序實例我們看到,使用Java語言設計C/S程序時需要注意以下幾點:  ?。?)、 服務器應使用ServerSocket 類來</p><p>  第二章 java網絡安全聊天系統(tǒng)設計</p><

34、;p><b>  2.1課題來源</b></p><p>  根據當前網絡的需求,網絡聊天越來越受各種網民所青睞。越來越多的人使用QQ,同時也越來越多的人對于QQ聊天的安全性擔憂,各種各樣的QQ病毒,QQ木馬,以及未加密的明文傳送,讓我們的網絡聊天環(huán)境越來越不安全。因此我決定以 基于java的網絡安全聊天工具 作為檢驗我4年學習的課題。</p><p>  2.

35、2 聊天系統(tǒng)的設計步驟及功能模塊劃分</p><p><b>  聊天系統(tǒng)工作原理圖</b></p><p>  (圖2.1 服務器和客戶端之間關系)</p><p>  2 .3聊天系統(tǒng)各功能模塊</p><p> ?。?)服務器程序模塊</p><p>  服務器與客戶間通過套接口Socket

36、(TCP)連接。在java中使用套接口相當簡單,Java API為處理套接口的通信提供了一個類java.net.Socket,使得編寫網絡應用程序相對容易。服務器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認端口為6868,然后無限循環(huán)調用accept()方法接受客戶程序的連接。</p><p><b> ?。?)客戶程序模塊</b>&

37、lt;/p><p>  客戶通過Socket(InetAddress,port)建立與服務器的連接。服務器與客戶都通過構造ObjectInputStream,ObjectOutputStream來建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務器accept()方法返回一個新建的Socket對象??蛻舳巳缓笙蚍掌靼l(fā)送消息,比如文件傳輸等,服務器收到來自客戶的請求后,針對不同的消

38、息處理請求。</p><p><b>  2.4 需求分析</b></p><p>  聊天系統(tǒng)不外乎兩個方面,服務器端和客戶端。簡單分析一下兩個方面所要完成的任務,對設計這個程序來說,等于完成了一半。首先來看一下服務器端的任務:</p><p> ?。保掌鞫藨斀⒁粋€ServerSocket,并且不斷進行偵聽是否有客戶端連接或者斷開連接

39、(包括判斷沒有響應的連接超時)?! 。玻掌鞫藨斒且粋€信息發(fā)送中心,所有客戶端的信息都傳到服務器端,由服務器端根據要求分發(fā)信息。</p><p>  3. 服務器應當建立一個用戶賬號的數據庫,用于管理用戶資料。</p><p>  4. 服務器應當能存有所有用戶的公鑰,以及所有加密過后的聊天記錄,當用戶需要時便于驗證信息內容。</p><p> ?。▓D2.2

40、服務器的主要功能圖)</p><p>  如上圖就是服務器端最主要的幾個任務。不難看出,服務器端的任務并不復雜。</p><p>  客戶端應該完成的工作包括:</p><p> ?。保c服務器端建立通信通道,向服務器端發(fā)送信息。(包過用戶資料注冊、用戶登錄、群聊、用戶間私聊等各種消息) ?。玻邮諄碜苑掌鞯男畔ⅰ8鶕⒌膬热葸M行操作,如抬出各種對話框、確認信

41、息等。</p><p> ?。▓D2.3 客戶端的主要功能圖)</p><p>  相對服務器而言,客戶端的任務更加簡單,有了以上的簡單分析,可以知道,解決上述幾個個問題,即完成了該聊天系統(tǒng)的核心。</p><p>  2.5 聊天系統(tǒng)的總體設計要點</p><p>  聊天系統(tǒng)的設計跟普通軟件設計有著許多不同的地方,普通軟件設計所考慮的因素,

42、例如,普通軟件需要對布局進入大量美化以及優(yōu)化設計等等,而聊天工具只要提供滿足用戶直接實時聊天即可。因此,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點:</p><p><b>  1、實現思想</b></p><p>  在Internet上的聊天程序一般都是以服務器提供服務端連接響應,使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這

43、是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實現服務器端和客戶端兩部分程序。</p><p>  2、服務器端工作流程</p><p> ?。▓D2.4 服務器主要運行流程圖)</p><p>  (圖2.5 服務器的界面功能圖)</p><p>  服務器先創(chuàng)建一個client數組,用來存放id、連接用戶的名字、地址等,每個

44、用戶對應一個client線程。同時連接用戶數據庫。</p><p>  對服務器本地端口(程序里默認是6868)進行監(jiān)聽,當收到客戶連接請求后,接收用戶發(fā)來的信息,這里將消息進行分段后進行2種不同操作。第一種是注冊請求,繼續(xù)接受用戶名、密碼等信息,然后查詢數據庫,判斷是否已經注冊,未注冊則插入用戶信息,返回成功信息給客戶端。已注冊則返回失敗消息。執(zhí)行完后回到流程1。第二種是登錄請求,繼續(xù)接受客戶端發(fā)來的用戶名和密

45、碼,查詢數據庫看是否有相同記錄,沒有則返回一個失敗信息給客戶端,然后回到流程1。若是用戶名和密碼都正確,則返回成功信息給客戶端。</p><p>  服務器將客戶的ID、用戶名、地址存到一個空的client,然后啟動該用戶的數據接受發(fā)送線程。然后返回流程1。</p><p>  Client線程啟動后一直循環(huán)接受信息,直到收到該客戶端發(fā)來消息。根據消息的標識符判斷是群發(fā)還是一對一單聊,群發(fā)

46、則所有的client線程將消息發(fā)回客戶端。如果是一對一單聊,則查找client數組的用戶名,找到相應的客戶,使用該用戶的對應線程發(fā)回該信息。</p><p>  如上服務器還有一些其他操作,如,更新在線用戶列表、發(fā)送在線用戶列表給客戶端,查看數據庫資料,對數據庫資料進行插入、修改、刪除等、還有聊天記錄的保存打開等。(為了安全起見,這里的聊天記錄都是用戶用自己私鑰加密過的,服務器沒法解密,但是可以為用戶發(fā)生爭端或者

47、需要時提供記錄,讓用戶自己解密驗證)</p><p><b>  3、客戶端工作流程</b></p><p>  客戶端程序相對與服務器來說要簡單一些:</p><p> ?。▓D2.6 客戶端主要界面功能圖)</p><p>  (圖2.7 客戶端接受消息線程主要功能圖)</p><p>  顯示

48、登錄界面,這里可以選擇注冊用戶,用戶登錄,修改服務器ip以及端口等(默認是本機ip,端口是6868)。選擇注冊進入流程2,選擇登錄進入流程3</p><p>  顯示注冊界面,這里要輸入用戶名,密碼,email等,對用戶名的要求有不為空以及不含畢設字樣即可。2次密碼需要一致。點擊發(fā)送將信息發(fā)給服務器,接受服務器返回信息,成功失敗均有相應的對話框彈出。</p><p>  發(fā)送登錄用戶名和密

49、碼,接受服務器發(fā)回信息,成功進入流程4,失敗則返回流程1。</p><p>  關閉打開界面,顯示對話界面,同時啟動一個專門接受服務器信息的線程。這里可以發(fā)送群聊消息,以及顯示你接受的消息。雙擊在線用戶列表的某一用戶,彈出相應的單聊窗口,可以進行一對一聊天。</p><p>  客戶端同樣有自動更新在線用戶,保存聊天記錄等功能。</p><p>  第三章 系統(tǒng)設計

50、與實現</p><p>  3.1 開發(fā)環(huán)境與工具</p><p>  基于JAVA聊天系統(tǒng)的設計主要運用JAVA與語言與Socket類結合而開發(fā)。其開發(fā)的主要環(huán)境包括:</p><p>  服務器端:(Windows平臺)首先應有java環(huán)境jdk,建議采用jdk1.6以上,另外還需配置classpath環(huán)境變量,需要有一個access的數據庫,配置好odbc的數

51、據源。數據源命名為kangxi。access數據庫里建立一個user表用來存儲用戶賬號信息。User表有7列,均為文本類型,分別是name,password,email,ans,創(chuàng)建登錄時間,最后登錄時間,賬號狀態(tài)。</p><p>  客戶端:只要有java環(huán)境jdk就可以,建議jdk1.6。</p><p><b>  3.2 硬件環(huán)境</b></p>

52、<p>  本系統(tǒng)運行環(huán)境所需用到的環(huán)境為:硬件配置 :</p><p>  中央處理器(CPU) :P4 2.0G的處理器;</p><p>  硬 盤:40GB以上硬盤;</p><p>  內 存:512 DDR內存;</p><p>  顯示器:15寸顯示器等;</p><p>  顯 卡

53、:128M顯存顯卡</p><p>  軟件環(huán)境:WINDOWS XP、ACCESS數據庫、jdk1.6.03等。</p><p>  3.3 各個功能模塊的具體實現</p><p>  3.3.1 服務器的具體實現</p><p>  用戶注冊、登錄、密碼找回</p><p>  服務器監(jiān)聽端口,接收到客戶端請求后,

54、接受類別信息。</p><p>  String str = din.readUTF();chuli(str, dos);</p><p>  調用chuli(String str, DataOutputStream dos)方法處理消息</p><p>  String tname = str.substring(0, str.lastIndexOf("

55、畢設"));</p><p>  String message4 = str.substring(str.lastIndexOf("畢設") + 2); </p><p>  這里的tname有3種值:第一種表示用戶發(fā)出注冊請求,message4則為具體的所有注冊消息,服務器收到都連接服務器,查詢是否已有該用戶名的賬號,沒有則將message4的值根據標識符分

56、段,然后插入數據庫,返回成功信息,反之亦然;第二種表示用戶發(fā)出密碼找回請求,message4為用戶輸入的密碼找回答案,服務器連接數據庫,查詢是否存在該用戶名和答案匹配的記錄,成功則將密碼發(fā)回給用戶,反之則發(fā)揮失敗消息。dos.writeUTF("ok!"+"畢設"+rs.getString(1));這里的rs為查詢數據庫的返回結果;第三種用戶登錄請求,message4為用戶密碼,服務器收到后連接數

57、據庫,判斷用戶信息是否正確,將結果返回給客戶端,當結果為成功時服務器繼續(xù)向下運行,失敗則回到監(jiān)聽端口的地方。</p><p><b>  客戶端線程的存儲</b></p><p>  服務器為了能有效的處理各個用戶的請求,創(chuàng)建了一個客戶線程數組</p><p>  public static Client user[] = new Client

58、[200];</p><p>  然后根據Client的定義用連接服務器端口的客戶端的編號、用戶名、輸入流、輸出流創(chuàng)建對象,啟動線程,最后返回繼續(xù)監(jiān)聽端口。</p><p>  user[sum] = new Client(sum, Server.message1, dos, din); </p><p>  創(chuàng)建與客戶對應的通信線程</p><

59、p>  new Thread(user[sum]).start();</p><p>  啟動發(fā)送數據到客戶端線程</p><p>  服務器中各個客戶端通信線程</p><p>  首先當客戶線程啟動時調用刷新在線用戶的方法:Server.rid();當服務器中接受客戶端消息線程收到消息后,先進行預處理</p><p>  Strin

60、g tname = str.substring(0, str.lastIndexOf("標識符"));</p><p>  String message = str.substring(str.lastIndexOf("標識符") + 3);</p><p>  將消息的對象和消息的具體內容提取出來,然后根據對象的值來判斷客戶端的請求種類。</

61、p><p>  if (tname.equalsIgnoreCase("exit"))</p><p>  當tname值為exit時,表示客戶端下線了。此時服務器就要將play[]中該客戶端的用戶名刪去,同時調用刷新在線用戶列表的方法rid()。</p><p>  if (tname.equalsIgnoreCase("all"

62、;)),</p><p>  當tname值為all時,表示這條消息是發(fā)給所有人的,服務器于是調用所有的在線用戶線程,將消息發(fā)給去。</p><p>  for (int i = 0; i < m; i++){ </p><p>  mess = this.name + " 對所有人說\n" + message;</p>&

63、lt;p>  Server.user[i].dos.writeUTF(mess);}</p><p>  這里的this.name是發(fā)出消息人的名字。當tname的值不為exit和all時,表示這條消息是私聊的消息,而且tname是接受客戶端的用戶名。此時要先找到接受用戶端的線程,然后才發(fā)回消息。</p><p>  for (int i = 0; i < m; i++) &

64、lt;/p><p>  {if (tname.equalsIgnoreCase(Server.user[i].name)) {</p><p>  Server.user[i].dos.writeUTF(this.name + "設畢" + mess);}}</p><p>  當線程從接到消息后經過這3步就完成了對這條消息的處理,然后循環(huán)回去繼續(xù)等

65、待接受此用戶的消息。</p><p>  String str = new String(din.readUTF());</p><p><b>  在線用戶列表刷新</b></p><p>  創(chuàng)建一個String數組要來存放此時在線的用戶列表</p><p>  public static String play[]

66、 = new String[200];</p><p>  當有用戶上線或者下線時就對play[]進行操作,接著將界面中的用戶表清空,然后把play[]中的所有值插入到表中,同時調用所有的在線用戶通信線程把更新的play[]加上標識符發(fā)送出去,客戶端收到后根據標識符判斷為列表更新消息,也清空列表然后插入新的play[]值。</p><p>  聊天信息的保存以及打開</p>

67、<p>  點擊界面的保存記錄按鈕,調用保存記錄方法。</p><p>  File a1=new File("jilu.txt");</p><p>  if(!a1.exists()){ a1.createNewFile(); }\\當沒有jilu.txt文件時創(chuàng)建文件</p><p>  將顯示區(qū)域的消息存以追加的方式寫入到服務器

68、目錄下的jilu.txt文件,然后清空消息顯示區(qū)域的文字。</p><p>  點擊菜單欄的打開記錄選項,彈出一個對話框,打開服務器目錄下的jilu.txt文件,將內容顯示在對話框,當無文件時顯示為空。</p><p><b>  數據庫的連接</b></p><p>  首先在數據庫創(chuàng)建表,然后在控制面板的管理工具->數據源 里面添加數

69、據源。在程序需要連接數據庫時</p><p>  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p><p>  con = DriverManager.getConnection("jdbc:odbc:kangxi", "", "");</p>

70、<p>  這是連接數據庫的驅動以及連接數據源的用戶名和密碼。</p><p>  String sqlstring = "SELECT * FROM user ";</p><p>  java.sql.PreparedStatement ps = con.prepareStatement(sqlstring);</p><p>  

71、rs = ps.executeQuery();</p><p>  這里的sqlstring用來存儲數據庫語言,然后SQL語句對數據庫查詢操作將返回一個ResultSet對象。如果是插入以及更新數據庫則不需要返回值,只需要更新數據庫即可。</p><p>  rs = ps.executeQuery();</p><p>  這里即表示對數據庫的操作進行更新。<

72、;/p><p>  對用戶賬號的基本操作</p><p>  點擊菜單欄的用戶資料管理選項,彈出賬號處理窗口,服務器連接數據庫,然后將所有的用戶信息顯示到窗口的中間</p><p>  String sqlstring = "SELECT * FROM user"; </p><p>  PreparedStatement p

73、s = con.prepareStatement(sqlstring);</p><p>  rs = ps.executeQuery();rs即為所有用戶信息</p><p>  在窗口菜單欄可以選擇具體的操作,如新建賬號、刪除賬號、查找賬號、修改賬號、退出管理等。關閉時斷開與數據庫的連接。</p><p>  3.3.2客戶端的具體實現</p>&

74、lt;p>  連接服務器的設置 </p><p>  點擊設置,可以設置連接服務器的ip地址和端口,只有知道了服務器的ip以及開放端口才能正確連接服務器。</p><p><b>  用戶賬號注冊</b></p><p>  點擊注冊,彈出注冊窗口,填寫用戶的基本信息,這里要求用戶名不準為空,并且不能含標識符,因為程序很多地方需要用標識

75、符來分段信息。密碼2詞輸入要一致,密碼找回答案不為空。</p><p>  當輸入完后,點注冊,客戶端將信息發(fā)送給服務器</p><p>  str=na1+標識符1+na2+標識符2+na3+標識符3+na4;</p><p>  mess=標識符4+標識符0+str; dos.writeUTF(mess);</p><p>  na1-n

76、a4為用戶信息,標識符0-標識符3起分隔作用,標識符4表示這條消息是注冊消息。然后接受服務器返回的結果,彈出相應的對話窗提示用戶結果。</p><p><b>  密碼找回功能</b></p><p>  點擊密碼找回,彈出密碼找回窗口,輸入賬號以及密碼找回問題的答案,將信息用標識符組合發(fā)給服務器,然后接受服務器的返回信息,返回標識符為ok則填出窗口顯示用戶名以及密碼

77、,失敗則提示輸入信息不正確。</p><p><b>  登錄賬號</b></p><p>  輸入用戶名和密碼后點登陸,將信息發(fā)給服務器,接受服務器返回結果,ok則關閉當前窗口打開對話窗口,失敗則提示用戶名密碼不正確。</p><p><b>  客戶端接受信息線程</b></p><p>  當

78、客戶端登錄后,創(chuàng)建一個專門負責處理服務器發(fā)來消息的線程,循環(huán)接受消息。</p><p>  這里接收到的消息根據分隔符有3種:第一種分隔符表示這條消息是刷新在線用戶列表的,則清空用戶列表,然后將信息分段截取后的結果插入列表;第二種分隔符表示消息是群聊消息,則在消息顯示文本區(qū)域顯示。</p><p>  displayarea.append(str+"\n\n");

79、 displayarea.setCaretPosition(displayarea.getText().length());\\這里的作用是滾屏</p><p>  displayarea是文本區(qū)域;第三種分隔符是表示這是一對一單聊的消息,將消息根據分隔符截取,得到消息的發(fā)送人,查找是否已經有與該用戶私聊的對話框,沒有則彈出與該用戶私聊的對話框,并顯示本條消息。如果已經有與該用戶私聊的對話框

80、,則追加顯示本條信息。</p><p><b>  與在線用戶私聊</b></p><p>  雙擊在線用戶列表中的用戶名,彈出與該用戶私聊的對話窗口,在此次上線過程中這個對話窗口都將負責與該用戶的私聊,即使關閉了,該對話框也只是隱藏起來。</p><p><b>  聊天記錄的保存</b></p><

81、p>  點擊界面的保存記錄按鈕,調用保存記錄方法。</p><p>  File a1=new File(fname+".txt");</p><p>  if(!a1.exists()){ a1.createNewFile(); }</p><p>  將顯示區(qū)域的消息存以追加的方式寫入到客戶端目錄下的以登錄用戶名命名的文件,然后清空消息

82、顯示區(qū)域的文字。點擊菜單欄的打開記錄選項,彈出一個對話框,打開客戶端目錄下以登錄用戶名命名的文件,將內容顯示在對話框,當無文件時顯示為空。</p><p>  3.3.3 組員的加密實現</p><p>  同組的另一位同學將在我完成的模塊基礎上加入安全加密,大概功能有:</p><p>  當用戶注冊時自動生成用戶的RSA公私密鑰,保存在用戶端,將公鑰發(fā)給服務器

83、;每當用戶發(fā)信息時想用des加密消息,再用私鑰加密對稱密鑰。達到對消息簽名的目的;服務器只能看到群聊的消息,而私聊的消息顯示的是加密過后的亂碼,這是為了保護用戶的隱私,同時當用戶需要聊天記錄時可以發(fā)回給用戶解密驗證。</p><p>  3.4 功能模塊的測試</p><p>  本次畢設的編譯環(huán)境,及編寫平臺為java。主要用到的類為java.net包中的Socket類和javax.sw

84、ing包中的類。</p><p> ?。▓D3.1 服務器主界面)</p><p>  圖3.1為服務器開始界面,下方各個用戶信息顯示區(qū)域,右側有一個在線用戶列表(當有用戶登錄退出時都會更新,同時發(fā)送更新消息給所有客戶端)。保存記錄按鈕可以將信息存到服務器本地,可以通過file菜單里面的打開記錄進行查看。File菜單里面可以選擇賬號數據管理。</p><p> ?。▓D

85、3.2 服務器賬號管理主界面)</p><p>  圖3.2即為用戶資料管理界面,下方顯示所有注冊用戶的基本信息,操作菜單里面可以選擇對數據庫進行插入,修改,刪除,查詢等操作。</p><p>  服務器線程在程序運行期間一直有效,接受客戶端請求信息,轉發(fā)客戶端聊天內容,查看用戶信息。</p><p>  (圖3.3 客戶端登陸界面)</p><

86、p>  客戶端運行時必須先登陸,登陸界面如圖三,這里可以選擇登錄賬號,注冊用戶,密碼找回,修改連接服務器ip以及端口等。</p><p> ?。▓D3.4 客戶端注冊界面)</p><p>  圖3.4為用戶注冊界面,這里要填寫用戶的基本資料,當你用戶名為空或者包含畢設字樣時會有對話框提示。注冊成功還是失敗都會有提示。如下:</p><p> ?。▓D3.5 注冊

87、時的各種提示)</p><p> ?。▓D3.6 密碼找回界面)</p><p>  圖3.6為密碼找回的界面,需要輸入注冊時填寫的密碼找回答案,正確的話會彈出如圖3.7的對話框。</p><p>  (圖3.7 密碼找回結果界面)</p><p> ?。▓D3.8 客戶端聊天主界面)</p><p>  圖3.8為用戶聊

88、天主界面,左上方為聊天記錄區(qū)域,左下方為用戶發(fā)送信息區(qū)域,右上方為在線用戶列表。雙擊用戶名會彈出一對一窗口如下圖3.9.</p><p> ?。▓D3.9 客戶端用戶間私聊界面)</p><p>  上圖中窗口sissi是用戶kangxi雙擊sissi用戶后彈出的界面,輸入消息后,在用戶sissi的電腦上就會彈出窗口kangxi顯示剛剛kangxi發(fā)給sissi的消息。</p>

89、<p> ?。▓D3.10 客戶端聊天記錄)</p><p>  圖3.10為用戶打開聊天記錄是彈出的窗口。</p><p>  本聊天工具的所有一對一消息都是經過加密的如下圖</p><p> ?。▓D3.11 服務器可見消息圖)</p><p>  服務器只能看到群聊的明文,私聊只能看到加密過后的消息。</p>&l

90、t;p><b>  第四章 總結</b></p><p>  4.1 畢業(yè)設計總結與展望</p><p>  本畢業(yè)設計實現了簡單的實時聊天功能,經過細心的調試和排錯解決了絕大部分的問題。但幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經過精心維護的非商業(yè)軟件。本聊天系統(tǒng)程序對于初涉此領域的畢業(yè)設計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還

91、有許多未能解決的缺陷。</p><p>  目前本聊天系統(tǒng)還有待完善的功能:聊天系統(tǒng)缺乏好友列表;沒有實現文件發(fā)送功能;沒有辦法發(fā)送圖片等。</p><p>  盡管畢業(yè)設計到現在已接近尾聲,但是對于上述的缺陷,本人還會不斷對聊天系統(tǒng)進一步的完善它,期望在今后的日子里憑借自身的技術把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。</p><p><b>  4.2 經驗

92、與感想</b></p><p>  基本JAVA的網絡安全聊天工具的開發(fā)與實現作為畢業(yè)設計,是本人目前做過的最大的程序。</p><p>  平時自己也常用各種聊天工具進行聊天,因此,自己也曾想過以后學會了電腦就一定親自設計一款聊天工具,如今,總算實現了自己的夢想。基本JAVA聊天系統(tǒng)設計與實現畢業(yè)設計正是建立在Java平臺上,是本人以前未曾接觸過的領域。憑著探索新知識的熱情,

93、我選擇了該設計題目。</p><p>  學習該平臺背景和功能的時間遠遠超出了我想象的時間。在設計初期,為了畫出一個簡單的圖形,都需要花一定的時間去掌握和熟悉。為了進一步探索深層次的技巧,我花費了大量時間在sun的Java主頁上,閱讀了十幾篇技巧和代碼樣例。</p><p>  在學習期間,本人還通過網上的各種JAVA源碼進行學習與研究,我原以為這樣的設計水平將無法完成畢業(yè)設計,但當掌握了

94、大部分應用技巧時,剩下的聊天系統(tǒng)思路的設計就顯得不是最大的障礙了。</p><p>  我在一個月內寫完這個程序,經過了很多次的調試,終于完成了現在的程序。原先認為不可能的事,我發(fā)現,如果有不畏困難的信心和肯鉆研的勇氣,就一定會完成,甚至達到意想不到的效果。</p><p><b>  致謝語</b></p><p>  緊張而忙碌的畢業(yè)設計就

95、要結束了,在完成了系統(tǒng)的功能設計后,我感到由衷的喜悅和自豪。在我做畢業(yè)設計期間,許多老師,同學和朋友給我無私的關懷和幫助,在此,我要向他們表示衷心的感謝。</p><p>  首先,我要感謝學校的老師在畢業(yè)設計期間給了我悉心的關懷與幫助,并且給了我許多關鍵的,建設性的指導。</p><p>  這次的畢業(yè)設計讓我受益匪淺??梢赃@樣說,用計算機來解決繁重而低效的手工管理工作,計算機發(fā)展史上的

96、必然。在理論課的學習中,我掌握了基礎課和專業(yè)課的理論知識,也曾經做過一些程序設計的聯(lián)系和計算機綜合試驗,但真正動手設計一個管理軟件,還是第一次。在這次的畢業(yè)設計中,我曾遇到了許多困難,而在克服這些困難的過程中,我的各方面的能力又有了很大的提高,使我的理論知識更好的與實踐相結合,增強了專業(yè)技能的可實踐性。從調研,需求分析到查找資料,結構設計,詳細設計以及調試程序,到最后的寫使用說明書,我終于設計出了一個比較完整的,周密的,可使用的聊天系統(tǒng)

97、。通過這次的畢業(yè)設計,我真正了解了軟件工程設計的整個過程,既鞏固了以前的理論知識,也為我以后的工作奠定了良好的基礎。</p><p>  當然,由于時間的短促,我所完成的系統(tǒng)并不是盡善盡美的,還有待進一步的修改和完善。最后,請允許我再一次向畢業(yè)期間無私幫助過我的老師,同學和朋友表示最衷心的感謝。</p><p><b>  [參考文獻]</b></p>

98、<p>  [1] (美)David M.Geary,李建森,蔣欣軍.JAVA2圖形設計卷2:SWING [M]. 北京: 機械工業(yè)出版社, 2000.</p><p>  [2](美)Bruce Eckel  , 侯捷 . Java編程思想(第2版) [M].北京: 機械工業(yè)出版社, 2002.</p><p>  [3](美)Elliotte Rusty Harol

溫馨提示

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

評論

0/150

提交評論