畢業(yè)設計基于JAVA的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分(最終版)_第1頁
畢業(yè)設計基于JAVA的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分(最終版)_第2頁
畢業(yè)設計基于JAVA的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分(最終版)_第3頁
畢業(yè)設計基于JAVA的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分(最終版)_第4頁
畢業(yè)設計基于JAVA的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分(最終版)_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本科畢業(yè)論文(科研訓練、畢業(yè)設計)題 目:基于java的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分姓 名:黃僑星學 院:信息科學與技術學院系:計算機科學系專 業(yè):計算機科學與技術專業(yè)年 級:2006級學 號:23020062203895指導教師(校內(nèi)):莊朝暉 職稱:助理教授2010年 5 月 7 日基于java的網(wǎng)絡安全聊天工具:網(wǎng)絡功能部分摘要 :人隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯的聊天工具,其中應用比較廣泛的有netmeeting、騰訊qq、msn-messager等等。但是越來越多的服務導致了信息的安全性一直在下降

2、,所以小團體小范圍內(nèi)的聊天工具就顯得十分有必要了,這也是我們一開始選擇這個課題的初衷。本工具系統(tǒng)開發(fā)主要包括一個服務器程序和一個客戶程序兩個方面。前者通過socket套接字建立服務器,服務器能讀取、轉發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務器建立連接,來進行客戶端與客戶端的信息交流。其中通過直接繼承thread類來建立多線程。開發(fā)中利用了計算機網(wǎng)絡編程的基本理論知識,如tcp/ip協(xié)議、客戶端/服務器端模式(client/server模式)、網(wǎng)絡編程的設計方法等。關鍵詞: 聊天工具 數(shù)據(jù)庫 socket java c/sjava-based network safety chat i

3、mplement: network function partabstract: 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, many very good chat implements has appeared , netmeeting applying

4、 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 been coming down , the chat implement within range has looked like being necessary very therefore groupuscule is small , this has been also that w

5、e once start the original intention choosing this problems. implement system develop includes one server procedure and a two customers procedure aspect mainly. the former builds a server by socket cover meet character , the server can fetch , transmit a customer to hold hair doing information, can r

6、efresh consumer listing together. the latter passes with server building-up connection , does the end carrying out a customer and customer whole course of information exchange. come to build multiwire cheng among them by inheriting thread directly the kind. developing the fundamental theory knowledg

7、e being hit by the programming having made use of a computer network , holding the pattern (client/server pattern) , network programming design procedures if the tcp/ip agreement , the customer hold/ a server and so on.keyword: chat implement ; data base ;socket ; java ; c/s目 錄目錄4第一章 緒論5 1.1 java的網(wǎng)絡

8、功能與編程5 1.1.1 網(wǎng)絡編程基礎知識5 1.1.2 ip/tcp協(xié)議常識5 1.1.3 socket的簡介6 1.2 網(wǎng)絡編程在java上的實現(xiàn)8 1.2.1 java網(wǎng)絡應用模型8 1.2.2 客戶機/服務器環(huán)境下的java應用程序8第二章 java網(wǎng)絡安全聊天系統(tǒng)設計10 2.1課題來源10 2.2 聊天系統(tǒng)的設計步驟及功能模塊劃分10 2.3聊天系統(tǒng)各功能模塊10 2.4 需求分析11 2.5 聊天系統(tǒng)的總體設計要點12第三章 系統(tǒng)設計與實現(xiàn)16 3.1 開發(fā)環(huán)境與工具16 3.2 硬件環(huán)境16 3.3 各個功能模塊的具體實現(xiàn)16 3.3.1 服務器的具體實現(xiàn)16 3.3.2客戶端

9、的具體實現(xiàn)18 3.3.3 組員的加密實現(xiàn)19 3.4 功能模塊的測試20第四章 總結26 4.1 畢業(yè)設計總結與展望26 4.2 經(jīng)驗與感想26致謝語27參考文獻28第1章 緒論引言 隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來越離不開信息網(wǎng)絡的支持, 而qq聊天工具等是人們最常見, 最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個借助網(wǎng)絡進行人際交往的平臺。 本文所介紹的網(wǎng)絡聊天系統(tǒng)是基于開放的java應用程序開發(fā)設計的,其主要特性是能動態(tài)、實時的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請求,易于維護和更新,其運行所需環(huán)境及其工作流程和各個功能控件的工作原理將

10、在本文依次介紹,并且文中提供了部分程序源代碼。1.1 java的網(wǎng)絡功能與編程1.1.1 網(wǎng)絡編程基礎知識 網(wǎng)絡編程的目的就是指直接或間接地通過網(wǎng)絡協(xié)議與其他計算機進行通訊。網(wǎng)絡編程中有兩個主要的問題,一個是如何準確的定位網(wǎng)絡上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數(shù)據(jù)傳輸。在tcp/ip協(xié)議中ip層主要負責網(wǎng)絡主機的定位,數(shù)據(jù)傳輸?shù)穆酚桑蒳p地址可以唯一地確定internet上的一臺主機。而tcp層則提供面向應用的可靠的或非可靠的數(shù)據(jù)傳輸機制,這是網(wǎng)絡編程的主要對象,一般不需要關心ip層是如何處理數(shù)據(jù)的。 目前較為流行的網(wǎng)絡編程模型是客戶機/服務器(c/s)結構。即通信雙方

