版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 河北農(nóng)業(yè)大學(xué)信息學(xué)院</p><p><b> 本科畢業(yè)論文</b></p><p> 題 目: 局域網(wǎng)下的java聊天軟件 </p><p> 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 </p><p> 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)0902班 </p>
2、<p> 學(xué) 號(hào): 2009234030405 </p><p> 學(xué)生姓名: 黃彪 </p><p> 指導(dǎo)教師姓名: 王克儉 </p><p> 指導(dǎo)教師職稱: 教授 </p><p&g
3、t; 2013年 5 月 20 日</p><p><b> 摘要</b></p><p> 隨著互聯(lián)網(wǎng)的迅猛的發(fā)展,網(wǎng)絡(luò)逐漸成了人們獲取信息的主要途徑。做為傳統(tǒng)的信息交流工具e-mail,因?yàn)槠浒l(fā)送和接受消息時(shí)間相對(duì)滯后的緣故,不能滿足人們迅速獲取信息的要求。即時(shí)通訊應(yīng)運(yùn)而生,為大眾提供了一種嶄新的綜合的信息交流平臺(tái)。即時(shí)通訊不同于傳統(tǒng)的通訊工具e-ma
4、il,在于它的交流是實(shí)時(shí)的,使得人們交流更加便捷和快速,滿足了人們迅速獲取信息的需求,以深受大眾的喜愛,有著很好的發(fā)展前景。其中聊天軟件就是即時(shí)通訊的具體實(shí)現(xiàn)。</p><p> 本系統(tǒng)建立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過程
5、中,采用了多線程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。</p><p> 關(guān)鍵字:多線程;客戶機(jī)/服務(wù)器;java;socket;eclipse</p><p><b> Abstract</b></p><p> With the rapid development of In
6、ternet, the network gradually becomes the main way for people to obtain information. As the traditional information communication tool e-mail, because of the relative lag of the sending and receiving messages of time rea
7、sons, cannot satisfy people quick access to information requirements. Im emerge as the times require, provides a new integrated information exchange platform for the public. Unlike traditional instant messaging communica
8、tion tool e-mail, the exchan</p><p> The system built on the JAVA platform, the system design using object-oriented technology and object-oriented design principles. System uses the C / S structure, client
9、and client-side and server-side client and send messages through Socket. The use of JAVA language, development tools using Eclipse. Design and Implementation of server-side process, the use of multi-threading technology,
10、 which can process in a single run at the same time a number of different threads, the implementation of differ</p><p> Keywords: multiple threads ; client/server ; Java ; socket ; Eclipse.</p><p
11、><b> 目 錄</b></p><p><b> 1 緒論3</b></p><p> 1.1聊天軟件開發(fā)背景3</p><p> 1.2 Java語言3</p><p> 1.2.1 Java的發(fā)展歷史3</p><p> 1.2.2 Ja
12、va的特點(diǎn)4</p><p> 1.2.3 Java與Internet5</p><p> 1.3 Socket編程6</p><p> 1.3.1 關(guān)于TCP/IP協(xié)議6</p><p> 1.3.2 服務(wù)器和客戶機(jī)6</p><p><b> 2 需求分析7</b><
13、;/p><p> 2.1可行性分析7</p><p> 2.2系統(tǒng)功能需求7</p><p> 2.3 系統(tǒng)性能需求7</p><p><b> 3 概要設(shè)計(jì)8</b></p><p><b> 3.1運(yùn)行環(huán)境8</b></p><p>
14、; 3.2軟件功能框架圖8</p><p> 3.2.1服務(wù)端功能框架圖8</p><p> 3.2.2客戶端功能框架圖8</p><p><b> 4 詳細(xì)設(shè)計(jì)9</b></p><p><b> 4.1流程圖9</b></p><p> 4.1.1服
15、務(wù)端9</p><p> 4.1.2客戶端10</p><p> 4.2編寫服務(wù)器端程序10</p><p> 4.2.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)10</p><p> 4.2.2 問題陳述11</p><p> 4.2.3 解決方案11</p><p>
16、 4.3編寫客戶端程序13</p><p> 4.3.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)13</p><p> 4.3.2 問題陳述13</p><p> 4.3.3解決方案13</p><p><b> 5系統(tǒng)實(shí)現(xiàn)17</b></p><p><b> 5.1
17、服務(wù)端17</b></p><p> 5.1.1服務(wù)器啟動(dòng)配置17</p><p> 5.1.2服務(wù)端主窗口17</p><p><b> 5.2客戶端18</b></p><p> 5.2.1客戶端登陸18</p><p> 5.2.2客戶端配置19</p
18、><p> 5.2.3客戶端聊天主窗口19</p><p><b> 致謝21</b></p><p><b> 參考文獻(xiàn)22</b></p><p><b> 1 緒論</b></p><p> 1.1聊天軟件開發(fā)背景</p>
19、<p> Internet是目前世界上最大的計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò),它遍布全球,將世界各地各種規(guī)模的網(wǎng)絡(luò)連接成一個(gè)整體。作為Internet上一種先進(jìn)的,易于被人們所接受的信息檢索手段,World Wide Web(簡(jiǎn)稱WWW)發(fā)展十分迅速,成為目前世界上最大的信息資源寶庫(kù)。據(jù)估計(jì),目前Internet上已有上百萬個(gè)Web站點(diǎn),其內(nèi)容范圍跨越了教育科研、文化事業(yè)、金融、商業(yè)、新聞出版、娛樂、體育等各個(gè)領(lǐng)域,其用戶群十分龐大,因此,
20、建設(shè)一個(gè)好的Web站點(diǎn)對(duì)于一個(gè)機(jī)構(gòu)的發(fā)展十分重要。近年來計(jì)算機(jī)技術(shù)的快速發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價(jià)格,開發(fā)出更方便、更實(shí)用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影響了人們的聯(lián)系和交流方式,使得人們可以在遠(yuǎn)隔千里之遙隨時(shí)通訊。過去的種種陳舊的聯(lián)系方式,已經(jīng)不能滿足現(xiàn)代生活的需要。網(wǎng)上聊天系統(tǒng)作為一種方便消費(fèi)者與人們之間聯(lián)系的實(shí)用系統(tǒng)便應(yīng)運(yùn)而生。網(wǎng)上聊天系統(tǒng)是為人們進(jìn)行交流和
21、聯(lián)系提供的一個(gè)平臺(tái)。通過提供完善的網(wǎng)上聊天系統(tǒng)的管理,可以達(dá)到增進(jìn)人們與消費(fèi)者之間、消費(fèi)者與消費(fèi)者之間的交流和聯(lián)系的目的</p><p> 局域網(wǎng)聊天工具是一種面向企業(yè)局域網(wǎng)終端使用者的網(wǎng)絡(luò)溝通工具服務(wù),使用者可以通過安裝了即時(shí)通信的終端機(jī)進(jìn)行兩人或多人之間的實(shí)時(shí)溝通。</p><p> 目前,中國(guó)市場(chǎng)上的企業(yè)級(jí)即時(shí)通信工具主要包括:通軟聯(lián)合的GoCom、騰訊公司的RTX、IBM的Lo
22、tus Sametime等,免費(fèi)版的有網(wǎng)絡(luò)信使,傳我,匯海集團(tuán)的匯訊WiseUC等。局域網(wǎng)聊天軟件不再是一個(gè)單純的聊天工具,它已經(jīng)發(fā)展成集交流、資訊、娛樂、搜索、電子商務(wù)、辦公協(xié)作和企業(yè)客戶服務(wù)等為一體的綜合化信息平臺(tái)。是一種終端連往即時(shí)通訊網(wǎng)絡(luò)的服務(wù)。局域網(wǎng)通訊不同于e-mail在于它的交談是即時(shí)的。大部分的即時(shí)通訊服務(wù)提供了狀態(tài)信息的特性──顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在在線與能否與聯(lián)絡(luò)人交談。</p><p>
23、; 局域網(wǎng)聊天工具,是以企業(yè)內(nèi)部辦公,建立員工交流平臺(tái)為基礎(chǔ),通過系統(tǒng)整合、邊緣功能,為企業(yè)提供一整套的即時(shí)溝通和實(shí)時(shí)協(xié)作的解決方案。由于企業(yè)對(duì)信息類軟件的需求還在“探索”與“嘗試”階段,所以會(huì)導(dǎo)致很多系統(tǒng)不能“互通”,這也成了局域網(wǎng)聊天軟件的一個(gè)使命。當(dāng)信息軟件被廣泛使用之后,“互通”接口具備否,將被作為軟件被選用的重要條件。</p><p> 1.2 Java語言</p><p>
24、 1.2.1 Java的發(fā)展歷史</p><p> 在這個(gè)世界上,熟悉Java歷史的人非常多,如果要問一個(gè)人Java是從哪年誕生的,也許大多數(shù)人都會(huì)回答是1995年(這個(gè)非常好記,因?yàn)槲④浀腤indows95也是在這一年發(fā)布的)。但事實(shí)上Java早在上個(gè)世紀(jì)90年代初就開始醞釀了。</p><p> 自1995年到1998年是Java的幼年時(shí)期,Sun在Green項(xiàng)目經(jīng)過了幾年的研究
25、,終于在1995年5月23日在SunWorld'95上正式發(fā)布Java和Hot Java瀏覽器但這只是一種語言,而要想開發(fā)復(fù)雜的應(yīng)用程序,必須要有一個(gè)的強(qiáng)大的開發(fā)庫(kù)支持還行。因此,sun在之后的幾年中推出了推出JDK多個(gè)版本。雖然在1998年之前,Java被眾多的軟件企業(yè)所采用,但由于當(dāng)時(shí)硬件環(huán)境和JVM的技術(shù)原因,它的應(yīng)用卻很有限。當(dāng)時(shí)Java主要只使用在前端的Applet以及一些移動(dòng)設(shè)備中。然而這并不等于Java的應(yīng)用只限于
26、這些領(lǐng)域。在1998年是Java開始迅猛發(fā)展的一年。在這一年中Sun發(fā)布了JSP/Servlet、EJB規(guī)范以及將Java分成了J2EE、J2SE和J2ME。標(biāo)志著Java已經(jīng)吹響了向企業(yè)、桌面和移動(dòng)3個(gè)領(lǐng)域進(jìn)軍的號(hào)角。</p><p> 自1998年到2004年是Java的青少年時(shí)期,在1998年12月4日。Sun發(fā)布了Java的歷史上最重要的一個(gè)JDK版本:JDK1.2。這個(gè)版本標(biāo)志著Java已經(jīng)進(jìn)入Jav
27、a2時(shí)代。這個(gè)時(shí)期也是Java飛速發(fā)展的時(shí)期。在Java2時(shí)代Sun對(duì)Java進(jìn)行了很多革命性的變化,而這些革命性的變化一直沿用到現(xiàn)在,對(duì)Java的發(fā)展形成了深遠(yuǎn)的影響。</p><p> 2004年至今是Java的壯年時(shí)期。在2004年10月,Sun發(fā)布了我們期待已久的版本:JDK1.5,同時(shí),Sun將JDK1.5改名為J2SE5.0。和JDK1.4不同,JDK1.4的主題是性能,而J2SE5.0的主題是易用
28、。Sun不僅為J2SE5.0增加了諸如泛型、增強(qiáng)的for語句、可變數(shù)目參數(shù)、注釋(Annotations)、自動(dòng)拆箱(unboxing)和裝箱等功能,同時(shí),也更新的企業(yè)級(jí)規(guī)范,如通過注釋等新特性改善了EJB的復(fù)雜性,并推出了EJB3.0規(guī)范。</p><p> 在Java發(fā)展的十幾年的時(shí)間里,經(jīng)歷了無數(shù)的風(fēng)風(fēng)雨雨?,F(xiàn)在Java已經(jīng)成為一種相當(dāng)成熟的語言了。在這10年的發(fā)展中,Java平臺(tái)吸引了數(shù)百萬的開發(fā)者,在
29、網(wǎng)絡(luò)計(jì)算遍及全球的今天,更是有20億臺(tái)設(shè)備使用了Java技術(shù)。</p><p> 1.2.2 Java的特點(diǎn)</p><p> Java語言有下面一些特點(diǎn) :簡(jiǎn)單、面向?qū)ο?、分布式、解釋?zhí)行、魯棒、安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動(dòng)態(tài)性?! ?.簡(jiǎn)單性 Java語言是一種面向?qū)ο蟮恼Z言 ,它通過提供最基本的方法來完成指定的任務(wù) ,只需理解一些基本的概念 ,就可以用它
30、編寫出適合于各種情況的應(yīng)用程序。 Java略去了運(yùn)算符重載、多重繼承等模糊的概念 ,并且通過實(shí)現(xiàn)自動(dòng)垃圾收集大大簡(jiǎn)化了程序設(shè)計(jì)者的內(nèi)存管理工作。</p><p><b> 2.面向?qū)ο?lt;/b></p><p> Java語言的設(shè)計(jì)集中于對(duì)象及其接口 ,它提供了簡(jiǎn)單的類機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝了它的狀態(tài)變量以及相應(yīng)的方法 ,實(shí)現(xiàn)了模塊化和信息隱藏 ;而類則
31、提供了一類對(duì)象的原型 ,并且通過繼承機(jī)制 ,子類可以使用父類所提供的方法 ,實(shí)現(xiàn)了代碼的復(fù)用。</p><p><b> 3.分布性</b></p><p> Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫(kù)可以處理 TCP/IP協(xié)議 ,用戶可以通過 URL地址在網(wǎng)絡(luò)上很方便地訪問其它對(duì)象。 4.魯棒性</p><p> Java在編譯和運(yùn)行
32、程序時(shí) ,都要對(duì)可能出現(xiàn)的問題進(jìn)行檢查 ,以消除錯(cuò)誤的產(chǎn)生。它提供自動(dòng)垃圾收集來進(jìn)行內(nèi)存管理 ,防止程序員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。通過集成的面向?qū)ο蟮睦馓幚頇C(jī)制 ,在編譯時(shí),Java提示出可能出現(xiàn)但未被處理的例外 ,幫助程序員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外,Java在編譯時(shí)還可捕獲類型聲明中的許多常見錯(cuò)誤 ,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問題的出現(xiàn)。</p><p><b> 5.安全性</b
33、></p><p> 用于網(wǎng)絡(luò)、分布環(huán)境下的 Java必須要防止病毒的入侵。 Java不支持指針,一切對(duì)內(nèi)存的訪問都必須通過對(duì)象的實(shí)例變量來實(shí)現(xiàn) ,這樣就防止程序員使用"特洛伊 "木馬等欺騙手段訪問對(duì)象的私有成員 ,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。</p><p> 6.體系結(jié)構(gòu)中立 Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令 ,只要安裝了 Jav
34、a運(yùn)行時(shí)系統(tǒng) ,Java程序就可在任意的處理器上運(yùn)行。這些字節(jié)碼指令對(duì)應(yīng)于 Java虛擬機(jī)中的表示 ,Java解釋器得到字節(jié)碼后 ,對(duì)它進(jìn)行轉(zhuǎn)換 ,使之能夠在不同的平臺(tái)運(yùn)行。</p><p><b> 7.可移植性</b></p><p> 與平臺(tái)無關(guān)的特性使 Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時(shí) ,Java的類庫(kù)中也實(shí)現(xiàn)了與不同平臺(tái)的接口 ,使這
35、些類庫(kù)可以移植。另外,Java編譯器是由 Java語言實(shí)現(xiàn)的 ,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn) C實(shí)現(xiàn) ,這使得Java系統(tǒng)本身也具有可移植性。</p><p><b> 8.解釋執(zhí)行</b></p><p> Java解釋器直接對(duì) Java字節(jié)碼進(jìn)行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時(shí)信息 ,使得連接過程更加簡(jiǎn)單。</p><p><b&
36、gt; 9.高性能</b></p><p> 和其它解釋執(zhí)行的語言如 BASIC、 TCL不同 ,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對(duì)應(yīng)于特定CPU的機(jī)器碼 ,從而得到較高的性能。</p><p><b> 10.多線程</b></p><p> 多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行 ,而且同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正
37、確操作。通過使用多線程 ,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為 ,而不需要采用全局的事件循環(huán)機(jī)制 ,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。</p><p> 1.2.3 Java與Internet</p><p> Java語言取得成功的領(lǐng)域之一就是網(wǎng)絡(luò)(其他語言)數(shù)頁(yè)代碼---->(Java)一條語句。TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議
38、,定義了計(jì)算機(jī)和外設(shè)進(jìn)行通信所使用的規(guī)則(應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層).大多數(shù)基于internet的應(yīng)用程序被看作TCP/IP協(xié)議的上一層. 如 : ftp, http, smtp, pop3, telnet, nntp等。</p><p> IP地址:TCP/IP網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)都有唯一的地址--IP地址.</p><p> 在Java中,有一個(gè)用來存儲(chǔ)internet地址的類
39、叫InterAddress.</p><p> Java提供的網(wǎng)絡(luò)功能有三大類: URL, Socket, Datagram.</p><p> 1、URL是三大功能中最高級(jí)的一種,通過URL Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).</p><p> 2、Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過網(wǎng)絡(luò)的通信信道.</p&g
40、t;<p> 3、Datagram是更低級(jí)的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上</p><p> 1.3 Socket編程</p><p> 1.3.1 關(guān)于TCP/IP協(xié)議</p><p> Transmission Control Protocol/Internet Protocol的簡(jiǎn)寫,中譯名為傳輸控制協(xié)議/
41、因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定
42、一個(gè)地址。TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對(duì)此,Java專門提供了Socket的類庫(kù),在其中抽象出TCP協(xié)議通信的常用方法。</p><p> 1.3.2 服務(wù)器和客戶機(jī)</p><p> 客戶機(jī)又稱為用戶工作站,是用戶與網(wǎng)絡(luò)打交道的設(shè)備,一般由微機(jī)擔(dān)任,每一個(gè)客戶機(jī)都運(yùn)行在它自己的、并為服務(wù)器所認(rèn)可的操作系統(tǒng)環(huán)境中。服務(wù)器指一個(gè)管理資源并為用戶提供服務(wù)的計(jì)算機(jī)軟件,通常分為文件服務(wù)器、數(shù)
43、據(jù)庫(kù)服務(wù)器和應(yīng)用程序服務(wù)器。運(yùn)行以上軟件的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)也被稱為服務(wù)器。服務(wù)器的主要任務(wù)是偵聽建立連接的請(qǐng)求,這是由我們創(chuàng)建的特定服務(wù)器對(duì)象完成的。而客戶機(jī)的任務(wù)是試著與一臺(tái)服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶機(jī)對(duì)象完成的。一旦連接建好,那么無論在服務(wù)器端還是客戶機(jī)端,連接只是魔術(shù)般地變成了一個(gè)IO數(shù)據(jù)流對(duì)象。從這時(shí)開始,我們可以象讀寫一個(gè)普通的文件那樣對(duì)待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Jav
44、a聯(lián)網(wǎng)最方便的一個(gè)地方。</p><p><b> 2 需求分析</b></p><p><b> 2.1可行性分析</b></p><p> (1)經(jīng)濟(jì)可行性:本系統(tǒng)無需數(shù)據(jù)庫(kù)服務(wù),由于聊天室使用人數(shù)有限,無數(shù)據(jù)庫(kù)完全可以應(yīng)付,所以成本就無需考慮了。</p><p> ?。?)操作可行性:只
45、要一臺(tái)以上的計(jì)算機(jī)連在同一個(gè)局域網(wǎng)上,本系統(tǒng)就可以使用了,所以操作簡(jiǎn)單,不存在問題。</p><p> ?。?)技術(shù)可行性:本系統(tǒng)采用java語言,是基于CS架構(gòu)的。開發(fā)這個(gè)軟件需要開發(fā)者對(duì)socket編程和java Swing 及多線程技術(shù)比較熟悉。由于本人對(duì)java應(yīng)用水平有限,希望不足之處可以得到諒解。</p><p> 綜上所述,本系統(tǒng)的設(shè)計(jì)與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿
46、足的,因此,它在技術(shù)上是可行的。</p><p><b> 2.2系統(tǒng)功能需求</b></p><p> 本系統(tǒng)主要通過客戶端、服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。</p><p><b> ?。?)服務(wù)器端</b></p><p><b> 1.處理用戶注冊(cè)</b><
47、;/p><p><b> 2.處理用戶登錄</b></p><p> 3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容</p><p> 4.處理用戶得到信息</p><p><b> 5.處理用戶退出</b></p><p><b> 8. 服務(wù)器踢人。</b
48、></p><p> 9. 保存服務(wù)器日志。</p><p><b> (2)客戶端</b></p><p> 1.用戶登錄界面及結(jié)果</p><p> 2.用戶發(fā)送信息界面及結(jié)果</p><p> 3.用戶得到信息界面及結(jié)果</p><p> 4.用戶退
49、出界面及結(jié)果</p><p> 2.3 系統(tǒng)性能需求</p><p> 實(shí)用性:為局域網(wǎng)聊天提供方便,有效進(jìn)行作業(yè)管理。</p><p> 操作簡(jiǎn)單:本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時(shí)系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡(jiǎn)單易行。</p><p> 安裝使用簡(jiǎn)便:服務(wù)器端的安裝簡(jiǎn)潔明了,客戶機(jī)無需
50、再裝任何軟件就可以直接注冊(cè)登陸聊天。</p><p> 適應(yīng)性:應(yīng)該能廣泛應(yīng)用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設(shè)計(jì),用戶可以根據(jù)自己的實(shí)際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應(yīng)用。</p><p><b> 3 概要設(shè)計(jì)</b></p><p><b> 3.1運(yùn)行環(huán)境</b></p>
51、<p> 安裝有JRE1.5以上的windows系統(tǒng)(推薦winXP,winVista或win7)</p><p> 3.2軟件功能框架圖</p><p> 3.2.1服務(wù)端功能框架圖</p><p> 這個(gè)圖主要介紹服務(wù)端的功能,主要包括測(cè)試端口、保存配置、服務(wù)器管理、用戶管理、日志管理。如圖1所示。</p><p>
52、圖3-1服務(wù)端功能框架圖</p><p> 3.2.2客戶端功能框架圖</p><p> 這個(gè)圖主要介紹了客戶端的功能,主要包括設(shè)置IP、設(shè)置端口、修改密碼、發(fā)送私聊信息、發(fā)送公聊信息、顯示公告、顯示在線用戶。如圖2所示。</p><p> 圖3-2客戶端功能框架圖</p><p><b> 4 詳細(xì)設(shè)計(jì)</b>
53、</p><p><b> 4.1流程圖</b></p><p><b> 4.1.1服務(wù)端</b></p><p> 4.1.1.1服務(wù)器登錄流程圖</p><p> 當(dāng)打開服務(wù)器登錄主窗體時(shí),需要測(cè)試端口是否可用,如可用則保存配置文件,若保存成功則進(jìn)入服務(wù)器界面。如圖3所示。</p
54、><p> 圖4-1服務(wù)端登錄流程圖</p><p> 4.1.1.2服務(wù)器管理流程圖</p><p> 當(dāng)進(jìn)入服務(wù)器界面時(shí),使用者可以開啟服務(wù)器,監(jiān)聽連接請(qǐng)求,處理用戶發(fā)送過來的消息,當(dāng)點(diǎn)擊右上角的推出按鈕時(shí)退出并關(guān)閉所有連接。如圖4所示。</p><p> 圖4-2 服務(wù)器管理流程圖</p><p><b
55、> 4.1.2客戶端</b></p><p> 在客戶端,用戶首先進(jìn)入登錄窗體,如果IP、端口號(hào)、用戶名、密碼都正確,則進(jìn)入聊天窗口,否則給出相應(yīng)的提示信息。進(jìn)入聊天窗口后可以修改密碼、發(fā)送聊天信息、顯示公告和在線用戶列表。如圖5所示。</p><p> 圖4-3 客戶端流程圖</p><p> 4.2編寫服務(wù)器端程序</p>
56、<p> 4.2.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)</p><p><b> 格式說明</b></p><p> package pub;</p><p> importjava.io.Serializable;</p><p> // 封裝數(shù)據(jù)的包,它現(xiàn)了java.io.Serializa
57、ble接口</p><p> public class QQPackage implements Serializable{</p><p> private String from;// 消息發(fā)送者</p><p> private String to;// 消息接收者</p><p> privatePackTypepackTyp
58、e; //包類型</p><p> private Object data;// 數(shù)據(jù)包</p><p><b> }</b></p><p><b> 包類型說明</b></p><p> package pub;</p><p><b> //包類型
59、</b></p><p> publicenumPackType {</p><p> loginApply,// 登陸申請(qǐng)</p><p> loginSuccess,// 登陸成功</p><p> loginFail,// 登陸失敗</p><p> privateChat, 私聊</
60、p><p> publicChat,// 群聊</p><p> post,// 公告</p><p> onlineuser,// 在線用戶列表</p><p> enforceDown,// 強(qiáng)制下線</p><p> stopServer,// 停止服務(wù)</p><p> user
61、Offline,// 用戶下線</p><p> resetPassword,// 修改密碼</p><p><b> }</b></p><p> 4.2.2 問題陳述</p><p><b> 1. 用戶注冊(cè)。</b></p><p> 2. 能夠允許注冊(cè)過的用
62、戶登錄聊天界面并可以聊天。</p><p> 3. 能夠接受私聊信息并發(fā)送給特定的用戶。</p><p> 4. 服務(wù)器運(yùn)行在自定義的端口上6000.</p><p> 5. 服務(wù)器監(jiān)控用戶列表和用戶聊天信息。</p><p> 6. 服務(wù)器踢人,發(fā)送通知。</p><p> 7. 服務(wù)器保存日志。</
63、p><p> 4.2.3 解決方案</p><p> 4.2.3.1服務(wù)器登錄配置</p><p> Login_JFram這個(gè)類是一個(gè)服務(wù)端登錄窗體,在其中要讀取config.ini中的配置信息,測(cè)試端口是否可用,若可用則創(chuàng)建一個(gè)serversocket,并用login_button_listener這個(gè)類去監(jiān)聽按鈕并作出響應(yīng)。</p><
64、p> 4.2.3.2服務(wù)端設(shè)計(jì)</p><p> QQ_Server_JFrame是服務(wù)器主窗體,其中有三個(gè)成員變量分別是Sermanager_JPanel(服務(wù)器管理面板)、UserManager_JPanel(用戶管理面板)、LogsManager_Panel(日志管理面板)。</p><p> 在服務(wù)器管理面板中,有一個(gè)ServerManager_Button_Liste
65、ner負(fù)責(zé)監(jiān)聽按鈕。</p><p> 當(dāng)按下啟動(dòng)服務(wù)器按鈕時(shí),更改圖片,寫啟動(dòng)服務(wù)日志,并創(chuàng)建一個(gè)服務(wù)端監(jiān)聽客戶連接的線程(Accept_Thread),并啟動(dòng)。在此線程中會(huì)根據(jù)用戶的狀態(tài)創(chuàng)建一個(gè)用于讀取的線程(Server_Read_Thread),它會(huì)根據(jù)包類型做出不同的操作。</p><p> 當(dāng)按下停止服務(wù)按鈕時(shí),停止服務(wù),更改圖片,寫停止服務(wù)日志,修改用戶狀態(tài),刷新用戶列表
66、,通知用戶下線,發(fā)stopServer包</p><p> 當(dāng)按下強(qiáng)制用戶下線按鈕時(shí),要判斷用戶ID,封裝強(qiáng)制下線包,關(guān)閉強(qiáng)制下線用戶的線程、流。</p><p> 在用戶管理面板中,用一個(gè)用戶管理面板按鈕的監(jiān)聽器(UserManager_Button_Listener)完成查詢用戶,顯示在線用戶列表的顯示,添加新用戶,刪除用戶,修改資料,重設(shè)所有密碼,重設(shè)所選密碼的功能。</p
67、><p> 當(dāng)按下用戶添加按鈕和修改資料按鈕時(shí)創(chuàng)建一個(gè)用戶信息的對(duì)話框,調(diào)用UserInfo_JDialog(UsersManager_JPanelusersManager_JPanel, QQ_Server_JFrameqq_Server_JFrame, int kind)方法。這個(gè)方法會(huì)判斷操作類型,生成一個(gè)存放對(duì)話框內(nèi)容的JPanel,初始化編號(hào)、密碼、注冊(cè)時(shí)間,實(shí)例化UserInfo_Button_List
68、ener(添加用戶和修改用戶對(duì)話框的監(jiān)聽器),</p><p> 當(dāng)按下查詢按鈕時(shí),獲取用戶id和姓名,調(diào)用UserDaoImpl(訪問數(shù)據(jù)的方法類)的selectList(Stringsid, Stringsname, int state)方法,這個(gè)方法通過判斷state將移除密碼后的Vector返回顯示。</p><p> 當(dāng)按下刪除用戶按鈕時(shí),調(diào)用UserDaoImpl的dele
69、teUser(String id)方法,刪除用戶數(shù)據(jù)文件中的對(duì)應(yīng)的用戶信息。</p><p> 當(dāng)按下重置所有用戶密碼時(shí),調(diào)用UserDaoImpl的resetAllPWD()方法,這個(gè)方法會(huì)讀取用戶數(shù)據(jù)文件,選出所有用戶的密碼,并設(shè)置成123456。</p><p> 當(dāng)按下重置所選用戶密碼時(shí),調(diào)用UserDaoImpl的resetPWD(String id),在這個(gè)方法中會(huì)調(diào)用re
70、setPWD(String id,String newPWD)方法,將所選用戶的密碼重置為123456。在日志管理面板中生成一個(gè)日期選擇面板、一個(gè)顯示歷史記錄的面板、一個(gè)JComboBox選擇事件的監(jiān)聽器combobox_listener和一個(gè)日志面板的按鈕監(jiān)聽器button_listener,在combobox中定義了一些JComboBox的選項(xiàng)被選擇時(shí)所做出的響應(yīng)。如獲得月的下拉框要判斷是大月(31天)還是小月(30天),是否是閏年
71、,獲得年的下拉框根據(jù)月份(是否為2月,若是2月,若是閏年則為29天,否則28天)作出處理。在button_listener中寫義了一些按鈕按下時(shí)做出的響應(yīng),主要是查詢?nèi)罩疚募?,判斷是否有該天的日志,若有是否有需要的關(guān)鍵字,若有返回讀取到的信息。若沒有返回對(duì)應(yīng)的提示信息。</p><p> 4.3編寫客戶端程序</p><p> 4.3.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)</
72、p><p> 與服務(wù)器端相同,此處省略</p><p> 4.3.2 問題陳述</p><p> 1. 配置端口,ip。</p><p><b> 2. 修改密碼。</b></p><p> 3. 發(fā)送即時(shí)消息。</p><p><b> 4. 聊天記錄&
73、lt;/b></p><p> 5. 獲取公告,用戶在線列表。</p><p><b> 6. 退出。</b></p><p><b> 4.3.3解決方案</b></p><p> 首先構(gòu)造一個(gè)登錄窗體QQ_Login_JFrame,在這個(gè)類中生成一個(gè)顯示在登錄窗體上的有圖片的JLa
74、ble、一個(gè)登錄區(qū)域的JPanel(輸入用戶編號(hào)和密碼)和一個(gè)按鈕區(qū)域的JPanel(設(shè)置、登錄、取消按鈕)以及一個(gè)按鈕事件的監(jiān)聽器QQ_Login_Button_Listener,在這個(gè)監(jiān)聽器中定義了各個(gè)按鈕按下時(shí)做出的響應(yīng),</p><p> 當(dāng)按下取消按鈕時(shí),退出系統(tǒng),system.exit(0);</p><p> 當(dāng)按下設(shè)置按鈕時(shí),通過調(diào)用.QQ_Login_JFrame.g
75、etButton_NetOption()獲得網(wǎng)絡(luò)設(shè)置面板,如果這個(gè)面板是顯示狀態(tài)就設(shè)置它為不可顯示,如果這個(gè)面板是不顯示狀態(tài)就設(shè)置它為顯示。</p><p> 當(dāng)按下登錄按鈕時(shí),首先獲取ip、斷后號(hào)port,并判斷是否為空,是否合法(代碼如下</p><p> if(!IP.matches("^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-
76、9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$&qu
77、ot;)) {qq_Login_JFrame.getLabel_NetOption().setText("IP不合法,請(qǐng)重新輸入");</p><p><b> return;})</b></p><p> if(!port.matches("\\d{4,5}")){qq_Login_JFrame.getLabel_NetO
78、ption().setText("端口號(hào)應(yīng)為1024~65535之間的整數(shù)");return;}</p><p> int p = Integer.parseInt(port);</p><p> if(p<1024 && p>65535){qq_Login_JFrame.getLabel_NetOption().setText(&quo
79、t;端口號(hào)應(yīng)為1024~65535之間的整數(shù)");return;}),然后判斷用戶名和密碼是否為空。若四項(xiàng)都合法,實(shí)例化一個(gè)socket=new socket(ip,port);然后獲取數(shù)據(jù)流(objectOutputStream),封裝登錄請(qǐng)求包(</p><p> Vector<String>IDAndPsw = new Vector<String>();</p>
80、;<p> IDAndPsw.add(ID);</p><p> IDAndPsw.add(psw);</p><p> QQPackageqqPackageCheck = new QQPackage();</p><p> qqPackageCheck.setPackType(PackType.loginApply);</p>
81、<p> qqPackageCheck.setData(IDAndPsw);</p><p> objectOutputStream.writeObject(qqPackageCheck);</p><p> objectOutputStream.flush();)</p><p> //收取服務(wù)器返的信息</p><p>
82、 QQPackageqqPackageReturn = null;</p><p> qqPackageReturn = (QQPackage)objectInputStream.readObject();</p><p> PackTypepackType = qqPackageReturn.getPackType();</p><p> String r
83、eturnInfo = qqPackageReturn.getData().toString();</p><p><b> //登錄失敗</b></p><p> if(packType == PackType.loginFail){</p><p> JOptionPane.showMessageDialog(qq_Login_JFr
84、ame, returnInfo + "累計(jì)三次登錄失敗后,程序?qū)⑼顺觯€可以操作:" + (3-wrongCount) + "次");</p><p><b> //登錄成功</b></p><p> }else if(packType == PackType.loginSuccess){</p><p
85、> // 把當(dāng)次輸入的號(hào)碼增加到文件,實(shí)現(xiàn)記錄輸入號(hào)碼的功能</p><p> qq_Login_JFrame.autoAppendID();</p><p> qq_Login_JFrame.dispose();</p><p> newQQ_Chat_JFrame(socket,qqPackageReturn,objectOutputStream,
86、objectInputStream);</p><p> 這樣經(jīng)進(jìn)入了聊天主窗口(QQ_Chat_JFrame)。</p><p> 在QQ_Chat_JFrame中生成一個(gè)客戶端讀取線程,在這個(gè)線程中會(huì)根據(jù)獲取的不同包的不同類型做出不同的響應(yīng)。具體代碼如下:</p><p><b> // 聊天包</b></p><
87、p> if (packType == PackType.publicChat) {</p><p> String message = object.toString();</p><p> qq_Chat_JFrame.getTextArea_Dsp().append(message);</p><p> qq_Chat_JFrame.getText
88、Area_ChatLogs().append(message);</p><p> // 在線用戶列表包</p><p> } else if (packType == PackType.onlineuser) {</p><p> DefaultListModeldefaultListModel = (DefaultListModel) qqPackageR
89、ec.getData();</p><p> qq_Chat_JFrame.getList_OnlineUsers().setModel(defaultListModel);</p><p> qq_Chat_JFrame.validate();</p><p><b> // 服務(wù)器停止包</b></p><p>
90、; } else if (packType == PackType.stopServer){</p><p> String message = qqPackageRec.getData().toString();</p><p> JOptionPane.showMessageDialog(qq_Chat_JFrame, message);</p><p>
91、 qq_Chat_JFrame.dispose();</p><p> System.exit(0);</p><p><b> // 公告包</b></p><p> } else if (packType == PackType.post){</p><p> String message = qqPack
92、ageRec.getData().toString();</p><p> qq_Chat_JFrame.getTextArea_Notice().setText(message);</p><p><b> // 下線包</b></p><p> } else if (packType == PackType.enforceDown){
93、</p><p> String message = qqPackageRec.getData().toString();</p><p> JOptionPane.showMessageDialog(qq_Chat_JFrame, message);</p><p> System.exit(0);</p><p> // 密碼修改
94、回復(fù)包</p><p> } else if (packType == PackType.resetPassword){</p><p> String message = qqPackageRec.getData().toString();</p><p> if("密碼修改成功!請(qǐng)牢記新密碼!".equals(message)){<
95、;/p><p> qq_Chat_JFrame.getResetPassword_JDialog().getLabel_Message().setText("");</p><p> JOptionPane.showMessageDialog(qq_Chat_JFrame, message);</p><p> qq_Chat_JFrame.g
96、etResetPassword_JDialog().dispose();</p><p><b> }else{</b></p><p> qq_Chat_JFrame.getResetPassword_JDialog().getLabel_Message().setText(message);</p><p><b> }&l
97、t;/b></p><p><b> }</b></p><p> 在QQ_Chat_JFrame中生成一個(gè)具有公告信息和在線用戶列表的JSplitPane(包含一個(gè)Jlist選中事件的監(jiān)聽器類. QQ_Chat_List_Listener),生成一個(gè)聊天為主功能的JPanel(包含一個(gè)按鈕監(jiān)聽類QQ_Chat_Button_Listener),生成一個(gè)聊天
98、記錄面板,它默認(rèn)是不可見的。</p><p> Jlist選中事件的監(jiān)聽器類. QQ_Chat_List_Listener定義了列表選中時(shí)做的響應(yīng),將接收者的標(biāo)簽設(shè)置成列表選中的項(xiàng)。</p><p> 按鈕監(jiān)聽類QQ_Chat_Button_Listener根據(jù)各個(gè)按鈕做出不同的響應(yīng):</p><p> 當(dāng)按下聊天記錄按鈕,如果聊天記錄面板使顯示狀態(tài),設(shè)置為不
99、可顯示狀態(tài),并調(diào)整此面板的大小,如果聊天記錄面板使不顯示狀態(tài),設(shè)置為可顯示狀態(tài),并調(diào)整此面板的大小。</p><p> 當(dāng)按下發(fā)送按鈕 獲取選中的用戶,并判,斷是否為空是否為自己,判斷消息是否為空,是否太長(zhǎng),如果都滿足,則更具是否私聊封裝不同的消息包,然后發(fā)送。</p><p> 當(dāng)按下關(guān)閉按鈕 發(fā)送退出消息包,關(guān)閉系統(tǒng)</p><p> 當(dāng)按下修改密碼按鈕,
100、構(gòu)造一個(gè)具有指定擁有者的修改密碼對(duì)話框,并添加一個(gè)按鈕事件的監(jiān)聽器類,如果點(diǎn)擊確認(rèn)按鈕,就驗(yàn)證兩個(gè)新密碼是否一樣,若一樣就發(fā)送修改密碼包。 </p><p><b> 5 系統(tǒng)實(shí)現(xiàn)</b></p><p><b> 5.1服務(wù)端</b></p><p> 5.1.1服務(wù)器啟動(dòng)配置</p><p&g
101、t; 這個(gè)窗體主要作用是測(cè)試端口是否可用,如果可用則會(huì)把端口號(hào)保存在config.ini文件中。點(diǎn)擊進(jìn)入服務(wù)器按鈕則會(huì)進(jìn)入服務(wù)主窗體。如圖6所示:</p><p><b> 圖5-1服務(wù)器配置</b></p><p> 5.1.2服務(wù)端主窗口</p><p> 這個(gè)窗體是服務(wù)主窗體,在這個(gè)窗體上有三個(gè)面板,分別為服務(wù)器管理、用戶管理。日
102、志管理。</p><p> 服務(wù)器管理面板,這個(gè)面板完成了顯示在線用戶、顯示通訊消息、顯示在線用戶人數(shù)、發(fā)送公告、啟動(dòng)服務(wù)器、關(guān)閉服務(wù)器、強(qiáng)制用戶下線的功能。如圖7所示:</p><p> 圖5-2 服務(wù)器管理</p><p> 服務(wù)器管理面板,這個(gè)面板完成了顯示用戶信息、查詢用戶、添加用戶、刪除用戶、修改資料重置所選密碼、重置所有密碼。如圖8所示:</
103、p><p><b> 圖5-3 用戶管理</b></p><p> 日志查詢面板主要完成了對(duì)日志文件的搜索,可以按照時(shí)間搜索或關(guān)鍵字搜索。如圖9所示:</p><p><b> 圖5-4日志管理</b></p><p><b> 5.2客戶端</b></p>
104、<p> 5.2.1客戶端登陸</p><p> 登陸窗體,通過讀取user.txt文件中的第一行顯示為QQ號(hào)碼,密碼全部默認(rèn)為123456,如果帳號(hào)和密碼都正確,點(diǎn)擊登錄則進(jìn)入聊天窗體。如圖10所示:</p><p><b> 圖5-5 用戶登錄</b></p><p> 5.2.2客戶端配置</p><
105、p> 當(dāng)用戶點(diǎn)擊設(shè)置按鈕時(shí)可以配置服務(wù)器地址和端口號(hào)。如圖11所示:</p><p><b> 圖5-6 用戶配置</b></p><p> 5.2.3客戶端聊天主窗口</p><p> 在這個(gè)窗口中,會(huì)顯示公告信息和在線用戶,若選中的是“所有人”則開始群聊天,若選中的是某個(gè)人則為私聊,不可以和自己聊天。如圖12所示:</p
106、><p> 圖5-7 聊天主窗口</p><p> 當(dāng)點(diǎn)擊聊天記錄時(shí)會(huì)顯示登錄用戶的所有聊天記錄。如圖13所示:</p><p><b> 圖5-8聊天記錄</b></p><p> 5.2.4客戶端修改密碼</p><p> 當(dāng)用戶點(diǎn)擊修改密碼按鈕時(shí),會(huì)彈出修改密碼對(duì)話框。如果原密碼正確且
107、新密碼合法,則會(huì)成功修改密碼。如圖14所示:</p><p><b> 圖5-9 修改密碼</b></p><p><b> 致謝</b></p><p> 在當(dāng)今電腦網(wǎng)絡(luò)密布的世界當(dāng)中,一個(gè)簡(jiǎn)單高效的局域網(wǎng)通信工具是如此的具有實(shí)用性,所以我們應(yīng)當(dāng)重視對(duì)它的相關(guān)研究與開發(fā)。在這次的畢業(yè)設(shè)計(jì)中,我應(yīng)用了JAVA開發(fā)工具
108、在WINDOWS平臺(tái)上開發(fā)了一個(gè)基于WINDOWS平臺(tái)的局域網(wǎng)通信工具,在這一重要的領(lǐng)域進(jìn)行了相關(guān)的實(shí)踐,不管是對(duì)我的研究能力,還是實(shí)際動(dòng)手能力,還是資料查閱能力,都起了相當(dāng)大的益處。所以,我決定認(rèn)真總結(jié)這次畢業(yè)設(shè)計(jì)的經(jīng)驗(yàn),以及學(xué)習(xí)到的知識(shí),來更加的充實(shí)自己的頭腦和完善自己的知識(shí)結(jié)構(gòu)。</p><p> 系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。
109、</p><p> 最后,衷心地感謝院領(lǐng)導(dǎo)為我們提供了優(yōu)越的設(shè)計(jì)環(huán)境,并給予我們的莫大關(guān)心和鼓勵(lì);衷心地感謝老師在百忙中對(duì)我的悉心指導(dǎo),在理論和實(shí)踐上給予我的巨大幫助,使得畢業(yè)設(shè)計(jì)和論文得以順利進(jìn)行并完成;同時(shí)也感謝老師在生活和工作中對(duì)我的指導(dǎo)和關(guān)心;也衷心地感謝同學(xué)們?cè)谖矣龅嚼щy時(shí)對(duì)我的幫助。在此,我謹(jǐn)以最誠(chéng)摯的心情,表達(dá)我衷心的感謝。</p><p><b> 參考文獻(xiàn)&
110、lt;/b></p><p> [1] 劉永華,Java網(wǎng)絡(luò)編程,清華大學(xué)出版社 2008</p><p> [2] 張虹 軟件工程與軟件開發(fā)工具 清華大學(xué)出版社 2009</p><p> [3] Bruce Eckel Thinking in Java 機(jī)械工業(yè)出版社 2009</p><p> [4] 羅軍舟 TCP/IP
111、協(xié)議及網(wǎng)絡(luò)編程技術(shù) 清華大學(xué)出版社 2008</p><p> [5] 孫一林 彭波Java網(wǎng) 程實(shí)例 清華大學(xué)出版社 2003</p><p> [6] 李樹青 Java通用范例開發(fā)金典 電子工業(yè)出版社 2009</p><p> [7] 王鵬 Java Swing 圖形界面開發(fā)與案例詳解 清華大學(xué)出版社 2008</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java局域網(wǎng)聊天軟件
- 軟件工程畢業(yè)論文-局域網(wǎng)下的java聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- java局域網(wǎng)聊天軟件大學(xué)設(shè)計(jì)好sqlserver
- 基于java的局域網(wǎng)聊天系統(tǒng)
- 局域網(wǎng)畢業(yè)論文---局域網(wǎng)聊天軟件
- 局域網(wǎng)聊天程序java課程設(shè)計(jì)
- 局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件-畢業(yè)論文
- 軟件課程設(shè)計(jì)---局域網(wǎng)聊天程序
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計(jì)報(bào)告
- java局域網(wǎng)聊天室系統(tǒng)畢業(yè)論文
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計(jì)報(bào)告
- 基于java局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)
- 基于java局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)
- 軟件課程設(shè)計(jì)報(bào)告--局域網(wǎng)聊天程序
- java課程設(shè)計(jì)--局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論