版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p> (科研訓(xùn)練、畢業(yè)設(shè)計(jì))</p><p> 題 目:基于JAVA的網(wǎng)絡(luò)安全聊天工具:網(wǎng)絡(luò)功能部分</p><p><b> 姓 名: </b></p><p> 學(xué) 院:信息科學(xué)與技術(shù)學(xué)院</p>
2、<p><b> 系:計(jì)算機(jī)科學(xué)系</b></p><p> 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)</p><p><b> 年 級(jí): </b></p><p><b> 學(xué) 號(hào): </b></p><p> 指導(dǎo)教師(校內(nèi)): 職稱:
3、助理教授</p><p> 2010年 5 月 7 日</p><p> 基于JAVA的網(wǎng)絡(luò)安全聊天工具:網(wǎng)絡(luò)功能部分</p><p> 摘要 :人隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messag
4、er等等。但是越來(lái)越多的服務(wù)導(dǎo)致了信息的安全性一直在下降,所以小團(tuán)體小范圍內(nèi)的聊天工具就顯得十分有必要了,這也是我們一開(kāi)始選擇這個(gè)課題的初衷。</p><p> 本工具系統(tǒng)開(kāi)發(fā)主要包括一個(gè)服務(wù)器程序和一個(gè)客戶程序兩個(gè)方面。前者通過(guò)Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來(lái)信息,并能刷新用戶列表。后者通過(guò)與服務(wù)器建立連接,來(lái)進(jìn)行客戶端與客戶端的信息交流。其中通過(guò)直接繼承Thread類來(lái)建立多線程。
5、開(kāi)發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。</p><p> 關(guān)鍵詞: 聊天工具 數(shù)據(jù)庫(kù) 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的網(wǎng)絡(luò)功能與編程5</p><p> 1.1.1 網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)5</p><p> 1.1.2 IP/TCP協(xié)議常識(shí)5</p><p> 1.
10、1.3 Socket的簡(jiǎn)介6</p><p> 1.2 網(wǎng)絡(luò)編程在JAVA上的實(shí)現(xiàn)8</p><p> 1.2.1 Java網(wǎng)絡(luò)應(yīng)用模型8</p><p> 1.2.2 客戶機(jī)/服務(wù)器環(huán)境下的Java應(yīng)用程序8</p><p> 第二章 java網(wǎng)絡(luò)安全聊天系統(tǒng)設(shè)計(jì)10</p><p> 2.1課題
11、來(lái)源10</p><p> 2.2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分10</p><p> 2.3聊天系統(tǒng)各功能模塊10</p><p> 2.4 需求分析11</p><p> 2.5 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn)12</p><p> 第三章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)16</p><p&g
12、t; 3.1 開(kāi)發(fā)環(huán)境與工具16</p><p> 3.2 硬件環(huán)境16</p><p> 3.3 各個(gè)功能模塊的具體實(shí)現(xiàn)16</p><p> 3.3.1 服務(wù)器的具體實(shí)現(xiàn)16</p><p> 3.3.2客戶端的具體實(shí)現(xiàn)18</p><p> 3.3.3 組員的加密實(shí)現(xiàn)19</p&g
13、t;<p> 3.4 功能模塊的測(cè)試20</p><p><b> 第四章 總結(jié)26</b></p><p> 4.1 畢業(yè)設(shè)計(jì)總結(jié)與展望26</p><p> 4.2 經(jīng)驗(yàn)與感想26</p><p><b> 致謝語(yǔ)27</b></p><p&
14、gt;<b> [參考文獻(xiàn)]28</b></p><p><b> 緒論</b></p><p><b> 引言</b></p><p> 隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來(lái)越離不開(kāi)信息網(wǎng)絡(luò)的支持, 而QQ聊天工具等是人們最常見(jiàn), 最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為
15、廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái)。</p><p> 本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于開(kāi)放的JAVA應(yīng)用程序開(kāi)發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請(qǐng)求,易于維護(hù)和更新,其運(yùn)行所需環(huán)境及其工作流程和各個(gè)功能控件的工作原理將在本文依次介紹,并且文中提供了部分程序源代碼。</p><p> 1.1 JAVA的網(wǎng)絡(luò)功能與編程</
16、p><p> 1.1.1 網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)</p><p> 網(wǎng)絡(luò)編程的目的就是指直接或間接地通過(guò)網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊。網(wǎng)絡(luò)編程中有兩個(gè)主要的問(wèn)題,一個(gè)是如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺(tái)或多臺(tái)主機(jī),另一個(gè)就是找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸。在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚桑蒊P地址可以唯一地確定Internet上的一臺(tái)主機(jī)。而TCP層則提供面向應(yīng)用的
17、可靠的或非可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對(duì)象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的。 目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請(qǐng)求并予以響應(yīng)??蛻魟t在需要服務(wù)時(shí)向服務(wù)器提出申請(qǐng)。服務(wù)器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽(tīng)網(wǎng)絡(luò)端口,一旦有客戶請(qǐng)求,就會(huì)啟動(dòng)一個(gè)服務(wù)進(jìn)程來(lái)響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽(tīng)服務(wù)端口,使后來(lái)的客戶也能及時(shí)得到服務(wù)。(參考文獻(xiàn)[2][3])</p>
18、;<p> 1.1.2 IP/TCP協(xié)議常識(shí)</p><p> (1)IP、TCP協(xié)議的特點(diǎn):</p><p> TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫(xiě), TCP/IP是當(dāng)今網(wǎng)絡(luò)互聯(lián)的核心協(xié)議。TCP/IP協(xié)議的體系結(jié)構(gòu)共有四個(gè)層次,即應(yīng)用層、傳輸層、網(wǎng)絡(luò)互聯(lián)層和網(wǎng)絡(luò)接
19、口層。</p><p> IP協(xié)議的作用:第一,它是網(wǎng)絡(luò)層的協(xié)議,提供互聯(lián)網(wǎng)上數(shù)據(jù)傳輸?shù)慕y(tǒng)一格式。第二,提供不可靠的無(wú)連接的服務(wù)。第三,定義了互聯(lián)網(wǎng)上的傳輸數(shù)據(jù)的基本單元,提供了供路由選擇的信息,沒(méi)有差錯(cuò)校驗(yàn)和處理的機(jī)制。</p><p> TCP協(xié)議的功能:差錯(cuò)控制——可靠性、面向連接、分段(Segment)、端口號(hào)。TCP是傳輸控制協(xié)議,是面向連接的提供了一種可靠的傳輸服務(wù),它用三
20、次握手和滑動(dòng)窗口機(jī)制來(lái)保證傳輸?shù)目煽啃?,及進(jìn)行流量控制。</p><p> TCP/IP協(xié)議具有以下特點(diǎn):協(xié)議標(biāo)準(zhǔn)具有開(kāi)放性,其獨(dú)立于特定的計(jì)算機(jī)硬件及操作系統(tǒng),可以免費(fèi)使用。統(tǒng)一分配網(wǎng)絡(luò)地址,使得每個(gè)TCP/IP 設(shè)備在網(wǎng)絡(luò)中都具有唯一的IP地址。實(shí)現(xiàn)了高層協(xié)議的標(biāo)準(zhǔn)化,能為用戶提供多種可靠的服務(wù)。</p><p> (2)TCP/IP協(xié)議進(jìn)行傳輸數(shù)據(jù)傳輸?shù)倪^(guò)程:</p>
21、<p> 應(yīng)用程序?yàn)榱藗鬏敂?shù)據(jù)會(huì)調(diào)用TCP,將數(shù)據(jù)和對(duì)應(yīng)的參數(shù)傳給TCP,將TCP 數(shù)據(jù)包封裝在IP包內(nèi),通過(guò)網(wǎng)絡(luò)送給目的TCP。接收方TCP在接收到數(shù)據(jù)后通知上層應(yīng)用程序,TCP將保證接收數(shù)據(jù)的正確性。在實(shí)現(xiàn)TCP的主機(jī)上,TCP可以被看成是一個(gè)模塊,和文件系統(tǒng)區(qū)別不大,TCP 也可以調(diào)用一些操作系統(tǒng)的功能,TCP不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的任務(wù)由專門的設(shè)備驅(qū)動(dòng)模塊完成。TCP只是調(diào)用IP接口,向TCP提供所有TC
22、P需要的服務(wù)。</p><p><b> (3)端口號(hào):</b></p><p> 有的時(shí)候,一個(gè)ip地址不能完整的標(biāo)識(shí)一臺(tái)服務(wù)器,這是應(yīng)為一臺(tái)物理性的計(jì)算機(jī)同時(shí)運(yùn)行著多個(gè)應(yīng)用程序,這就需要我們來(lái)區(qū)別同一臺(tái)機(jī)子上的不同的服務(wù),所以就在傳輸層和應(yīng)用層上設(shè)置接口,就是 端口。端口實(shí)際是一個(gè)16位長(zhǎng)的 地址,他的范圍是0~65535之間,其中0~1023是熟知端口,主要
23、是給提供服務(wù)的應(yīng)用程序使用,這些端口是所有應(yīng)用進(jìn)程都只道的,1024~65535為一般端口,也稱動(dòng)態(tài)端口、連接端口,用來(lái)隨時(shí)分配要求通信的各個(gè)客戶端應(yīng)用程序。在數(shù)據(jù)傳輸過(guò)程中,服務(wù)器不斷的檢測(cè)分配給他的端口,發(fā)現(xiàn)要求和他通信的客戶端。(參考文獻(xiàn)[2][4])</p><p> 1.1.3 Socket的簡(jiǎn)介</p><p> Socket,簡(jiǎn)稱套接字,用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連
24、接。也就是說(shuō)網(wǎng)絡(luò)上兩個(gè)或兩個(gè)以上雙工方式通信的進(jìn)程之間總有一個(gè)連接,這個(gè)連接的端點(diǎn)成為套接字,套接字是在比較低的層次上通信的。</p><p> 具體的說(shuō):一個(gè)服務(wù)器應(yīng)用程序一般偵聽(tīng)一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶端和服務(wù)器端建立一個(gè)通信連接,在連接過(guò)程中,客戶端被分配一個(gè)本地端口與一個(gè)socket建立連接,客戶端通過(guò)寫(xiě)socket來(lái)通知服務(wù)器,以讀socket中的信息,類似的服務(wù)
25、器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來(lái)偵聽(tīng)原始端口上的其他連接請(qǐng)求。服務(wù)器也通過(guò)它的本地端口連接一個(gè)socket,通過(guò)讀寫(xiě)和客戶端通信。</p><p> Socket程序的工作過(guò)程:</p><p> 1、建立Socket連接:在通信開(kāi)始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p> 2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)
26、行通道。</p><p> 3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。</p><p><b> 具體如下:</b></p><p><b> 服務(wù)器</b></p><p> ?。▓D1.1 網(wǎng)絡(luò)socket主要流程圖)</p><p><b> 三次握
27、手:</b></p><p> 第一次握手:原主機(jī)發(fā)送一個(gè)帶有本次連接的序號(hào)的請(qǐng)求的一個(gè)數(shù)據(jù)幀</p><p> 第二次握手:目的主機(jī)收到請(qǐng)求后,如果同意連接,則發(fā)回一個(gè)帶有一個(gè)本次連接序號(hào)和源端機(jī)連接序列號(hào)的確認(rèn)。</p><p> 第三此握手:源端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,在向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。</p&g
28、t;<p><b> 具體過(guò)程如下</b></p><p> ?。▓D1.2 三次握手的流程)</p><p> 1.2 網(wǎng)絡(luò)編程在JAVA上的實(shí)現(xiàn)</p><p> 1.2 .1 Java網(wǎng)絡(luò)應(yīng)用模型</p><p> 和Internet上的許多環(huán)境一樣,完整的Java應(yīng)用環(huán)境實(shí)際上也是一個(gè)客戶機(jī)/
29、服務(wù)器環(huán)境,更確切地說(shuō)是瀏覽器/服務(wù)器模型(即Browser/Server模型,簡(jiǎn)稱Web模型)。但與傳統(tǒng)的客戶機(jī)/服務(wù)器(C/S) 的二層結(jié)構(gòu)不同,應(yīng)用Java的Web模型是由三層結(jié)構(gòu)組成的。傳統(tǒng)的C/S結(jié)構(gòu)通過(guò)消息傳遞機(jī)制,由客戶端發(fā)出請(qǐng)求給服務(wù)器,服務(wù)器進(jìn)行相應(yīng)處理后經(jīng)傳遞機(jī)制送回客戶端。而在Web模型中,服務(wù)器一端被分解成兩部分:一部分是應(yīng)用服務(wù)器(Web 服務(wù)器),另一部分是數(shù)據(jù)庫(kù)服務(wù)器。 針對(duì)分布式計(jì)算環(huán)境,Java通
30、過(guò)其網(wǎng)絡(luò)類庫(kù)提供了良好的支持。對(duì)數(shù)據(jù)分布,Java提供了一個(gè)URL(Uniform Resource Locator) 對(duì)象, 利用此對(duì)象可打開(kāi)并訪問(wèn)網(wǎng)絡(luò)上的對(duì)象,其訪問(wèn)方式與訪問(wèn)本地文件系統(tǒng)幾乎完全相同。對(duì)操作分布,Java的客戶機(jī)/ 服務(wù)器模式可以把運(yùn)算從服務(wù)器分散到客戶一端(服務(wù)器負(fù)責(zé)提供查詢結(jié)果,客戶機(jī)負(fù)責(zé)組織結(jié)果的顯示),從而提高整個(gè)系統(tǒng)的執(zhí)行效率,增加動(dòng)態(tài)可擴(kuò)充性。Java網(wǎng)絡(luò)類庫(kù)是Java 語(yǔ)言為適應(yīng)Internet 環(huán)境
31、而進(jìn)行的擴(kuò)展。另外,為適應(yīng)Interne</p><p> 1.2 .2 客戶機(jī)/服務(wù)器環(huán)境下的Java應(yīng)用程序 </p><p> 客戶機(jī)/服務(wù)器在分布處理過(guò)程中,使用基于連接的網(wǎng)絡(luò)通信模式。該通信模式首先在客戶機(jī)和服務(wù)器之間定義一套通信協(xié)議,并創(chuàng)建一Socket類,利用這個(gè)類建立一條可靠的鏈接;然后,客戶機(jī)/服務(wù)器再在這條鏈接上可靠地傳輸數(shù)據(jù)??蛻魴C(jī)發(fā)出請(qǐng)求,服務(wù)器監(jiān)聽(tīng)來(lái)自客戶機(jī)
32、的請(qǐng)求,并為客戶機(jī)提供響應(yīng)服務(wù)。這就是典型的"請(qǐng)求-- 應(yīng)答" 模式。下面是客戶機(jī)/服務(wù)器的一個(gè)典型運(yùn)作過(guò)程: 1、服務(wù)器監(jiān)聽(tīng)相應(yīng)端口的輸入; 2、客戶機(jī)發(fā)出一個(gè)請(qǐng)求; 3、服務(wù)器接收到此請(qǐng)求; 4、服務(wù)器處理這個(gè)請(qǐng)求,并把結(jié)果返回給客戶機(jī); 5、重復(fù)上述過(guò)程,直至完成一次會(huì)話過(guò)程。 按照以上過(guò)程,我們使用Java語(yǔ)言編寫(xiě)一個(gè)分別針對(duì)服務(wù)器和客戶機(jī)的應(yīng)用程序(Application
33、)。該程序在服務(wù)器上時(shí),程序負(fù)責(zé)監(jiān)聽(tīng)客戶機(jī)請(qǐng)求,為每個(gè)客戶機(jī)請(qǐng)求建立Socket 連接,從而為客戶機(jī)提供服務(wù)。本程序提供的服務(wù)為:讀取來(lái)自客戶機(jī)的一行文本,反轉(zhuǎn)該文本,并把它發(fā)回給客戶機(jī)?! ⊥ㄟ^(guò)該程序?qū)嵗覀兛吹?,使用Java語(yǔ)言設(shè)計(jì)C/S程序時(shí)需要注意以下幾點(diǎn): ?。?)、 服務(wù)器應(yīng)使用ServerSocket 類來(lái)</p><p> 第二章 java網(wǎng)絡(luò)安全聊天系統(tǒng)設(shè)計(jì)</p><
34、;p><b> 2.1課題來(lái)源</b></p><p> 根據(jù)當(dāng)前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來(lái)越受各種網(wǎng)民所青睞。越來(lái)越多的人使用QQ,同時(shí)也越來(lái)越多的人對(duì)于QQ聊天的安全性擔(dān)憂,各種各樣的QQ病毒,QQ木馬,以及未加密的明文傳送,讓我們的網(wǎng)絡(luò)聊天環(huán)境越來(lái)越不安全。因此我決定以 基于java的網(wǎng)絡(luò)安全聊天工具 作為檢驗(yàn)我4年學(xué)習(xí)的課題。</p><p> 2.
35、2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分</p><p><b> 聊天系統(tǒng)工作原理圖</b></p><p> (圖2.1 服務(wù)器和客戶端之間關(guān)系)</p><p> 2 .3聊天系統(tǒng)各功能模塊</p><p> ?。?)服務(wù)器程序模塊</p><p> 服務(wù)器與客戶間通過(guò)套接口Socket
36、(TCP)連接。在java中使用套接口相當(dāng)簡(jiǎn)單,Java API為處理套接口的通信提供了一個(gè)類java.net.Socket,使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)器采用多線程以滿足多用戶的請(qǐng)求,并通過(guò)創(chuàng)建一個(gè)ServerSocket對(duì)象來(lái)監(jiān)聽(tīng)來(lái)自客戶的連接請(qǐng)求,默認(rèn)端口為6868,然后無(wú)限循環(huán)調(diào)用accept()方法接受客戶程序的連接。</p><p><b> (2)客戶程序模塊</b>&
37、lt;/p><p> 客戶通過(guò)Socket(InetAddress,port)建立與服務(wù)器的連接。服務(wù)器與客戶都通過(guò)構(gòu)造ObjectInputStream,ObjectOutputStream來(lái)建立輸入輸出流,然后雙方通過(guò)該輸入輸出流來(lái)相互傳遞信息,一旦收到客戶方的連接請(qǐng)求,服務(wù)器accept()方法返回一個(gè)新建的Socket對(duì)象??蛻舳巳缓笙蚍?wù)器發(fā)送消息,比如文件傳輸?shù)?,服?wù)器收到來(lái)自客戶的請(qǐng)求后,針對(duì)不同的消
38、息處理請(qǐng)求。</p><p><b> 2.4 需求分析</b></p><p> 聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶端。簡(jiǎn)單分析一下兩個(gè)方面所要完成的任務(wù),對(duì)設(shè)計(jì)這個(gè)程序來(lái)說(shuō),等于完成了一半。首先來(lái)看一下服務(wù)器端的任務(wù):</p><p> 1.服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽(tīng)是否有客戶端連接或者斷開(kāi)連接
39、(包括判斷沒(méi)有響應(yīng)的連接超時(shí))?! 。玻?wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。</p><p> 3. 服務(wù)器應(yīng)當(dāng)建立一個(gè)用戶賬號(hào)的數(shù)據(jù)庫(kù),用于管理用戶資料。</p><p> 4. 服務(wù)器應(yīng)當(dāng)能存有所有用戶的公鑰,以及所有加密過(guò)后的聊天記錄,當(dāng)用戶需要時(shí)便于驗(yàn)證信息內(nèi)容。</p><p> ?。▓D2.2
40、服務(wù)器的主要功能圖)</p><p> 如上圖就是服務(wù)器端最主要的幾個(gè)任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜。</p><p> 客戶端應(yīng)該完成的工作包括:</p><p> ?。保c服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。(包過(guò)用戶資料注冊(cè)、用戶登錄、群聊、用戶間私聊等各種消息) 2.接收來(lái)自服務(wù)器的信息。根據(jù)消息的內(nèi)容進(jìn)行操作,如抬出各種對(duì)話框、確認(rèn)信
41、息等。</p><p> ?。▓D2.3 客戶端的主要功能圖)</p><p> 相對(duì)服務(wù)器而言,客戶端的任務(wù)更加簡(jiǎn)單,有了以上的簡(jiǎn)單分析,可以知道,解決上述幾個(gè)個(gè)問(wèn)題,即完成了該聊天系統(tǒng)的核心。</p><p> 2.5 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn)</p><p> 聊天系統(tǒng)的設(shè)計(jì)跟普通軟件設(shè)計(jì)有著許多不同的地方,普通軟件設(shè)計(jì)所考慮的因素,
42、例如,普通軟件需要對(duì)布局進(jìn)入大量美化以及優(yōu)化設(shè)計(jì)等等,而聊天工具只要提供滿足用戶直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):</p><p><b> 1、實(shí)現(xiàn)思想</b></p><p> 在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這
43、是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。</p><p> 2、服務(wù)器端工作流程</p><p> (圖2.4 服務(wù)器主要運(yùn)行流程圖)</p><p> ?。▓D2.5 服務(wù)器的界面功能圖)</p><p> 服務(wù)器先創(chuàng)建一個(gè)client數(shù)組,用來(lái)存放id、連接用戶的名字、地址等,每個(gè)
44、用戶對(duì)應(yīng)一個(gè)client線程。同時(shí)連接用戶數(shù)據(jù)庫(kù)。</p><p> 對(duì)服務(wù)器本地端口(程序里默認(rèn)是6868)進(jìn)行監(jiān)聽(tīng),當(dāng)收到客戶連接請(qǐng)求后,接收用戶發(fā)來(lái)的信息,這里將消息進(jìn)行分段后進(jìn)行2種不同操作。第一種是注冊(cè)請(qǐng)求,繼續(xù)接受用戶名、密碼等信息,然后查詢數(shù)據(jù)庫(kù),判斷是否已經(jīng)注冊(cè),未注冊(cè)則插入用戶信息,返回成功信息給客戶端。已注冊(cè)則返回失敗消息。執(zhí)行完后回到流程1。第二種是登錄請(qǐng)求,繼續(xù)接受客戶端發(fā)來(lái)的用戶名和密
45、碼,查詢數(shù)據(jù)庫(kù)看是否有相同記錄,沒(méi)有則返回一個(gè)失敗信息給客戶端,然后回到流程1。若是用戶名和密碼都正確,則返回成功信息給客戶端。</p><p> 服務(wù)器將客戶的ID、用戶名、地址存到一個(gè)空的client,然后啟動(dòng)該用戶的數(shù)據(jù)接受發(fā)送線程。然后返回流程1。</p><p> Client線程啟動(dòng)后一直循環(huán)接受信息,直到收到該客戶端發(fā)來(lái)消息。根據(jù)消息的標(biāo)識(shí)符判斷是群發(fā)還是一對(duì)一單聊,群發(fā)
46、則所有的client線程將消息發(fā)回客戶端。如果是一對(duì)一單聊,則查找client數(shù)組的用戶名,找到相應(yīng)的客戶,使用該用戶的對(duì)應(yīng)線程發(fā)回該信息。</p><p> 如上服務(wù)器還有一些其他操作,如,更新在線用戶列表、發(fā)送在線用戶列表給客戶端,查看數(shù)據(jù)庫(kù)資料,對(duì)數(shù)據(jù)庫(kù)資料進(jìn)行插入、修改、刪除等、還有聊天記錄的保存打開(kāi)等。(為了安全起見(jiàn),這里的聊天記錄都是用戶用自己私鑰加密過(guò)的,服務(wù)器沒(méi)法解密,但是可以為用戶發(fā)生爭(zhēng)端或者
47、需要時(shí)提供記錄,讓用戶自己解密驗(yàn)證)</p><p><b> 3、客戶端工作流程</b></p><p> 客戶端程序相對(duì)與服務(wù)器來(lái)說(shuō)要簡(jiǎn)單一些:</p><p> ?。▓D2.6 客戶端主要界面功能圖)</p><p> (圖2.7 客戶端接受消息線程主要功能圖)</p><p> 顯示
48、登錄界面,這里可以選擇注冊(cè)用戶,用戶登錄,修改服務(wù)器ip以及端口等(默認(rèn)是本機(jī)ip,端口是6868)。選擇注冊(cè)進(jìn)入流程2,選擇登錄進(jìn)入流程3</p><p> 顯示注冊(cè)界面,這里要輸入用戶名,密碼,email等,對(duì)用戶名的要求有不為空以及不含畢設(shè)字樣即可。2次密碼需要一致。點(diǎn)擊發(fā)送將信息發(fā)給服務(wù)器,接受服務(wù)器返回信息,成功失敗均有相應(yīng)的對(duì)話框彈出。</p><p> 發(fā)送登錄用戶名和密
49、碼,接受服務(wù)器發(fā)回信息,成功進(jìn)入流程4,失敗則返回流程1。</p><p> 關(guān)閉打開(kāi)界面,顯示對(duì)話界面,同時(shí)啟動(dòng)一個(gè)專門接受服務(wù)器信息的線程。這里可以發(fā)送群聊消息,以及顯示你接受的消息。雙擊在線用戶列表的某一用戶,彈出相應(yīng)的單聊窗口,可以進(jìn)行一對(duì)一聊天。</p><p> 客戶端同樣有自動(dòng)更新在線用戶,保存聊天記錄等功能。</p><p> 第三章 系統(tǒng)設(shè)計(jì)
50、與實(shí)現(xiàn)</p><p> 3.1 開(kāi)發(fā)環(huán)境與工具</p><p> 基于JAVA聊天系統(tǒng)的設(shè)計(jì)主要運(yùn)用JAVA與語(yǔ)言與Socket類結(jié)合而開(kāi)發(fā)。其開(kāi)發(fā)的主要環(huán)境包括:</p><p> 服務(wù)器端:(Windows平臺(tái))首先應(yīng)有java環(huán)境jdk,建議采用jdk1.6以上,另外還需配置classpath環(huán)境變量,需要有一個(gè)access的數(shù)據(jù)庫(kù),配置好odbc的數(shù)
51、據(jù)源。數(shù)據(jù)源命名為kangxi。access數(shù)據(jù)庫(kù)里建立一個(gè)user表用來(lái)存儲(chǔ)用戶賬號(hào)信息。User表有7列,均為文本類型,分別是name,password,email,ans,創(chuàng)建登錄時(shí)間,最后登錄時(shí)間,賬號(hào)狀態(tài)。</p><p> 客戶端:只要有java環(huán)境jdk就可以,建議jdk1.6。</p><p><b> 3.2 硬件環(huán)境</b></p>
52、<p> 本系統(tǒng)運(yùn)行環(huán)境所需用到的環(huán)境為:硬件配置 :</p><p> 中央處理器(CPU) :P4 2.0G的處理器;</p><p> 硬 盤(pán):40GB以上硬盤(pán);</p><p> 內(nèi) 存:512 DDR內(nèi)存;</p><p> 顯示器:15寸顯示器等;</p><p> 顯 卡
53、:128M顯存顯卡</p><p> 軟件環(huán)境:WINDOWS XP、ACCESS數(shù)據(jù)庫(kù)、jdk1.6.03等。</p><p> 3.3 各個(gè)功能模塊的具體實(shí)現(xiàn)</p><p> 3.3.1 服務(wù)器的具體實(shí)現(xiàn)</p><p> 用戶注冊(cè)、登錄、密碼找回</p><p> 服務(wù)器監(jiān)聽(tīng)端口,接收到客戶端請(qǐng)求后,
54、接受類別信息。</p><p> String str = din.readUTF();chuli(str, dos);</p><p> 調(diào)用chuli(String str, DataOutputStream dos)方法處理消息</p><p> String tname = str.substring(0, str.lastIndexOf("
55、畢設(shè)"));</p><p> String message4 = str.substring(str.lastIndexOf("畢設(shè)") + 2); </p><p> 這里的tname有3種值:第一種表示用戶發(fā)出注冊(cè)請(qǐng)求,message4則為具體的所有注冊(cè)消息,服務(wù)器收到都連接服務(wù)器,查詢是否已有該用戶名的賬號(hào),沒(méi)有則將message4的值根據(jù)標(biāo)識(shí)符分
56、段,然后插入數(shù)據(jù)庫(kù),返回成功信息,反之亦然;第二種表示用戶發(fā)出密碼找回請(qǐng)求,message4為用戶輸入的密碼找回答案,服務(wù)器連接數(shù)據(jù)庫(kù),查詢是否存在該用戶名和答案匹配的記錄,成功則將密碼發(fā)回給用戶,反之則發(fā)揮失敗消息。dos.writeUTF("ok!"+"畢設(shè)"+rs.getString(1));這里的rs為查詢數(shù)據(jù)庫(kù)的返回結(jié)果;第三種用戶登錄請(qǐng)求,message4為用戶密碼,服務(wù)器收到后連接數(shù)
57、據(jù)庫(kù),判斷用戶信息是否正確,將結(jié)果返回給客戶端,當(dāng)結(jié)果為成功時(shí)服務(wù)器繼續(xù)向下運(yùn)行,失敗則回到監(jiān)聽(tīng)端口的地方。</p><p><b> 客戶端線程的存儲(chǔ)</b></p><p> 服務(wù)器為了能有效的處理各個(gè)用戶的請(qǐng)求,創(chuàng)建了一個(gè)客戶線程數(shù)組</p><p> public static Client user[] = new Client
58、[200];</p><p> 然后根據(jù)Client的定義用連接服務(wù)器端口的客戶端的編號(hào)、用戶名、輸入流、輸出流創(chuàng)建對(duì)象,啟動(dòng)線程,最后返回繼續(xù)監(jiān)聽(tīng)端口。</p><p> user[sum] = new Client(sum, Server.message1, dos, din); </p><p> 創(chuàng)建與客戶對(duì)應(yīng)的通信線程</p><
59、p> new Thread(user[sum]).start();</p><p> 啟動(dòng)發(fā)送數(shù)據(jù)到客戶端線程</p><p> 服務(wù)器中各個(gè)客戶端通信線程</p><p> 首先當(dāng)客戶線程啟動(dòng)時(shí)調(diào)用刷新在線用戶的方法:Server.rid();當(dāng)服務(wù)器中接受客戶端消息線程收到消息后,先進(jìn)行預(yù)處理</p><p> Strin
60、g tname = str.substring(0, str.lastIndexOf("標(biāo)識(shí)符"));</p><p> String message = str.substring(str.lastIndexOf("標(biāo)識(shí)符") + 3);</p><p> 將消息的對(duì)象和消息的具體內(nèi)容提取出來(lái),然后根據(jù)對(duì)象的值來(lái)判斷客戶端的請(qǐng)求種類。</
61、p><p> if (tname.equalsIgnoreCase("exit"))</p><p> 當(dāng)tname值為exit時(shí),表示客戶端下線了。此時(shí)服務(wù)器就要將play[]中該客戶端的用戶名刪去,同時(shí)調(diào)用刷新在線用戶列表的方法rid()。</p><p> if (tname.equalsIgnoreCase("all"
62、;)),</p><p> 當(dāng)tname值為all時(shí),表示這條消息是發(fā)給所有人的,服務(wù)器于是調(diào)用所有的在線用戶線程,將消息發(fā)給去。</p><p> for (int i = 0; i < m; i++){ </p><p> mess = this.name + " 對(duì)所有人說(shuō)\n" + message;</p>&
63、lt;p> Server.user[i].dos.writeUTF(mess);}</p><p> 這里的this.name是發(fā)出消息人的名字。當(dāng)tname的值不為exit和all時(shí),表示這條消息是私聊的消息,而且tname是接受客戶端的用戶名。此時(shí)要先找到接受用戶端的線程,然后才發(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 + "設(shè)畢" + mess);}}</p><p> 當(dāng)線程從接到消息后經(jīng)過(guò)這3步就完成了對(duì)這條消息的處理,然后循環(huán)回去繼續(xù)等
65、待接受此用戶的消息。</p><p> String str = new String(din.readUTF());</p><p><b> 在線用戶列表刷新</b></p><p> 創(chuàng)建一個(gè)String數(shù)組要來(lái)存放此時(shí)在線的用戶列表</p><p> public static String play[]
66、 = new String[200];</p><p> 當(dāng)有用戶上線或者下線時(shí)就對(duì)play[]進(jìn)行操作,接著將界面中的用戶表清空,然后把play[]中的所有值插入到表中,同時(shí)調(diào)用所有的在線用戶通信線程把更新的play[]加上標(biāo)識(shí)符發(fā)送出去,客戶端收到后根據(jù)標(biāo)識(shí)符判斷為列表更新消息,也清空列表然后插入新的play[]值。</p><p> 聊天信息的保存以及打開(kāi)</p>
67、<p> 點(diǎn)擊界面的保存記錄按鈕,調(diào)用保存記錄方法。</p><p> File a1=new File("jilu.txt");</p><p> if(!a1.exists()){ a1.createNewFile(); }\\當(dāng)沒(méi)有jilu.txt文件時(shí)創(chuàng)建文件</p><p> 將顯示區(qū)域的消息存以追加的方式寫(xiě)入到服務(wù)器
68、目錄下的jilu.txt文件,然后清空消息顯示區(qū)域的文字。</p><p> 點(diǎn)擊菜單欄的打開(kāi)記錄選項(xiàng),彈出一個(gè)對(duì)話框,打開(kāi)服務(wù)器目錄下的jilu.txt文件,將內(nèi)容顯示在對(duì)話框,當(dāng)無(wú)文件時(shí)顯示為空。</p><p><b> 數(shù)據(jù)庫(kù)的連接</b></p><p> 首先在數(shù)據(jù)庫(kù)創(chuàng)建表,然后在控制面板的管理工具->數(shù)據(jù)源 里面添加數(shù)
69、據(jù)源。在程序需要連接數(shù)據(jù)庫(kù)時(shí)</p><p> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p><p> con = DriverManager.getConnection("jdbc:odbc:kangxi", "", "");</p>
70、<p> 這是連接數(shù)據(jù)庫(kù)的驅(qū)動(dòng)以及連接數(shù)據(jù)源的用戶名和密碼。</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用來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)語(yǔ)言,然后SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)查詢操作將返回一個(gè)ResultSet對(duì)象。如果是插入以及更新數(shù)據(jù)庫(kù)則不需要返回值,只需要更新數(shù)據(jù)庫(kù)即可。</p><p> rs = ps.executeQuery();</p><p> 這里即表示對(duì)數(shù)據(jù)庫(kù)的操作進(jìn)行更新。<
72、;/p><p> 對(duì)用戶賬號(hào)的基本操作</p><p> 點(diǎn)擊菜單欄的用戶資料管理選項(xiàng),彈出賬號(hào)處理窗口,服務(wù)器連接數(shù)據(jù)庫(kù),然后將所有的用戶信息顯示到窗口的中間</p><p> String sqlstring = "SELECT * FROM user"; </p><p> PreparedStatement p
73、s = con.prepareStatement(sqlstring);</p><p> rs = ps.executeQuery();rs即為所有用戶信息</p><p> 在窗口菜單欄可以選擇具體的操作,如新建賬號(hào)、刪除賬號(hào)、查找賬號(hào)、修改賬號(hào)、退出管理等。關(guān)閉時(shí)斷開(kāi)與數(shù)據(jù)庫(kù)的連接。</p><p> 3.3.2客戶端的具體實(shí)現(xiàn)</p>&
74、lt;p> 連接服務(wù)器的設(shè)置 </p><p> 點(diǎn)擊設(shè)置,可以設(shè)置連接服務(wù)器的ip地址和端口,只有知道了服務(wù)器的ip以及開(kāi)放端口才能正確連接服務(wù)器。</p><p><b> 用戶賬號(hào)注冊(cè)</b></p><p> 點(diǎn)擊注冊(cè),彈出注冊(cè)窗口,填寫(xiě)用戶的基本信息,這里要求用戶名不準(zhǔn)為空,并且不能含標(biāo)識(shí)符,因?yàn)槌绦蚝芏嗟胤叫枰脴?biāo)識(shí)
75、符來(lái)分段信息。密碼2詞輸入要一致,密碼找回答案不為空。</p><p> 當(dāng)輸入完后,點(diǎn)注冊(cè),客戶端將信息發(fā)送給服務(wù)器</p><p> str=na1+標(biāo)識(shí)符1+na2+標(biāo)識(shí)符2+na3+標(biāo)識(shí)符3+na4;</p><p> mess=標(biāo)識(shí)符4+標(biāo)識(shí)符0+str; dos.writeUTF(mess);</p><p> na1-n
76、a4為用戶信息,標(biāo)識(shí)符0-標(biāo)識(shí)符3起分隔作用,標(biāo)識(shí)符4表示這條消息是注冊(cè)消息。然后接受服務(wù)器返回的結(jié)果,彈出相應(yīng)的對(duì)話窗提示用戶結(jié)果。</p><p><b> 密碼找回功能</b></p><p> 點(diǎn)擊密碼找回,彈出密碼找回窗口,輸入賬號(hào)以及密碼找回問(wèn)題的答案,將信息用標(biāo)識(shí)符組合發(fā)給服務(wù)器,然后接受服務(wù)器的返回信息,返回標(biāo)識(shí)符為ok則填出窗口顯示用戶名以及密碼
77、,失敗則提示輸入信息不正確。</p><p><b> 登錄賬號(hào)</b></p><p> 輸入用戶名和密碼后點(diǎn)登陸,將信息發(fā)給服務(wù)器,接受服務(wù)器返回結(jié)果,ok則關(guān)閉當(dāng)前窗口打開(kāi)對(duì)話窗口,失敗則提示用戶名密碼不正確。</p><p><b> 客戶端接受信息線程</b></p><p> 當(dāng)
78、客戶端登錄后,創(chuàng)建一個(gè)專門負(fù)責(zé)處理服務(wù)器發(fā)來(lái)消息的線程,循環(huán)接受消息。</p><p> 這里接收到的消息根據(jù)分隔符有3種:第一種分隔符表示這條消息是刷新在線用戶列表的,則清空用戶列表,然后將信息分段截取后的結(jié)果插入列表;第二種分隔符表示消息是群聊消息,則在消息顯示文本區(qū)域顯示。</p><p> displayarea.append(str+"\n\n");
79、 displayarea.setCaretPosition(displayarea.getText().length());\\這里的作用是滾屏</p><p> displayarea是文本區(qū)域;第三種分隔符是表示這是一對(duì)一單聊的消息,將消息根據(jù)分隔符截取,得到消息的發(fā)送人,查找是否已經(jīng)有與該用戶私聊的對(duì)話框,沒(méi)有則彈出與該用戶私聊的對(duì)話框,并顯示本條消息。如果已經(jīng)有與該用戶私聊的對(duì)話框
80、,則追加顯示本條信息。</p><p><b> 與在線用戶私聊</b></p><p> 雙擊在線用戶列表中的用戶名,彈出與該用戶私聊的對(duì)話窗口,在此次上線過(guò)程中這個(gè)對(duì)話窗口都將負(fù)責(zé)與該用戶的私聊,即使關(guān)閉了,該對(duì)話框也只是隱藏起來(lái)。</p><p><b> 聊天記錄的保存</b></p><
81、p> 點(diǎn)擊界面的保存記錄按鈕,調(diào)用保存記錄方法。</p><p> File a1=new File(fname+".txt");</p><p> if(!a1.exists()){ a1.createNewFile(); }</p><p> 將顯示區(qū)域的消息存以追加的方式寫(xiě)入到客戶端目錄下的以登錄用戶名命名的文件,然后清空消息
82、顯示區(qū)域的文字。點(diǎn)擊菜單欄的打開(kāi)記錄選項(xiàng),彈出一個(gè)對(duì)話框,打開(kāi)客戶端目錄下以登錄用戶名命名的文件,將內(nèi)容顯示在對(duì)話框,當(dāng)無(wú)文件時(shí)顯示為空。</p><p> 3.3.3 組員的加密實(shí)現(xiàn)</p><p> 同組的另一位同學(xué)將在我完成的模塊基礎(chǔ)上加入安全加密,大概功能有:</p><p> 當(dāng)用戶注冊(cè)時(shí)自動(dòng)生成用戶的RSA公私密鑰,保存在用戶端,將公鑰發(fā)給服務(wù)器
83、;每當(dāng)用戶發(fā)信息時(shí)想用des加密消息,再用私鑰加密對(duì)稱密鑰。達(dá)到對(duì)消息簽名的目的;服務(wù)器只能看到群聊的消息,而私聊的消息顯示的是加密過(guò)后的亂碼,這是為了保護(hù)用戶的隱私,同時(shí)當(dāng)用戶需要聊天記錄時(shí)可以發(fā)回給用戶解密驗(yàn)證。</p><p> 3.4 功能模塊的測(cè)試</p><p> 本次畢設(shè)的編譯環(huán)境,及編寫(xiě)平臺(tái)為java。主要用到的類為java.net包中的Socket類和javax.sw
84、ing包中的類。</p><p> ?。▓D3.1 服務(wù)器主界面)</p><p> 圖3.1為服務(wù)器開(kāi)始界面,下方各個(gè)用戶信息顯示區(qū)域,右側(cè)有一個(gè)在線用戶列表(當(dāng)有用戶登錄退出時(shí)都會(huì)更新,同時(shí)發(fā)送更新消息給所有客戶端)。保存記錄按鈕可以將信息存到服務(wù)器本地,可以通過(guò)file菜單里面的打開(kāi)記錄進(jìn)行查看。File菜單里面可以選擇賬號(hào)數(shù)據(jù)管理。</p><p> ?。▓D
85、3.2 服務(wù)器賬號(hào)管理主界面)</p><p> 圖3.2即為用戶資料管理界面,下方顯示所有注冊(cè)用戶的基本信息,操作菜單里面可以選擇對(duì)數(shù)據(jù)庫(kù)進(jìn)行插入,修改,刪除,查詢等操作。</p><p> 服務(wù)器線程在程序運(yùn)行期間一直有效,接受客戶端請(qǐng)求信息,轉(zhuǎn)發(fā)客戶端聊天內(nèi)容,查看用戶信息。</p><p> ?。▓D3.3 客戶端登陸界面)</p><
86、p> 客戶端運(yùn)行時(shí)必須先登陸,登陸界面如圖三,這里可以選擇登錄賬號(hào),注冊(cè)用戶,密碼找回,修改連接服務(wù)器ip以及端口等。</p><p> ?。▓D3.4 客戶端注冊(cè)界面)</p><p> 圖3.4為用戶注冊(cè)界面,這里要填寫(xiě)用戶的基本資料,當(dāng)你用戶名為空或者包含畢設(shè)字樣時(shí)會(huì)有對(duì)話框提示。注冊(cè)成功還是失敗都會(huì)有提示。如下:</p><p> ?。▓D3.5 注冊(cè)
87、時(shí)的各種提示)</p><p> ?。▓D3.6 密碼找回界面)</p><p> 圖3.6為密碼找回的界面,需要輸入注冊(cè)時(shí)填寫(xiě)的密碼找回答案,正確的話會(huì)彈出如圖3.7的對(duì)話框。</p><p> (圖3.7 密碼找回結(jié)果界面)</p><p> ?。▓D3.8 客戶端聊天主界面)</p><p> 圖3.8為用戶聊
88、天主界面,左上方為聊天記錄區(qū)域,左下方為用戶發(fā)送信息區(qū)域,右上方為在線用戶列表。雙擊用戶名會(huì)彈出一對(duì)一窗口如下圖3.9.</p><p> (圖3.9 客戶端用戶間私聊界面)</p><p> 上圖中窗口sissi是用戶kangxi雙擊sissi用戶后彈出的界面,輸入消息后,在用戶sissi的電腦上就會(huì)彈出窗口kangxi顯示剛剛kangxi發(fā)給sissi的消息。</p>
89、<p> (圖3.10 客戶端聊天記錄)</p><p> 圖3.10為用戶打開(kāi)聊天記錄是彈出的窗口。</p><p> 本聊天工具的所有一對(duì)一消息都是經(jīng)過(guò)加密的如下圖</p><p> (圖3.11 服務(wù)器可見(jiàn)消息圖)</p><p> 服務(wù)器只能看到群聊的明文,私聊只能看到加密過(guò)后的消息。</p>&l
90、t;p><b> 第四章 總結(jié)</b></p><p> 4.1 畢業(yè)設(shè)計(jì)總結(jié)與展望</p><p> 本畢業(yè)設(shè)計(jì)實(shí)現(xiàn)了簡(jiǎn)單的實(shí)時(shí)聊天功能,經(jīng)過(guò)細(xì)心的調(diào)試和排錯(cuò)解決了絕大部分的問(wèn)題。但幾乎每一個(gè)計(jì)算機(jī)程序都會(huì)有這樣那樣的不足,尤其是未經(jīng)過(guò)精心維護(hù)的非商業(yè)軟件。本聊天系統(tǒng)程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計(jì)課題來(lái)說(shuō),尤其在開(kāi)始初期,感覺(jué)邏輯復(fù)雜,難以控制,因此至今還
91、有許多未能解決的缺陷。</p><p> 目前本聊天系統(tǒng)還有待完善的功能:聊天系統(tǒng)缺乏好友列表;沒(méi)有實(shí)現(xiàn)文件發(fā)送功能;沒(méi)有辦法發(fā)送圖片等。</p><p> 盡管畢業(yè)設(shè)計(jì)到現(xiàn)在已接近尾聲,但是對(duì)于上述的缺陷,本人還會(huì)不斷對(duì)聊天系統(tǒng)進(jìn)一步的完善它,期望在今后的日子里憑借自身的技術(shù)把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。</p><p><b> 4.2 經(jīng)驗(yàn)
92、與感想</b></p><p> 基本JAVA的網(wǎng)絡(luò)安全聊天工具的開(kāi)發(fā)與實(shí)現(xiàn)作為畢業(yè)設(shè)計(jì),是本人目前做過(guò)的最大的程序。</p><p> 平時(shí)自己也常用各種聊天工具進(jìn)行聊天,因此,自己也曾想過(guò)以后學(xué)會(huì)了電腦就一定親自設(shè)計(jì)一款聊天工具,如今,總算實(shí)現(xiàn)了自己的夢(mèng)想?;綣AVA聊天系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)正是建立在Java平臺(tái)上,是本人以前未曾接觸過(guò)的領(lǐng)域。憑著探索新知識(shí)的熱情,
93、我選擇了該設(shè)計(jì)題目。</p><p> 學(xué)習(xí)該平臺(tái)背景和功能的時(shí)間遠(yuǎn)遠(yuǎn)超出了我想象的時(shí)間。在設(shè)計(jì)初期,為了畫(huà)出一個(gè)簡(jiǎn)單的圖形,都需要花一定的時(shí)間去掌握和熟悉。為了進(jìn)一步探索深層次的技巧,我花費(fèi)了大量時(shí)間在sun的Java主頁(yè)上,閱讀了十幾篇技巧和代碼樣例。</p><p> 在學(xué)習(xí)期間,本人還通過(guò)網(wǎng)上的各種JAVA源碼進(jìn)行學(xué)習(xí)與研究,我原以為這樣的設(shè)計(jì)水平將無(wú)法完成畢業(yè)設(shè)計(jì),但當(dāng)掌握了
94、大部分應(yīng)用技巧時(shí),剩下的聊天系統(tǒng)思路的設(shè)計(jì)就顯得不是最大的障礙了。</p><p> 我在一個(gè)月內(nèi)寫(xiě)完這個(gè)程序,經(jīng)過(guò)了很多次的調(diào)試,終于完成了現(xiàn)在的程序。原先認(rèn)為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和肯鉆研的勇氣,就一定會(huì)完成,甚至達(dá)到意想不到的效果。</p><p><b> 致謝語(yǔ)</b></p><p> 緊張而忙碌的畢業(yè)設(shè)計(jì)就
95、要結(jié)束了,在完成了系統(tǒng)的功能設(shè)計(jì)后,我感到由衷的喜悅和自豪。在我做畢業(yè)設(shè)計(jì)期間,許多老師,同學(xué)和朋友給我無(wú)私的關(guān)懷和幫助,在此,我要向他們表示衷心的感謝。</p><p> 首先,我要感謝學(xué)校的老師在畢業(yè)設(shè)計(jì)期間給了我悉心的關(guān)懷與幫助,并且給了我許多關(guān)鍵的,建設(shè)性的指導(dǎo)。</p><p> 這次的畢業(yè)設(shè)計(jì)讓我受益匪淺??梢赃@樣說(shuō),用計(jì)算機(jī)來(lái)解決繁重而低效的手工管理工作,計(jì)算機(jī)發(fā)展史上的
96、必然。在理論課的學(xué)習(xí)中,我掌握了基礎(chǔ)課和專業(yè)課的理論知識(shí),也曾經(jīng)做過(guò)一些程序設(shè)計(jì)的聯(lián)系和計(jì)算機(jī)綜合試驗(yàn),但真正動(dòng)手設(shè)計(jì)一個(gè)管理軟件,還是第一次。在這次的畢業(yè)設(shè)計(jì)中,我曾遇到了許多困難,而在克服這些困難的過(guò)程中,我的各方面的能力又有了很大的提高,使我的理論知識(shí)更好的與實(shí)踐相結(jié)合,增強(qiáng)了專業(yè)技能的可實(shí)踐性。從調(diào)研,需求分析到查找資料,結(jié)構(gòu)設(shè)計(jì),詳細(xì)設(shè)計(jì)以及調(diào)試程序,到最后的寫(xiě)使用說(shuō)明書(shū),我終于設(shè)計(jì)出了一個(gè)比較完整的,周密的,可使用的聊天系統(tǒng)
97、。通過(guò)這次的畢業(yè)設(shè)計(jì),我真正了解了軟件工程設(shè)計(jì)的整個(gè)過(guò)程,既鞏固了以前的理論知識(shí),也為我以后的工作奠定了良好的基礎(chǔ)。</p><p> 當(dāng)然,由于時(shí)間的短促,我所完成的系統(tǒng)并不是盡善盡美的,還有待進(jìn)一步的修改和完善。最后,請(qǐng)?jiān)试S我再一次向畢業(yè)期間無(wú)私幫助過(guò)我的老師,同學(xué)和朋友表示最衷心的感謝。</p><p><b> [參考文獻(xiàn)]</b></p>
98、<p> [1] (美)David M.Geary,李建森,蔣欣軍.JAVA2圖形設(shè)計(jì)卷2:SWING [M]. 北京: 機(jī)械工業(yè)出版社, 2000.</p><p> [2](美)Bruce Eckel , 侯捷 . Java編程思想(第2版) [M].北京: 機(jī)械工業(yè)出版社, 2002.</p><p> [3](美)Elliotte Rusty Harol
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于netbios的聊天工具
- java基于tcp_ip協(xié)議的聊天工具的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)設(shè)計(jì)
- java網(wǎng)頁(yè)版即時(shí)聊天工具開(kāi)題報(bào)告
- 基于android的即時(shí)聊天工具
- 畢業(yè)設(shè)計(jì)--網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)(含外文翻譯)
- 網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于linux的socket網(wǎng)絡(luò)編程聊天工具課程設(shè)計(jì)
- 網(wǎng)絡(luò)視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 局域網(wǎng)聊天工具設(shè)計(jì)畢業(yè)論文
- 開(kāi)題報(bào)告-基于android的即時(shí)聊天工具
- 基于.net的局域網(wǎng)聊天工具
- 基于OpenSSL開(kāi)發(fā)的聊天工具的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于.net的局域網(wǎng)聊天工具論文
- 畢業(yè)論文---局域網(wǎng)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)
- 聊天工具仿真表情插件的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于qt4的視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)絡(luò)聊天工具與傳統(tǒng)紙媒跨媒體整合初探.pdf
- 基于QT4的視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn).doc
- 課程設(shè)計(jì)報(bào)告---聊天工具服務(wù)器端設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論