11、一方作為服務器等待客戶提出請求并予以響應??蛻魟t在需要服務時向服務器提出申請。服務器一般作為守護進程始終運行,監(jiān)聽網(wǎng)絡端口,一旦有客戶請求,就會啟動一個服務進程來響應該客戶,同時自己繼續(xù)監(jiān)聽服務端口,使后來的客戶也能及時得到服務。(參考文獻23)1.1.2 ip/tcp協(xié)議常識(1)ip、tcp協(xié)議的特點: tcp/ip(transmission control protocol/internet protocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫, tcp/ip是當今網(wǎng)絡互聯(lián)的核心協(xié)議。tcp/ip協(xié)議的體系結構共有四個層次,即應用層、傳輸層、網(wǎng)絡互聯(lián)層和網(wǎng)絡接口層。 ip協(xié)議的作用:第一,它

12、是網(wǎng)絡層的協(xié)議,提供互聯(lián)網(wǎng)上數(shù)據(jù)傳輸?shù)慕y(tǒng)一格式。第二,提供不可靠的無連接的服務。第三,定義了互聯(lián)網(wǎng)上的傳輸數(shù)據(jù)的基本單元,提供了供路由選擇的信息,沒有差錯校驗和處理的機制。 tcp協(xié)議的功能:差錯控制可靠性、面向連接、分段(segment)、端口號。tcp是傳輸控制協(xié)議,是面向連接的提供了一種可靠的傳輸服務,它用三次握手和滑動窗口機制來保證傳輸?shù)目煽啃?,及進行流量控制。 tcp/ip協(xié)議具有以下特點:協(xié)議標準具有開放性,其獨立于特定的計算機硬件及操作系統(tǒng),可以免費使用。統(tǒng)一分配網(wǎng)絡地址,使得每個tcp/ip 設備在網(wǎng)絡中都具有唯一的ip地址。實現(xiàn)了高層協(xié)議的標準化,能為用戶提供多種可靠的服務。

13、(2)tcp/ip協(xié)議進行傳輸數(shù)據(jù)傳輸?shù)倪^程: 應用程序為了傳輸數(shù)據(jù)會調用tcp,將數(shù)據(jù)和對應的參數(shù)傳給tcp,將tcp 數(shù)據(jù)包封裝在ip包內(nèi),通過網(wǎng)絡送給目的tcp。接收方tcp在接收到數(shù)據(jù)后通知上層應用程序,tcp將保證接收數(shù)據(jù)的正確性。在實現(xiàn)tcp的主機上,tcp可以被看成是一個模塊,和文件系統(tǒng)區(qū)別不大,tcp 也可以調用一些操作系統(tǒng)的功能,tcp不直接和網(wǎng)絡打交道,控制網(wǎng)絡的任務由專門的設備驅動模塊完成。tcp只是調用ip接口,向tcp提供所有tcp需要的服務。(3)端口號: 有的時候,一個ip地址不能完整的標識一臺服務器,這是應為一臺物理性的計算機同時運行著多個應用程序,這就需要我們

14、來區(qū)別同一臺機子上的不同的服務,所以就在傳輸層和應用層上設置接口,就是 端口。端口實際是一個16位長的 地址,他的范圍是065535之間,其中01023是熟知端口,主要是給提供服務的應用程序使用,這些端口是所有應用進程都只道的,102465535為一般端口,也稱動態(tài)端口、連接端口,用來隨時分配要求通信的各個客戶端應用程序。在數(shù)據(jù)傳輸過程中,服務器不斷的檢測分配給他的端口,發(fā)現(xiàn)要求和他通信的客戶端。(參考文獻24)1.1.3 socket的簡介 socket,簡稱套接字,用于實現(xiàn)網(wǎng)絡上客戶和服務器之間的連接。也就是說網(wǎng)絡上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字

15、,套接字是在比較低的層次上通信的。 具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服務器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個socket建立連接,客戶端通過寫socket來通知服務器,以讀socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個socket,通過讀寫和客戶端通信。 socket程序的工作過程:1、建立socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)

