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