畢業設計(論文)基于JAVA的網絡安全聊天工具網絡功能部分_第1頁
畢業設計(論文)基于JAVA的網絡安全聊天工具網絡功能部分_第2頁
畢業設計(論文)基于JAVA的網絡安全聊天工具網絡功能部分_第3頁
畢業設計(論文)基于JAVA的網絡安全聊天工具網絡功能部分_第4頁
畢業設計(論文)基于JAVA的網絡安全聊天工具網絡功能部分_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

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

3、nction 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 comparatively broad

4、 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 we once start the ori

5、ginal 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 refresh consumer list

6、ing 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 knowledge being hit by the p

7、rogramming 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的網絡功能與編程5 1.1.1 網絡編程基礎知識

8、5 1.1.2 ip/tcp協議常識5 1.1.3 socket的簡介6 1.2 網絡編程在java上的實現8 1.2.1 java網絡應用模型8 1.2.2 客戶機/服務器環境下的java應用程序8第二章 java網絡安全聊天系統設計10 2.1課題來源10 2.2 聊天系統的設計步驟及功能模塊劃分10 2.3聊天系統各功能模塊10 2.4 需求分析11 2.5 聊天系統的總體設計要點12第三章 系統設計與實現16 3.1 開發環境與工具16 3.2 硬件環境16 3.3 各個功能模塊的具體實現16 3.3.1 服務器的具體實現16 3.3.2客戶端的具體實現18 3.3.3 組員的加密實現

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

10、碼。1.1 java的網絡功能與編程1.1.1 網絡編程基礎知識 網絡編程的目的就是指直接或間接地通過網絡協議與其他計算機進行通訊。網絡編程中有兩個主要的問題,一個是如何準確的定位網絡上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數據傳輸。在tcp/ip協議中ip層主要負責網絡主機的定位,數據傳輸的路由,由ip地址可以唯一地確定internet上的一臺主機。而tcp層則提供面向應用的可靠的或非可靠的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心ip層是如何處理數據的。 目前較為流行的網絡編程模型是客戶機/服務器(c/s)結構。即通信雙方一方作為服務器等待客戶提出請求并予以響應。

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

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

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

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

15、說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服務器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個socket建立連接,客戶端通過寫socket來通知服務器,以讀socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個socket,通過讀寫和客戶端通信。 socket程序的工作過程:1、建立socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。2、數據通信:利用虛擬連接通道傳送數據信息進行通道。3、關閉:通信結束時,再將