16、據(jù)信息進行通道。3、關閉:通信結束時,再將所建的虛擬連接拆除。具體如下:服務器(圖1.1 網(wǎng)絡socket主要流程圖)三次握手:第一次握手:原主機發(fā)送一個帶有本次連接的序號的請求的一個數(shù)據(jù)幀第二次握手:目的主機收到請求后,如果同意連接,則發(fā)回一個帶有一個本次連接序號和源端機連接序列號的確認。第三此握手:源端機收到含有兩次初始序列號的應答后,在向目的主機發(fā)送一個帶有兩次連接的序列號的確認。具體過程如下(圖1.2 三次握手的流程)1.2 網(wǎng)絡編程在java上的實現(xiàn)1.2 .1 java網(wǎng)絡應用模型和internet上的許多環(huán)境一樣,完整的java應用環(huán)境實際上也是一個客戶機/服務器環(huán)境,更確切地說

17、是瀏覽器/服務器模型(即browser/server模型,簡稱web模型)。但與傳統(tǒng)的客戶機/服務器(c/s) 的二層結構不同,應用java的web模型是由三層結構組成的。傳統(tǒng)的c/s結構通過消息傳遞機制,由客戶端發(fā)出請求給服務器,服務器進行相應處理后經(jīng)傳遞機制送回客戶端。而在web模型中,服務器一端被分解成兩部分:一部分是應用服務器(web 服務器),另一部分是數(shù)據(jù)庫服務器。 針對分布式計算環(huán)境,java通過其網(wǎng)絡類庫提供了良好的支持。對數(shù)據(jù)分布,java提供了一個url(uniform resource locator) 對象, 利用此對象可打開并訪問網(wǎng)絡上的對象,其訪問方式與訪問本地文件

18、系統(tǒng)幾乎完全相同。對操作分布,java的客戶機/ 服務器模式可以把運算從服務器分散到客戶一端(服務器負責提供查詢結果,客戶機負責組織結果的顯示),從而提高整個系統(tǒng)的執(zhí)行效率,增加動態(tài)可擴充性。java網(wǎng)絡類庫是java 語言為適應internet 環(huán)境而進行的擴展。另外,為適應internet的不斷發(fā)展,java還提供了動態(tài)擴充協(xié)議,以不斷擴充java網(wǎng)絡類庫。 java的網(wǎng)絡類庫支持多種internet協(xié)議,包括telnet, ftp 和http (www),與此相對應的java網(wǎng)絡類庫的子類庫為: j j.ftp j.www.content j.www.html j.www.http 這些

19、子類庫各自容納了可用于處理internet協(xié)議的類和方法。其中,用于處理一些基本的網(wǎng)絡功能,包括遠程登錄(telnet);.ftp用于處理ftp協(xié)議;.www.content用于處理www 頁面內(nèi)容;.www.html 和.www.http 則分別提供了對html 語言和http 協(xié)議的支持。1.2 .2 客戶機/服務器環(huán)境下的java應用程序 客戶機/服務器在分布處理過程中,使用基于連接的網(wǎng)絡通信模式。該通信模式首先在客戶機和服務器之間定義一套通信協(xié)議,并創(chuàng)建一socket類,利用這個類建立一條可靠的鏈接;然后,客戶機/服務器再在這條鏈接上可靠地傳輸數(shù)據(jù)??蛻魴C發(fā)出請求,服務器監(jiān)聽來自客戶機

20、的請求,并為客戶機提供響應服務。這就是典型的請求- 應答 模式。下面是客戶機/服務器的一個典型運作過程: 1、服務器監(jiān)聽相應端口的輸入; 2、客戶機發(fā)出一個請求; 3、服務器接收到此請求; 4、服務器處理這個請求,并把結果返回給客戶機; 5、重復上述過程,直至完成一次會話過程。 按照以上過程,我們使用java語言編寫一個分別針對服務器和客戶機的應用程序(application)。該程序在服務器上時,程序負責監(jiān)聽客戶機請求,為每個客戶機請求建立socket 連接,從而為客戶機提供服務。本程序提供的服務為:讀取來自客戶機的一行文本,反轉該文本,并把它發(fā)回給客戶機。通過該程序實例我們看到,使用jav

21、a語言設計c/s程序時需要注意以下幾點: (1)、 服務器應使用serversocket 類來處理客戶機的連接請求。當客戶機連接到服務器所監(jiān)聽的端口時,serversocket將分配一新的socket 對象。這個新的socket 對象將連接到一些新端口,負責處理與之相對應客戶機的通信。然后,服務器繼續(xù)監(jiān)聽serversocket,處理新的客戶機連接。 socket 和serversocket 是java網(wǎng)絡類庫提供的兩個類。(2)、服務器使用了多線程機制。server對象本身就是一個線程,它的run()方法是一個無限循環(huán),用以監(jiān)聽來自客戶機的連接。每當有一個新的客戶機連接時,serversoc

22、ket就會創(chuàng)建一個新的socket類實例,同時服務器也將創(chuàng)建一新線程,即一個connection 對象,以處理基于socket 的通信。與客戶機的所有通信均由這個connection 對象處理。connection的構造函數(shù)將初始化基于socket 對象的通信流,并啟動線程的運行。與客戶機 的通信以及服務的提供,均由connection對象處理。 (3)、客戶機首先創(chuàng)建一個socket對象,用以與服務器通信。之后需創(chuàng)建兩個對象:datainputstream 和dataoutputstream,前者用以從socket 的inputstream 輸入流中讀取數(shù)據(jù),后者則用于往socket的out

23、putstream 中寫數(shù)據(jù)。最后,客戶機程序從標準輸入(如:控制臺)中讀取數(shù)據(jù),并把這些數(shù)據(jù)寫到服務器,在從服務器讀取應答消息,然后把這些應答消息寫到準輸出。第二章 java網(wǎng)絡安全聊天系統(tǒng)設計2.1課題來源 根據(jù)當前網(wǎng)絡的需求,網(wǎng)絡聊天越來越受各種網(wǎng)民所青睞。越來越多的人使用qq,同時也越來越多的人對于qq聊天的安全性擔憂,各種各樣的qq病毒,qq木馬,以及未加密的明文傳送,讓我們的網(wǎng)絡聊天環(huán)境越來越不安全。因此我決定以 基于java的網(wǎng)絡安全聊天工具 作為檢驗我4年學習的課題。2.2 聊天系統(tǒng)的設計步驟及功能模塊劃分聊天系統(tǒng)工作原理圖 (圖2.1 服務器和客戶端之間關系)2 .3聊天系統(tǒng)

24、各功能模塊(1)服務器程序模塊 服務器與客戶間通過套接口socket(tcp)連接。在java中使用套接口相當簡單,java api為處理套接口的通信提供了一個類.socket,使得編寫網(wǎng)絡應用程序相對容易。服務器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個serversocket對象來監(jiān)聽來自客戶的連接請求,默認端口為6868,然后無限循環(huán)調用accept()方法接受客戶程序的連接。(2)客戶程序模塊 客戶通過socket(inetaddress,port)建立與服務器的連接。服務器與客戶都通過構造objectinputstream,objectoutputstream來建立輸入輸出流,然后

25、雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務器accept()方法返回一個新建的socket對象。客戶端然后向服務器發(fā)送消息,比如文件傳輸?shù)龋掌魇盏絹碜钥蛻舻恼埱蠛螅槍Σ煌南⑻幚碚埱蟆?.4 需求分析 聊天系統(tǒng)不外乎兩個方面,服務器端和客戶端。簡單分析一下兩個方面所要完成的任務,對設計這個程序來說,等于完成了一半。首先來看一下服務器端的任務: 服務器端應當建立一個serversocket,并且不斷進行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應的連接超時)。服務器端應當是一個信息發(fā)送中心,所有客戶端的信息都傳到服務器端,由服務器端根據(jù)要求分發(fā)信息。 3.

26、服務器應當建立一個用戶賬號的數(shù)據(jù)庫,用于管理用戶資料。 4. 服務器應當能存有所有用戶的公鑰,以及所有加密過后的聊天記錄,當用戶需要時便于驗證信息內(nèi)容。(圖2.2 服務器的主要功能圖) 如上圖就是服務器端最主要的幾個任務。不難看出,服務器端的任務并不復雜??蛻舳藨撏瓿傻墓ぷ靼ǎ?與服務器端建立通信通道,向服務器端發(fā)送信息。(包過用戶資料注冊、用戶登錄、群聊、用戶間私聊等各種消息)接收來自服務器的信息。根據(jù)消息的內(nèi)容進行操作,如抬出各種對話框、確認信息等。(圖2.3 客戶端的主要功能圖)相對服務器而言,客戶端的任務更加簡單,有了以上的簡單分析,可以知道,解決上述幾個個問題,即完成了該聊天系統(tǒng)

27、的核心。2.5 聊天系統(tǒng)的總體設計要點 聊天系統(tǒng)的設計跟普通軟件設計有著許多不同的地方,普通軟件設計所考慮的因素,例如,普通軟件需要對布局進入大量美化以及優(yōu)化設計等等,而聊天工具只要提供滿足用戶直接實時聊天即可。因此,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點: 1、實現(xiàn)思想在internet上的聊天程序一般都是以服務器提供服務端連接響應,使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在tcp/ip環(huán)境下,實現(xiàn)服務器端和客戶端兩部分程序。 2、服務器端工作流程(圖2.4 服務器主要運行流程圖)(圖2.5 服務器的界面功

28、能圖)1. 服務器先創(chuàng)建一個client數(shù)組,用來存放id、連接用戶的名字、地址等,每個用戶對應一個client線程。同時連接用戶數(shù)據(jù)庫。2. 對服務器本地端口(程序里默認是6868)進行監(jiān)聽,當收到客戶連接請求后,接收用戶發(fā)來的信息,這里將消息進行分段后進行2種不同操作。第一種是注冊請求,繼續(xù)接受用戶名、密碼等信息,然后查詢數(shù)據(jù)庫,判斷是否已經(jīng)注冊,未注冊則插入用戶信息,返回成功信息給客戶端。已注冊則返回失敗消息。執(zhí)行完后回到流程1。第二種是登錄請求,繼續(xù)接受客戶端發(fā)來的用戶名和密碼,查詢數(shù)據(jù)庫看是否有相同記錄,沒有則返回一個失敗信息給客戶端,然后回到流程1。若是用戶名和密碼都正確,則返回成