16、所建的虛擬連接拆除。具體如下:服務器(圖1.1 網絡socket主要流程圖)三次握手:第一次握手:原主機發送一個帶有本次連接的序號的請求的一個數據幀第二次握手:目的主機收到請求后,如果同意連接,則發回一個帶有一個本次連接序號和源端機連接序列號的確認。第三此握手:源端機收到含有兩次初始序列號的應答后,在向目的主機發送一個帶有兩次連接的序列號的確認。具體過程如下(圖1.2 三次握手的流程)1.2 網絡編程在java上的實現1.2 .1 java網絡應用模型和internet上的許多環境一樣,完整的java應用環境實際上也是一個客戶機/服務器環境,更確切地說是瀏覽器/服務器模型(即browser/s

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

18、戶機/ 服務器模式可以把運算從服務器分散到客戶一端(服務器負責提供查詢結果,客戶機負責組織結果的顯示),從而提高整個系統的執行效率,增加動態可擴充性。java網絡類庫是java 語言為適應internet 環境而進行的擴展。另外,為適應internet的不斷發展,java還提供了動態擴充協議,以不斷擴充java網絡類庫。 java的網絡類庫支持多種internet協議,包括telnet, ftp 和http (www),與此相對應的java網絡類庫的子類庫為: j j.ftp j.www.content j.www.html j.www.http 這些子類庫各自容納了可用于處理internet

19、協議的類和方法。其中,用于處理一些基本的網絡功能,包括遠程登錄(telnet);.ftp用于處理ftp協議;.www.content用于處理www 頁面內容;.www.html 和.www.http 則分別提供了對html 語言和http 協議的支持。1.2 .2 客戶機/服務器環境下的java應用程序 客戶機/服務器在分布處理過程中,使用基于連接的網絡通信模式。該通信模式首先在客戶機和服務器之間定義一套通信協議,并創建一socket類,利用這個類建立一條可靠的鏈接;然后,客戶機/服務器再在這條鏈接上可靠地傳輸數據。客戶機發出請求,服務器監聽來自客戶機的請求,并為客戶機提供響應服務。這就是典型

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

21、(1)、 服務器應使用serversocket 類來處理客戶機的連接請求。當客戶機連接到服務器所監聽的端口時,serversocket將分配一新的socket 對象。這個新的socket 對象將連接到一些新端口,負責處理與之相對應客戶機的通信。然后,服務器繼續監聽serversocket,處理新的客戶機連接。 socket 和serversocket 是java網絡類庫提供的兩個類。(2)、服務器使用了多線程機制。server對象本身就是一個線程,它的run()方法是一個無限循環,用以監聽來自客戶機的連接。每當有一個新的客戶機連接時,serversocket就會創建一個新的socket類實例,

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

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

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

25、到客戶方的連接請求,服務器accept()方法返回一個新建的socket對象。客戶端然后向服務器發送消息,比如文件傳輸等,服務器收到來自客戶的請求后,針對不同的消息處理請求。2.4 需求分析 聊天系統不外乎兩個方面,服務器端和客戶端。簡單分析一下兩個方面所要完成的任務,對設計這個程序來說,等于完成了一半。首先來看一下服務器端的任務: 服務器端應當建立一個serversocket,并且不斷進行偵聽是否有客戶端連接或者斷開連接(包括判斷沒有響應的連接超時)。服務器端應當是一個信息發送中心,所有客戶端的信息都傳到服務器端,由服務器端根據要求分發信息。 3. 服務器應當建立一個用戶賬號的數據庫,用于管

26、理用戶資料。 4. 服務器應當能存有所有用戶的公鑰,以及所有加密過后的聊天記錄,當用戶需要時便于驗證信息內容。(圖2.2 服務器的主要功能圖) 如上圖就是服務器端最主要的幾個任務。不難看出,服務器端的任務并不復雜。客戶端應該完成的工作包括: 與服務器端建立通信通道,向服務器端發送信息。(包過用戶資料注冊、用戶登錄、群聊、用戶間私聊等各種消息)接收來自服務器的信息。根據消息的內容進行操作,如抬出各種對話框、確認信息等。(圖2.3 客戶端的主要功能圖)相對服務器而言,客戶端的任務更加簡單,有了以上的簡單分析,可以知道,解決上述幾個個問題,即完成了該聊天系統的核心。2.5 聊天系統的總體設計要點 聊

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

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

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

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

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

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

33、服務器監聽端口,接收到客戶端請求后,接受類別信息。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種值:第一種表示用戶發出注冊請求,message4則為具體的所有注冊消息,服務器收到都連接服務器,查詢是否已有該用戶名的賬號,沒有

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

35、一個客戶線程數組public static client user = new client200;然后根據client的定義用連接服務器端口的客戶端的編號、用戶名、輸入流、輸出流創建對象,啟動線程,最后返回繼續監聽端口。usersum = new client(sum, server.message1, dos, din); 創建與客戶對應的通信線程new thread(usersum).start();啟動發送數據到客戶端線程3. 服務器中各個客戶端通信線程首先當客戶線程啟動時調用刷新在線用戶的方法:server.rid();當服務器中接受客戶端消息線程收到消息后,先進行預處理string

36、 tname = str.substring(0, str.lastindexof(標識符);string message = str.substring(str.lastindexof(標識符) + 3);將消息的對象和消息的具體內容提取出來,然后根據對象的值來判斷客戶端的請求種類。if (tname.equalsignorecase(exit)當tname值為exit時,表示客戶端下線了。此時服務器就要將play中該客戶端的用戶名刪去,同時調用刷新在線用戶列表的方法rid()。if (tname.equalsignorecase(all),當tname值為all時,表示這條消息是發給所有人

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

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

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

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

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

42、入列表;第二種分隔符表示消息是群聊消息,則在消息顯示文本區域顯示。displayarea.append(str+nn); displayarea.setcaretposition(displayarea.gettext().length();這里的作用是滾屏displayarea是文本區域;第三種分隔符是表示這是一對一單聊的消息,將消息根據分隔符截取,得到消息的發送人,查找是否已經有與該用戶私聊的對話框,沒有則彈出與該用戶私聊的對話框,并顯示本條消息。如果已經有與該用戶私聊的對話框,則追加顯示本條信息。6. 與在線用戶私聊 雙擊在線用戶列表中的用戶名,彈出與該用戶私聊的對話窗口,在此次上線過程

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

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

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

46、。注冊成功還是失敗都會有提示。如下:(圖3.5 注冊時的各種提示)(圖3.6 密碼找回界面)圖3.6為密碼找回的界面,需要輸入注冊時填寫的密碼找回答案,正確的話會彈出如圖3.7的對話框。(圖3.7 密碼找回結果界面)(圖3.8 客戶端聊天主界面) 圖3.8為用戶聊天主界面,左上方為聊天記錄區域,左下方為用戶發送信息區域,右上方為在線用戶列表。雙擊用戶名會彈出一對一窗口如下圖3.9.(圖3.9 客戶端用戶間私聊界面) 上圖中窗口sissi是用戶kangxi雙擊sissi用戶后彈出的界面,輸入消息后,在用戶sissi的電腦上就會彈出窗口kangxi顯示剛剛kangxi發給sissi的消息。(圖3.10 客戶端聊天記錄) 圖3.10為用戶打開聊天記錄是彈出的窗口。本聊天工具的所有一對一消息都是經過加密的如下圖(圖3.11 服務器可見消息圖) 服務器只能看到群聊的明文,私聊只能看到加密過后

溫馨提示

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

評論

0/150

提交評論