29、功信息給客戶端。3. 服務器將客戶的id、用戶名、地址存到一個空的client,然后啟動該用戶的數(shù)據(jù)接受發(fā)送線程。然后返回流程1。4. client線程啟動后一直循環(huán)接受信息,直到收到該客戶端發(fā)來消息。根據(jù)消息的標識符判斷是群發(fā)還是一對一單聊,群發(fā)則所有的client線程將消息發(fā)回客戶端。如果是一對一單聊,則查找client數(shù)組的用戶名,找到相應的客戶,使用該用戶的對應線程發(fā)回該信息。如上服務器還有一些其他操作,如,更新在線用戶列表、發(fā)送在線用戶列表給客戶端,查看數(shù)據(jù)庫資料,對數(shù)據(jù)庫資料進行插入、修改、刪除等、還有聊天記錄的保存打開等。(為了安全起見,這里的聊天記錄都是用戶用自己私鑰加密過的,

30、服務器沒法解密,但是可以為用戶發(fā)生爭端或者需要時提供記錄,讓用戶自己解密驗證)3、客戶端工作流程客戶端程序相對與服務器來說要簡單一些:(圖2.6 客戶端主要界面功能圖)(圖2.7 客戶端接受消息線程主要功能圖)1. 顯示登錄界面,這里可以選擇注冊用戶,用戶登錄,修改服務器ip以及端口等(默認是本機ip,端口是6868)。選擇注冊進入流程2,選擇登錄進入流程32. 顯示注冊界面,這里要輸入用戶名,密碼,email等,對用戶名的要求有不為空以及不含畢設字樣即可。2次密碼需要一致。點擊發(fā)送將信息發(fā)給服務器,接受服務器返回信息,成功失敗均有相應的對話框彈出。3. 發(fā)送登錄用戶名和密碼,接受服務器發(fā)回信

31、息,成功進入流程4,失敗則返回流程1。4. 關閉打開界面,顯示對話界面,同時啟動一個專門接受服務器信息的線程。這里可以發(fā)送群聊消息,以及顯示你接受的消息。雙擊在線用戶列表的某一用戶,彈出相應的單聊窗口,可以進行一對一聊天。客戶端同樣有自動更新在線用戶,保存聊天記錄等功能。第三章 系統(tǒng)設計與實現(xiàn)3.1 開發(fā)環(huán)境與工具 基于java聊天系統(tǒng)的設計主要運用java與語言與socket類結合而開發(fā)。其開發(fā)的主要環(huán)境包括: 服務器端:(windows平臺)首先應有java環(huán)境jdk,建議采用jdk1.6以上,另外還需配置classpath環(huán)境變量,需要有一個access的數(shù)據(jù)庫,配置好odbc的數(shù)據(jù)源。

32、數(shù)據(jù)源命名為kangxi。access數(shù)據(jù)庫里建立一個user表用來存儲用戶賬號信息。user表有7列,均為文本類型,分別是name,password,email,ans,創(chuàng)建登錄時間,最后登錄時間,賬號狀態(tài)。 客戶端:只要有java環(huán)境jdk就可以,建議jdk1.6。3.2 硬件環(huán)境本系統(tǒng)運行環(huán)境所需用到的環(huán)境為:硬件配置 :中央處理器(cpu) :p4 2.0g的處理器;硬 盤:40gb以上硬盤;內(nèi) 存:512 ddr內(nèi)存;顯示器:15寸顯示器等;顯 卡:128m顯存顯卡軟件環(huán)境:windows xp、access數(shù)據(jù)庫、jdk1.6.03等。3.3 各個功能模塊的具體實現(xiàn)3.3.1 服務

33、器的具體實現(xiàn)1. 用戶注冊、登錄、密碼找回服務器監(jiān)聽端口,接收到客戶端請求后,接受類別信息。string str = din.readutf();chuli(str, dos);調用chuli(string str, dataoutputstream dos)方法處理消息string tname = str.substring(0, str.lastindexof(畢設);string message4 = str.substring(str.lastindexof(畢設) + 2); 這里的tname有3種值:第一種表示用戶發(fā)出注冊請求,message4則為具體的所有注冊消息,服務器收到都連

34、接服務器,查詢是否已有該用戶名的賬號,沒有則將message4的值根據(jù)標識符分段,然后插入數(shù)據(jù)庫,返回成功信息,反之亦然;第二種表示用戶發(fā)出密碼找回請求,message4為用戶輸入的密碼找回答案,服務器連接數(shù)據(jù)庫,查詢是否存在該用戶名和答案匹配的記錄,成功則將密碼發(fā)回給用戶,反之則發(fā)揮失敗消息。dos.writeutf(ok!+畢設+rs.getstring(1);這里的rs為查詢數(shù)據(jù)庫的返回結果;第三種用戶登錄請求,message4為用戶密碼,服務器收到后連接數(shù)據(jù)庫,判斷用戶信息是否正確,將結果返回給客戶端,當結果為成功時服務器繼續(xù)向下運行,失敗則回到監(jiān)聽端口的地方。2. 客戶端線程的存儲服

35、務器為了能有效的處理各個用戶的請求,創(chuàng)建了一個客戶線程數(shù)組public static client user = new client200;然后根據(jù)client的定義用連接服務器端口的客戶端的編號、用戶名、輸入流、輸出流創(chuàng)建對象,啟動線程,最后返回繼續(xù)監(jiān)聽端口。usersum = new client(sum, server.message1, dos, din); 創(chuàng)建與客戶對應的通信線程new thread(usersum).start();啟動發(fā)送數(shù)據(jù)到客戶端線程3. 服務器中各個客戶端通信線程首先當客戶線程啟動時調用刷新在線用戶的方法:server.rid();當服務器中接受客戶端消

36、息線程收到消息后,先進行預處理string tname = str.substring(0, str.lastindexof(標識符);string message = str.substring(str.lastindexof(標識符) + 3);將消息的對象和消息的具體內(nèi)容提取出來,然后根據(jù)對象的值來判斷客戶端的請求種類。if (tname.equalsignorecase(exit)當tname值為exit時,表示客戶端下線了。此時服務器就要將play中該客戶端的用戶名刪去,同時調用刷新在線用戶列表的方法rid()。if (tname.equalsignorecase(all),當tna

37、me值為all時,表示這條消息是發(fā)給所有人的,服務器于是調用所有的在線用戶線程,將消息發(fā)給去。for (int i = 0; i m; i+) mess = + 對所有人說n + message;server.useri.dos.writeutf(mess);這里的是發(fā)出消息人的名字。當tname的值不為exit和all時,表示這條消息是私聊的消息,而且tname是接受客戶端的用戶名。此時要先找到接受用戶端的線程,然后才發(fā)回消息。for (int i = 0; i 數(shù)據(jù)源 里面添加數(shù)據(jù)源。在程序需要連接數(shù)據(jù)庫時class.forname(sun.jdbc.

38、odbc.jdbcodbcdriver);con = drivermanager.getconnection(jdbc:odbc:kangxi, , );這是連接數(shù)據(jù)庫的驅動以及連接數(shù)據(jù)源的用戶名和密碼。string sqlstring = select * from user ;java.sql.preparedstatement ps = con.preparestatement(sqlstring);rs = ps.executequery();這里的sqlstring用來存儲數(shù)據(jù)庫語言,然后sql語句對數(shù)據(jù)庫查詢操作將返回一個resultset對象。如果是插入以及更新數(shù)據(jù)庫則不需要返回

39、值,只需要更新數(shù)據(jù)庫即可。rs = ps.executequery();這里即表示對數(shù)據(jù)庫的操作進行更新。7. 對用戶賬號的基本操作點擊菜單欄的用戶資料管理選項,彈出賬號處理窗口,服務器連接數(shù)據(jù)庫,然后將所有的用戶信息顯示到窗口的中間string sqlstring = select * from user; preparedstatement ps = con.preparestatement(sqlstring);rs = ps.executequery();rs即為所有用戶信息在窗口菜單欄可以選擇具體的操作,如新建賬號、刪除賬號、查找賬號、修改賬號、退出管理等。關閉時斷開與數(shù)據(jù)庫的連接。

40、3.3.2客戶端的具體實現(xiàn)1. 連接服務器的設置 點擊設置,可以設置連接服務器的ip地址和端口,只有知道了服務器的ip以及開放端口才能正確連接服務器。2. 用戶賬號注冊點擊注冊,彈出注冊窗口,填寫用戶的基本信息,這里要求用戶名不準為空,并且不能含標識符,因為程序很多地方需要用標識符來分段信息。密碼2詞輸入要一致,密碼找回答案不為空。當輸入完后,點注冊,客戶端將信息發(fā)送給服務器str=na1+標識符1+na2+標識符2+na3+標識符3+na4;mess=標識符4+標識符0+str; dos.writeutf(mess);na1-na4為用戶信息,標識符0-標識符3起分隔作用,標識符4表示這條消

41、息是注冊消息。然后接受服務器返回的結果,彈出相應的對話窗提示用戶結果。3. 密碼找回功能 點擊密碼找回,彈出密碼找回窗口,輸入賬號以及密碼找回問題的答案,將信息用標識符組合發(fā)給服務器,然后接受服務器的返回信息,返回標識符為ok則填出窗口顯示用戶名以及密碼,失敗則提示輸入信息不正確。4. 登錄賬號 輸入用戶名和密碼后點登陸,將信息發(fā)給服務器,接受服務器返回結果,ok則關閉當前窗口打開對話窗口,失敗則提示用戶名密碼不正確。5. 客戶端接受信息線程當客戶端登錄后,創(chuàng)建一個專門負責處理服務器發(fā)來消息的線程,循環(huán)接受消息。這里接收到的消息根據(jù)分隔符有3種:第一種分隔符表示這條消息是刷新在線用戶列表的,則

42、清空用戶列表,然后將信息分段截取后的結果插入列表;第二種分隔符表示消息是群聊消息,則在消息顯示文本區(qū)域顯示。displayarea.append(str+nn); displayarea.setcaretposition(displayarea.gettext().length();這里的作用是滾屏displayarea是文本區(qū)域;第三種分隔符是表示這是一對一單聊的消息,將消息根據(jù)分隔符截取,得到消息的發(fā)送人,查找是否已經(jīng)有與該用戶私聊的對話框,沒有則彈出與該用戶私聊的對話框,并顯示本條消息。如果已經(jīng)有與該用戶私聊的對話框,則追加顯示本條信息。6. 與在線用戶私聊 雙擊在線用戶列表中的用戶名,

43、彈出與該用戶私聊的對話窗口,在此次上線過程中這個對話窗口都將負責與該用戶的私聊,即使關閉了,該對話框也只是隱藏起來。7. 聊天記錄的保存點擊界面的保存記錄按鈕,調用保存記錄方法。file a1=new file(fname+.txt);if(!a1.exists() a1.createnewfile(); 將顯示區(qū)域的消息存以追加的方式寫入到客戶端目錄下的以登錄用戶名命名的文件,然后清空消息顯示區(qū)域的文字。點擊菜單欄的打開記錄選項,彈出一個對話框,打開客戶端目錄下以登錄用戶名命名的文件,將內(nèi)容顯示在對話框,當無文件時顯示為空。3.3.3 組員的加密實現(xiàn)同組的另一位同學將在我完成的模塊基礎上加入

44、安全加密,大概功能有:當用戶注冊時自動生成用戶的rsa公私密鑰,保存在用戶端,將公鑰發(fā)給服務器;每當用戶發(fā)信息時想用des加密消息,再用私鑰加密對稱密鑰。達到對消息簽名的目的;服務器只能看到群聊的消息,而私聊的消息顯示的是加密過后的亂碼,這是為了保護用戶的隱私,同時當用戶需要聊天記錄時可以發(fā)回給用戶解密驗證。3.4 功能模塊的測試 本次畢設的編譯環(huán)境,及編寫平臺為java。主要用到的類為包中的socket類和javax.swing包中的類。(圖3.1 服務器主界面) 圖3.1為服務器開始界面,下方各個用戶信息顯示區(qū)域,右側有一個在線用戶列表(當有用戶登錄退出時都會更新,同時發(fā)送更新消息給所有客

45、戶端)。保存記錄按鈕可以將信息存到服務器本地,可以通過file菜單里面的打開記錄進行查看。file菜單里面可以選擇賬號數(shù)據(jù)管理。(圖3.2 服務器賬號管理主界面) 圖3.2即為用戶資料管理界面,下方顯示所有注冊用戶的基本信息,操作菜單里面可以選擇對數(shù)據(jù)庫進行插入,修改,刪除,查詢等操作。 服務器線程在程序運行期間一直有效,接受客戶端請求信息,轉發(fā)客戶端聊天內(nèi)容,查看用戶信息。(圖3.3 客戶端登陸界面)客戶端運行時必須先登陸,登陸界面如圖三,這里可以選擇登錄賬號,注冊用戶,密碼找回,修改連接服務器ip以及端口等。(圖3.4 客戶端注冊界面)圖3.4為用戶注冊界面,這里要填寫用戶的基本資料,當你

46、用戶名為空或者包含畢設字樣時會有對話框提示。注冊成功還是失敗都會有提示。如下:(圖3.5 注冊時的各種提示)(圖3.6 密碼找回界面)圖3.6為密碼找回的界面,需要輸入注冊時填寫的密碼找回答案,正確的話會彈出如圖3.7的對話框。(圖3.7 密碼找回結果界面)(圖3.8 客戶端聊天主界面) 圖3.8為用戶聊天主界面,左上方為聊天記錄區(qū)域,左下方為用戶發(fā)送信息區(qū)域,右上方為在線用戶列表。雙擊用戶名會彈出一對一窗口如下圖3.9.(圖3.9 客戶端用戶間私聊界面) 上圖中窗口sissi是用戶kangxi雙擊sissi用戶后彈出的界面,輸入消息后,在用戶sissi的電腦上就會彈出窗口kangxi顯示剛剛

47、kangxi發(fā)給sissi的消息。(圖3.10 客戶端聊天記錄) 圖3.10為用戶打開聊天記錄是彈出的窗口。待添加的隱藏文字內(nèi)容3本聊天工具的所有一對一消息都是經(jīng)過加密的如下圖(圖3.11 服務器可見消息圖) 服務器只能看到群聊的明文,私聊只能看到加密過后的消息。第四章 總結4.1 畢業(yè)設計總結與展望 本畢業(yè)設計實現(xiàn)了簡單的實時聊天功能,經(jīng)過細心的調試和排錯解決了絕大部分的問題。但幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經(jīng)過精心維護的非商業(yè)軟件。本聊天系統(tǒng)程序對于初涉此領域的畢業(yè)設計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還有許多未能解決的缺陷。 目前本聊天系統(tǒng)還有

48、待完善的功能:聊天系統(tǒng)缺乏好友列表;沒有實現(xiàn)文件發(fā)送功能;沒有辦法發(fā)送圖片等。 盡管畢業(yè)設計到現(xiàn)在已接近尾聲,但是對于上述的缺陷,本人還會不斷對聊天系統(tǒng)進一步的完善它,期望在今后的日子里憑借自身的技術把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。4.2 經(jīng)驗與感想 基本java的網(wǎng)絡安全聊天工具的開發(fā)與實現(xiàn)作為畢業(yè)設計,是本人目前做過的最大的程序。 平時自己也常用各種聊天工具進行聊天,因此,自己也曾想過以后學會了電腦就一定親自設計一款聊天工具,如今,總算實現(xiàn)了自己的夢想?;緅ava聊天系統(tǒng)設計與實現(xiàn)畢業(yè)設計正是建立在java平臺上,是本人以前未曾接觸過的領域。憑著探索新知識的熱情,我選擇了該設計題目。

49、學習該平臺背景和功能的時間遠遠超出了我想象的時間。在設計初期,為了畫出一個簡單的圖形,都需要花一定的時間去掌握和熟悉。為了進一步探索深層次的技巧,我花費了大量時間在sun的java主頁上,閱讀了十幾篇技巧和代碼樣例。在學習期間,本人還通過網(wǎng)上的各種java源碼進行學習與研究,我原以為這樣的設計水平將無法完成畢業(yè)設計,但當掌握了大部分應用技巧時,剩下的聊天系統(tǒng)思路的設計就顯得不是最大的障礙了。 我在一個月內(nèi)寫完這個程序,經(jīng)過了很多次的調試,終于完成了現(xiàn)在的程序。原先認為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和肯鉆研的勇氣,就一定會完成,甚至達到意想不到的效果。致謝語 緊張而忙碌的畢業(yè)設計就要結

50、束了,在完成了系統(tǒng)的功能設計后,我感到由衷的喜悅和自豪。在我做畢業(yè)設計期間,許多老師,同學和朋友給我無私的關懷和幫助,在此,我要向他們表示衷心的感謝。 首先,我要感謝學校的老師在畢業(yè)設計期間給了我悉心的關懷與幫助,并且給了我許多關鍵的,建設性的指導。 這次的畢業(yè)設計讓我受益匪淺??梢赃@樣說,用計算機來解決繁重而低效的手工管理工作,計算機發(fā)展史上的必然。在理論課的學習中,我掌握了基礎課和專業(yè)課的理論知識,也曾經(jīng)做過一些程序設計的聯(lián)系和計算機綜合試驗,但真正動手設計一個管理軟件,還是第一次。在這次的畢業(yè)設計中,我曾遇到了許多困難,而在克服這些困難的過程中,我的各方面的能力又有了很大的提高,使我的理

51、論知識更好的與實踐相結合,增強了專業(yè)技能的可實踐性。從調研,需求分析到查找資料,結構設計,詳細設計以及調試程序,到最后的寫使用說明書,我終于設計出了一個比較完整的,周密的,可使用的聊天系統(tǒng)。通過這次的畢業(yè)設計,我真正了解了軟件工程設計的整個過程,既鞏固了以前的理論知識,也為我以后的工作奠定了良好的基礎。 當然,由于時間的短促,我所完成的系統(tǒng)并不是盡善盡美的,還有待進一步的修改和完善。最后,請允許我再一次向畢業(yè)期間無私幫助過我的老師,同學和朋友表示最衷心的感謝。參考文獻1 (美)david m.geary,李建森,蔣欣軍.java2圖形設計卷2:swing m. 北京: 機械工業(yè)出版社, 200

52、0.2(美)bruce eckel , 侯捷 . java編程思想(第2版) m.北京: 機械工業(yè)出版社, 2002.3(美)elliotte rusty harold , 朱濤江, 林劍 . java網(wǎng)絡編程(第三版)m.北京:中國電力出版社,2005.4 耿祥義,張躍平.java大學實用教程(第二版)m.北京:電子工業(yè)出版社,2009.employment tribunals sort out disagreements between employers and employees.you may need to make a claim to an employment tribuna

53、l if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly.for more information about dismissal and unfair dismissal, seedismissal.you can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. however, if you win your case, the tribunal may reduce any compensation

溫馨提示

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

最新文檔

評論

0/150

提交評論