2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  局域網(wǎng)下的java聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  摘要</b></p><p>  隨著互聯(lián)網(wǎng)的迅猛的發(fā)展,網(wǎng)絡(luò)逐漸成了人們獲取信息的主

2、要途徑。做為傳統(tǒng)的信息交流工具e-mail,因?yàn)槠浒l(fā)送和接受消息時間相對滯后的緣故,不能滿足人們迅速獲取信息的要求。即時通訊應(yīng)運(yùn)而生,為大眾提供了一種嶄新的綜合的信息交流平臺。即時通訊不同于傳統(tǒng)的通訊工具e-mail,在于它的交流是實(shí)時的,使得人們交流更加便捷和快速,滿足了人們迅速獲取信息的需求,以深受大眾的喜愛,有著很好的發(fā)展前景。其中聊天軟件就是即時通訊的具體實(shí)現(xiàn)。</p><p>  本系統(tǒng)建立在JAVA平

3、臺上,系統(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)過程中,采用了多線程技術(shù),可以在單個程序當(dāng)中同時運(yùn)行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。</p><p>  關(guān)鍵字:多線程;客戶機(jī)/服務(wù)器;java;socket;eclips

4、e</p><p><b>  Abstract</b></p><p>  With the rapid development of Internet, the network gradually becomes the main way for people to obtain information. As the traditional informatio

5、n communication tool e-mail, because of the relative lag of the sending and receiving messages of time reasons, cannot satisfy people quick access to information requirements. Im emerge as the times require, provides a n

6、ew integrated information exchange platform for the public. Unlike traditional instant messaging communication tool e-mail, the exchan</p><p>  The system built on the JAVA platform, the system design using

7、object-oriented technology and object-oriented design principles. System uses the C / S structure, client and client-side and server-side client and send messages through Socket. The use of JAVA language, development too

8、ls using Eclipse. Design and Implementation of server-side process, the use of multi-threading technology, which can process in a single run at the same time a number of different threads, the implementation of differ<

9、;/p><p>  Keywords: multiple threads ; client/server ; Java ; socket ; Eclipse.</p><p><b>  目 錄</b></p><p><b>  1 緒論3</b></p><p>  1.1聊天軟件開發(fā)背景3

10、</p><p>  1.2 Java語言3</p><p>  1.2.1 Java的發(fā)展歷史3</p><p>  1.2.2 Java的特點(diǎn)4</p><p>  1.2.3 Java與Internet5</p><p>  1.3 Socket編程6</p><p>  1.3

11、.1 關(guān)于TCP/IP協(xié)議6</p><p>  1.3.2 服務(wù)器和客戶機(jī)6</p><p><b>  2 需求分析7</b></p><p>  2.1可行性分析7</p><p>  2.2系統(tǒng)功能需求7</p><p>  2.3 系統(tǒng)性能需求7</p><

12、;p><b>  3 概要設(shè)計(jì)8</b></p><p><b>  3.1運(yùn)行環(huán)境8</b></p><p>  3.2軟件功能框架圖8</p><p>  3.2.1服務(wù)端功能框架圖8</p><p>  3.2.2客戶端功能框架圖8</p><p>&l

13、t;b>  4 詳細(xì)設(shè)計(jì)9</b></p><p><b>  4.1流程圖9</b></p><p>  4.1.1服務(wù)端9</p><p>  4.1.2客戶端10</p><p>  4.2編寫服務(wù)器端程序10</p><p>  4.2.1通訊數(shù)據(jù)包說明(格式說

14、明,包類型說明)10</p><p>  4.2.2 問題陳述11</p><p>  4.2.3 解決方案11</p><p>  4.3編寫客戶端程序13</p><p>  4.3.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)13</p><p>  4.3.2 問題陳述13</p>&l

15、t;p>  4.3.3解決方案13</p><p><b>  5系統(tǒng)實(shí)現(xiàn)17</b></p><p><b>  5.1服務(wù)端17</b></p><p>  5.1.1服務(wù)器啟動配置17</p><p>  5.1.2服務(wù)端主窗口17</p><p>&l

16、t;b>  5.2客戶端18</b></p><p>  5.2.1客戶端登陸18</p><p>  5.2.2客戶端配置19</p><p>  5.2.3客戶端聊天主窗口19</p><p><b>  致謝21</b></p><p><b>  參考

17、文獻(xiàn)22</b></p><p><b>  1 緒論</b></p><p>  1.1聊天軟件開發(fā)背景</p><p>  Internet是目前世界上最大的計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò),它遍布全球,將世界各地各種規(guī)模的網(wǎng)絡(luò)連接成一個整體。作為Internet上一種先進(jìn)的,易于被人們所接受的信息檢索手段,World Wide Web(簡稱W

18、WW)發(fā)展十分迅速,成為目前世界上最大的信息資源寶庫。據(jù)估計(jì),目前Internet上已有上百萬個Web站點(diǎn),其內(nèi)容范圍跨越了教育科研、文化事業(yè)、金融、商業(yè)、新聞出版、娛樂、體育等各個領(lǐng)域,其用戶群十分龐大,因此,建設(shè)一個好的Web站點(diǎn)對于一個機(jī)構(gòu)的發(fā)展十分重要。近年來計(jì)算機(jī)技術(shù)的快速發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價格,開發(fā)出更方便、更實(shí)用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影

19、響了人們的聯(lián)系和交流方式,使得人們可以在遠(yuǎn)隔千里之遙隨時通訊。過去的種種陳舊的聯(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)行交流和聯(lián)系提供的一個平臺。通過提供完善的網(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ù)

20、,使用者可以通過安裝了即時通信的終端機(jī)進(jìn)行兩人或多人之間的實(shí)時溝通。</p><p>  目前,中國市場上的企業(yè)級即時通信工具主要包括:通軟聯(lián)合的GoCom、騰訊公司的RTX、IBM的Lotus Sametime等,免費(fèi)版的有網(wǎng)絡(luò)信使,傳我,匯海集團(tuán)的匯訊WiseUC等。局域網(wǎng)聊天軟件不再是一個單純的聊天工具,它已經(jīng)發(fā)展成集交流、資訊、娛樂、搜索、電子商務(wù)、辦公協(xié)作和企業(yè)客戶服務(wù)等為一體的綜合化信息平臺。是一種終

21、端連往即時通訊網(wǎng)絡(luò)的服務(wù)。局域網(wǎng)通訊不同于e-mail在于它的交談是即時的。大部分的即時通訊服務(wù)提供了狀態(tài)信息的特性──顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在在線與能否與聯(lián)絡(luò)人交談。</p><p>  局域網(wǎng)聊天工具,是以企業(yè)內(nèi)部辦公,建立員工交流平臺為基礎(chǔ),通過系統(tǒng)整合、邊緣功能,為企業(yè)提供一整套的即時溝通和實(shí)時協(xié)作的解決方案。由于企業(yè)對信息類軟件的需求還在“探索”與“嘗試”階段,所以會導(dǎo)致很多系統(tǒng)不能“互通”,這也成

22、了局域網(wǎng)聊天軟件的一個使命。當(dāng)信息軟件被廣泛使用之后,“互通”接口具備否,將被作為軟件被選用的重要條件。</p><p>  1.2 Java語言</p><p>  1.2.1 Java的發(fā)展歷史</p><p>  在這個世界上,熟悉Java歷史的人非常多,如果要問一個人Java是從哪年誕生的,也許大多數(shù)人都會回答是1995年(這個非常好記,因?yàn)槲④浀腤indo

23、ws95也是在這一年發(fā)布的)。但事實(shí)上Java早在上個世紀(jì)90年代初就開始醞釀了。</p><p>  自1995年到1998年是Java的幼年時期,Sun在Green項(xiàng)目經(jīng)過了幾年的研究,終于在1995年5月23日在SunWorld'95上正式發(fā)布Java和Hot Java瀏覽器但這只是一種語言,而要想開發(fā)復(fù)雜的應(yīng)用程序,必須要有一個的強(qiáng)大的開發(fā)庫支持還行。因此,sun在之后的幾年中推出了推出JDK多個

24、版本。雖然在1998年之前,Java被眾多的軟件企業(yè)所采用,但由于當(dāng)時硬件環(huán)境和JVM的技術(shù)原因,它的應(yīng)用卻很有限。當(dāng)時Java主要只使用在前端的Applet以及一些移動設(shè)備中。然而這并不等于Java的應(yīng)用只限于這些領(lǐng)域。在1998年是Java開始迅猛發(fā)展的一年。在這一年中Sun發(fā)布了JSP/Servlet、EJB規(guī)范以及將Java分成了J2EE、J2SE和J2ME。標(biāo)志著Java已經(jīng)吹響了向企業(yè)、桌面和移動3個領(lǐng)域進(jìn)軍的號角。<

25、/p><p>  自1998年到2004年是Java的青少年時期,在1998年12月4日。Sun發(fā)布了Java的歷史上最重要的一個JDK版本:JDK1.2。這個版本標(biāo)志著Java已經(jīng)進(jìn)入Java2時代。這個時期也是Java飛速發(fā)展的時期。在Java2時代Sun對Java進(jìn)行了很多革命性的變化,而這些革命性的變化一直沿用到現(xiàn)在,對Java的發(fā)展形成了深遠(yuǎn)的影響。</p><p>  2004年至

26、今是Java的壯年時期。在2004年10月,Sun發(fā)布了我們期待已久的版本:JDK1.5,同時,Sun將JDK1.5改名為J2SE5.0。和JDK1.4不同,JDK1.4的主題是性能,而J2SE5.0的主題是易用。Sun不僅為J2SE5.0增加了諸如泛型、增強(qiáng)的for語句、可變數(shù)目參數(shù)、注釋(Annotations)、自動拆箱(unboxing)和裝箱等功能,同時,也更新的企業(yè)級規(guī)范,如通過注釋等新特性改善了EJB的復(fù)雜性,并推出了EJ

27、B3.0規(guī)范。</p><p>  在Java發(fā)展的十幾年的時間里,經(jīng)歷了無數(shù)的風(fēng)風(fēng)雨雨?,F(xiàn)在Java已經(jīng)成為一種相當(dāng)成熟的語言了。在這10年的發(fā)展中,Java平臺吸引了數(shù)百萬的開發(fā)者,在網(wǎng)絡(luò)計(jì)算遍及全球的今天,更是有20億臺設(shè)備使用了Java技術(shù)。</p><p>  1.2.2 Java的特點(diǎn)</p><p>  Java語言有下面一些特點(diǎn) :簡單、面向?qū)ο?、?/p>

28、布式、解釋執(zhí)行、魯棒、安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動態(tài)性。  1.簡單性  Java語言是一種面向?qū)ο蟮恼Z言 ,它通過提供最基本的方法來完成指定的任務(wù) ,只需理解一些基本的概念 ,就可以用它編寫出適合于各種情況的應(yīng)用程序。 Java略去了運(yùn)算符重載、多重繼承等模糊的概念 ,并且通過實(shí)現(xiàn)自動垃圾收集大大簡化了程序設(shè)計(jì)者的內(nèi)存管理工作。</p><p><b>  2.面向?qū)ο?lt;

29、/b></p><p>  Java語言的設(shè)計(jì)集中于對象及其接口 ,它提供了簡單的類機(jī)制以及動態(tài)的接口模型。對象中封裝了它的狀態(tài)變量以及相應(yīng)的方法 ,實(shí)現(xiàn)了模塊化和信息隱藏 ;而類則提供了一類對象的原型 ,并且通過繼承機(jī)制 ,子類可以使用父類所提供的方法 ,實(shí)現(xiàn)了代碼的復(fù)用。</p><p><b>  3.分布性</b></p><p>

30、;  Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理 TCP/IP協(xié)議 ,用戶可以通過 URL地址在網(wǎng)絡(luò)上很方便地訪問其它對象?!?.魯棒性</p><p>  Java在編譯和運(yùn)行程序時 ,都要對可能出現(xiàn)的問題進(jìn)行檢查 ,以消除錯誤的產(chǎn)生。它提供自動垃圾收集來進(jìn)行內(nèi)存管理 ,防止程序員在管理內(nèi)存時容易產(chǎn)生的錯誤。通過集成的面向?qū)ο蟮睦馓幚頇C(jī)制 ,在編譯時,Java提示出可能出現(xiàn)但未被處理的例外 ,幫助程

31、序員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外,Java在編譯時還可捕獲類型聲明中的許多常見錯誤 ,防止動態(tài)運(yùn)行時不匹配問題的出現(xiàn)。</p><p><b>  5.安全性</b></p><p>  用于網(wǎng)絡(luò)、分布環(huán)境下的 Java必須要防止病毒的入侵。 Java不支持指針,一切對內(nèi)存的訪問都必須通過對象的實(shí)例變量來實(shí)現(xiàn) ,這樣就防止程序員使用"特洛伊 &quo

32、t;木馬等欺騙手段訪問對象的私有成員 ,同時也避免了指針操作中容易產(chǎn)生的錯誤。</p><p>  6.體系結(jié)構(gòu)中立  Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令 ,只要安裝了 Java運(yùn)行時系統(tǒng) ,Java程序就可在任意的處理器上運(yùn)行。這些字節(jié)碼指令對應(yīng)于 Java虛擬機(jī)中的表示 ,Java解釋器得到字節(jié)碼后 ,對它進(jìn)行轉(zhuǎn)換 ,使之能夠在不同的平臺運(yùn)行。</p><p><b&

33、gt;  7.可移植性</b></p><p>  與平臺無關(guān)的特性使 Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。同時 ,Java的類庫中也實(shí)現(xiàn)了與不同平臺的接口 ,使這些類庫可以移植。另外,Java編譯器是由 Java語言實(shí)現(xiàn)的 ,Java運(yùn)行時系統(tǒng)由標(biāo)準(zhǔn) C實(shí)現(xiàn) ,這使得Java系統(tǒng)本身也具有可移植性。</p><p><b>  8.解釋執(zhí)行</b&

34、gt;</p><p>  Java解釋器直接對 Java字節(jié)碼進(jìn)行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時信息 ,使得連接過程更加簡單。</p><p><b>  9.高性能</b></p><p>  和其它解釋執(zhí)行的語言如 BASIC、 TCL不同 ,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對應(yīng)于特定CPU的機(jī)器碼 ,從而得到較高的性能

35、。</p><p><b>  10.多線程</b></p><p>  多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行 ,而且同步機(jī)制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程 ,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為 ,而不需要采用全局的事件循環(huán)機(jī)制 ,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時交互行為。</p><p>  1.2.3 Java與Intern

36、et</p><p>  Java語言取得成功的領(lǐng)域之一就是網(wǎng)絡(luò)(其他語言)數(shù)頁代碼---->(Java)一條語句。TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議,定義了計(jì)算機(jī)和外設(shè)進(jìn)行通信所使用的規(guī)則(應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層).大多數(shù)基于internet的應(yīng)用程序被看作TCP/IP協(xié)議的上一層. 如 : ftp, http, smtp, pop3, telnet, nntp等。

37、</p><p>  IP地址:TCP/IP網(wǎng)絡(luò)中的每臺計(jì)算機(jī)都有唯一的地址--IP地址.</p><p>  在Java中,有一個用來存儲internet地址的類叫InterAddress.</p><p>  Java提供的網(wǎng)絡(luò)功能有三大類: URL, Socket, Datagram.</p><p>  1、URL是三大功能中最高級的

38、一種,通過URL Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).</p><p>  2、Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道.</p><p>  3、Datagram是更低級的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上</p><p>  1.3 Socket編程</p><p&

39、gt;  1.3.1 關(guān)于TCP/IP協(xié)議</p><p>  Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國際互聯(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é)議

40、采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺電腦規(guī)定一個地址。TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對此,Java專門提供了Socket的類庫,在其中抽象出TCP協(xié)議通信的常用方法。</p><p>  1.3.2 服務(wù)器和客戶機(jī)</p><p&

41、gt;  客戶機(jī)又稱為用戶工作站,是用戶與網(wǎng)絡(luò)打交道的設(shè)備,一般由微機(jī)擔(dān)任,每一個客戶機(jī)都運(yùn)行在它自己的、并為服務(wù)器所認(rèn)可的操作系統(tǒng)環(huán)境中。服務(wù)器指一個管理資源并為用戶提供服務(wù)的計(jì)算機(jī)軟件,通常分為文件服務(wù)器、數(shù)據(jù)庫服務(wù)器和應(yīng)用程序服務(wù)器。運(yùn)行以上軟件的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)也被稱為服務(wù)器。服務(wù)器的主要任務(wù)是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務(wù)器對象完成的。而客戶機(jī)的任務(wù)是試著與一臺服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶機(jī)對象完成

42、的。一旦連接建好,那么無論在服務(wù)器端還是客戶機(jī)端,連接只是魔術(shù)般地變成了一個IO數(shù)據(jù)流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Java聯(lián)網(wǎng)最方便的一個地方。</p><p><b>  2 需求分析</b></p><p><b>  2.1可行性分析</b><

43、/p><p>  (1)經(jīng)濟(jì)可行性:本系統(tǒng)無需數(shù)據(jù)庫服務(wù),由于聊天室使用人數(shù)有限,無數(shù)據(jù)庫完全可以應(yīng)付,所以成本就無需考慮了。</p><p> ?。?)操作可行性:只要一臺以上的計(jì)算機(jī)連在同一個局域網(wǎng)上,本系統(tǒng)就可以使用了,所以操作簡單,不存在問題。</p><p> ?。?)技術(shù)可行性:本系統(tǒng)采用java語言,是基于CS架構(gòu)的。開發(fā)這個軟件需要開發(fā)者對socket編

44、程和java Swing 及多線程技術(shù)比較熟悉。由于本人對java應(yīng)用水平有限,希望不足之處可以得到諒解。</p><p>  綜上所述,本系統(tǒng)的設(shè)計(jì)與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。</p><p><b>  2.2系統(tǒng)功能需求</b></p><p>  本系統(tǒng)主要通過客戶端、服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基

45、本功能。</p><p><b> ?。?)服務(wù)器端</b></p><p><b>  1.處理用戶注冊</b></p><p><b>  2.處理用戶登錄</b></p><p>  3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容</p><p>  4

46、.處理用戶得到信息</p><p><b>  5.處理用戶退出</b></p><p><b>  8. 服務(wù)器踢人。</b></p><p>  9. 保存服務(wù)器日志。</p><p><b> ?。?)客戶端</b></p><p>  1.用戶登

47、錄界面及結(jié)果</p><p>  2.用戶發(fā)送信息界面及結(jié)果</p><p>  3.用戶得到信息界面及結(jié)果</p><p>  4.用戶退出界面及結(jié)果</p><p>  2.3 系統(tǒng)性能需求</p><p>  實(shí)用性:為局域網(wǎng)聊天提供方便,有效進(jìn)行作業(yè)管理。</p><p>  操作簡單:

48、本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡單易行。</p><p>  安裝使用簡便:服務(wù)器端的安裝簡潔明了,客戶機(jī)無需再裝任何軟件就可以直接注冊登陸聊天。</p><p>  適應(yīng)性:應(yīng)該能廣泛應(yīng)用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設(shè)計(jì),用戶可以根據(jù)自己的實(shí)際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應(yīng)用。<

49、;/p><p><b>  3 概要設(shè)計(jì)</b></p><p><b>  3.1運(yùn)行環(huán)境</b></p><p>  安裝有JRE1.5以上的windows系統(tǒng)(推薦winXP,winVista或win7)</p><p>  3.2軟件功能框架圖</p><p>  3.2

50、.1服務(wù)端功能框架圖</p><p>  這個圖主要介紹服務(wù)端的功能,主要包括測試端口、保存配置、服務(wù)器管理、用戶管理、日志管理。如圖1所示。</p><p>  圖3-1服務(wù)端功能框架圖</p><p>  3.2.2客戶端功能框架圖</p><p>  這個圖主要介紹了客戶端的功能,主要包括設(shè)置IP、設(shè)置端口、修改密碼、發(fā)送私聊信息、發(fā)送

51、公聊信息、顯示公告、顯示在線用戶。如圖2所示。</p><p>  圖3-2客戶端功能框架圖</p><p><b>  4 詳細(xì)設(shè)計(jì)</b></p><p><b>  4.1流程圖</b></p><p><b>  4.1.1服務(wù)端</b></p><

52、p>  4.1.1.1服務(wù)器登錄流程圖</p><p>  當(dāng)打開服務(wù)器登錄主窗體時,需要測試端口是否可用,如可用則保存配置文件,若保存成功則進(jìn)入服務(wù)器界面。如圖3所示。</p><p>  圖4-1服務(wù)端登錄流程圖</p><p>  4.1.1.2服務(wù)器管理流程圖</p><p>  當(dāng)進(jìn)入服務(wù)器界面時,使用者可以開啟服務(wù)器,監(jiān)聽連

53、接請求,處理用戶發(fā)送過來的消息,當(dāng)點(diǎn)擊右上角的推出按鈕時退出并關(guān)閉所有連接。如圖4所示。</p><p>  圖4-2 服務(wù)器管理流程圖</p><p><b>  4.1.2客戶端</b></p><p>  在客戶端,用戶首先進(jìn)入登錄窗體,如果IP、端口號、用戶名、密碼都正確,則進(jìn)入聊天窗口,否則給出相應(yīng)的提示信息。進(jìn)入聊天窗口后可以修改密

54、碼、發(fā)送聊天信息、顯示公告和在線用戶列表。如圖5所示。</p><p>  圖4-3 客戶端流程圖</p><p>  4.2編寫服務(wù)器端程序</p><p>  4.2.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)</p><p><b>  格式說明</b></p><p>  package p

55、ub;</p><p>  importjava.io.Serializable;</p><p>  // 封裝數(shù)據(jù)的包,它現(xiàn)了java.io.Serializable接口</p><p>  public class QQPackage implements Serializable{</p><p>  private String f

56、rom;// 消息發(fā)送者</p><p>  private String to;// 消息接收者</p><p>  privatePackTypepackType; //包類型</p><p>  private Object data;// 數(shù)據(jù)包</p><p><b>  }</b></p>&l

57、t;p><b>  包類型說明</b></p><p>  package pub;</p><p><b>  //包類型 </b></p><p>  publicenumPackType {</p><p>  loginApply,// 登陸申請</p><p>

58、;  loginSuccess,// 登陸成功</p><p>  loginFail,// 登陸失敗</p><p>  privateChat, 私聊</p><p>  publicChat,// 群聊</p><p>  post,// 公告</p><p>  onlineuser,// 在線用戶列表<

59、/p><p>  enforceDown,// 強(qiáng)制下線</p><p>  stopServer,// 停止服務(wù)</p><p>  userOffline,// 用戶下線</p><p>  resetPassword,// 修改密碼</p><p><b>  }</b></p>

60、<p>  4.2.2 問題陳述</p><p><b>  1. 用戶注冊。</b></p><p>  2. 能夠允許注冊過的用戶登錄聊天界面并可以聊天。</p><p>  3. 能夠接受私聊信息并發(fā)送給特定的用戶。</p><p>  4. 服務(wù)器運(yùn)行在自定義的端口上6000.</p>&

61、lt;p>  5. 服務(wù)器監(jiān)控用戶列表和用戶聊天信息。</p><p>  6. 服務(wù)器踢人,發(fā)送通知。</p><p>  7. 服務(wù)器保存日志。</p><p>  4.2.3 解決方案</p><p>  4.2.3.1服務(wù)器登錄配置</p><p>  Login_JFram這個類是一個服務(wù)端登錄窗體,

62、在其中要讀取config.ini中的配置信息,測試端口是否可用,若可用則創(chuàng)建一個serversocket,并用login_button_listener這個類去監(jiān)聽按鈕并作出響應(yīng)。</p><p>  4.2.3.2服務(wù)端設(shè)計(jì)</p><p>  QQ_Server_JFrame是服務(wù)器主窗體,其中有三個成員變量分別是Sermanager_JPanel(服務(wù)器管理面板)、UserManag

63、er_JPanel(用戶管理面板)、LogsManager_Panel(日志管理面板)。</p><p>  在服務(wù)器管理面板中,有一個ServerManager_Button_Listener負(fù)責(zé)監(jiān)聽按鈕。</p><p>  當(dāng)按下啟動服務(wù)器按鈕時,更改圖片,寫啟動服務(wù)日志,并創(chuàng)建一個服務(wù)端監(jiān)聽客戶連接的線程(Accept_Thread),并啟動。在此線程中會根據(jù)用戶的狀態(tài)創(chuàng)建一個用于

64、讀取的線程(Server_Read_Thread),它會根據(jù)包類型做出不同的操作。</p><p>  當(dāng)按下停止服務(wù)按鈕時,停止服務(wù),更改圖片,寫停止服務(wù)日志,修改用戶狀態(tài),刷新用戶列表,通知用戶下線,發(fā)stopServer包</p><p>  當(dāng)按下強(qiáng)制用戶下線按鈕時,要判斷用戶ID,封裝強(qiáng)制下線包,關(guān)閉強(qiáng)制下線用戶的線程、流。</p><p>  在用戶管理

65、面板中,用一個用戶管理面板按鈕的監(jiān)聽器(UserManager_Button_Listener)完成查詢用戶,顯示在線用戶列表的顯示,添加新用戶,刪除用戶,修改資料,重設(shè)所有密碼,重設(shè)所選密碼的功能。</p><p>  當(dāng)按下用戶添加按鈕和修改資料按鈕時創(chuàng)建一個用戶信息的對話框,調(diào)用UserInfo_JDialog(UsersManager_JPanelusersManager_JPanel, QQ_Serve

66、r_JFrameqq_Server_JFrame, int kind)方法。這個方法會判斷操作類型,生成一個存放對話框內(nèi)容的JPanel,初始化編號、密碼、注冊時間,實(shí)例化UserInfo_Button_Listener(添加用戶和修改用戶對話框的監(jiān)聽器),</p><p>  當(dāng)按下查詢按鈕時,獲取用戶id和姓名,調(diào)用UserDaoImpl(訪問數(shù)據(jù)的方法類)的selectList(Stringsid, Str

67、ingsname, int state)方法,這個方法通過判斷state將移除密碼后的Vector返回顯示。</p><p>  當(dāng)按下刪除用戶按鈕時,調(diào)用UserDaoImpl的deleteUser(String id)方法,刪除用戶數(shù)據(jù)文件中的對應(yīng)的用戶信息。</p><p>  當(dāng)按下重置所有用戶密碼時,調(diào)用UserDaoImpl的resetAllPWD()方法,這個方法會讀取用戶數(shù)

68、據(jù)文件,選出所有用戶的密碼,并設(shè)置成123456。</p><p>  當(dāng)按下重置所選用戶密碼時,調(diào)用UserDaoImpl的resetPWD(String id),在這個方法中會調(diào)用resetPWD(String id,String newPWD)方法,將所選用戶的密碼重置為123456。在日志管理面板中生成一個日期選擇面板、一個顯示歷史記錄的面板、一個JComboBox選擇事件的監(jiān)聽器combobox_lis

69、tener和一個日志面板的按鈕監(jiān)聽器button_listener,在combobox中定義了一些JComboBox的選項(xiàng)被選擇時所做出的響應(yīng)。如獲得月的下拉框要判斷是大月(31天)還是小月(30天),是否是閏年,獲得年的下拉框根據(jù)月份(是否為2月,若是2月,若是閏年則為29天,否則28天)作出處理。在button_listener中寫義了一些按鈕按下時做出的響應(yīng),主要是查詢?nèi)罩疚募?,判斷是否有該天的日志,若有是否有需要的關(guān)鍵字,若有返

70、回讀取到的信息。若沒有返回對應(yīng)的提示信息。</p><p>  4.3編寫客戶端程序</p><p>  4.3.1通訊數(shù)據(jù)包說明(格式說明,包類型說明)</p><p>  與服務(wù)器端相同,此處省略</p><p>  4.3.2 問題陳述</p><p>  1. 配置端口,ip。</p><p

71、><b>  2. 修改密碼。</b></p><p>  3. 發(fā)送即時消息。</p><p><b>  4. 聊天記錄</b></p><p>  5. 獲取公告,用戶在線列表。</p><p><b>  6. 退出。</b></p><p&g

72、t;<b>  4.3.3解決方案</b></p><p>  首先構(gòu)造一個登錄窗體QQ_Login_JFrame,在這個類中生成一個顯示在登錄窗體上的有圖片的JLable、一個登錄區(qū)域的JPanel(輸入用戶編號和密碼)和一個按鈕區(qū)域的JPanel(設(shè)置、登錄、取消按鈕)以及一個按鈕事件的監(jiān)聽器QQ_Login_Button_Listener,在這個監(jiān)聽器中定義了各個按鈕按下時做出的響應(yīng),

73、</p><p>  當(dāng)按下取消按鈕時,退出系統(tǒng),system.exit(0);</p><p>  當(dāng)按下設(shè)置按鈕時,通過調(diào)用.QQ_Login_JFrame.getButton_NetOption()獲得網(wǎng)絡(luò)設(shè)置面板,如果這個面板是顯示狀態(tài)就設(shè)置它為不可顯示,如果這個面板是不顯示狀態(tài)就設(shè)置它為顯示。</p><p>  當(dāng)按下登錄按鈕時,首先獲取ip、斷后號po

74、rt,并判斷是否為空,是否合法(代碼如下</p><p>  if(!IP.matches("^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-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

75、]{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])$")) {qq_Login_JFrame.getLabel_NetOption().setText("IP不合法,請重新輸入");</p><p><b>  retur

76、n;})</b></p><p>  if(!port.matches("\\d{4,5}")){qq_Login_JFrame.getLabel_NetOption().setText("端口號應(yīng)為1024~65535之間的整數(shù)");return;}</p><p>  int p = Integer.parseInt(port);&l

77、t;/p><p>  if(p<1024 && p>65535){qq_Login_JFrame.getLabel_NetOption().setText("端口號應(yīng)為1024~65535之間的整數(shù)");return;}),然后判斷用戶名和密碼是否為空。若四項(xiàng)都合法,實(shí)例化一個socket=new socket(ip,port);然后獲取數(shù)據(jù)流(objectOutput

78、Stream),封裝登錄請求包(</p><p>  Vector<String>IDAndPsw = new Vector<String>();</p><p>  IDAndPsw.add(ID);</p><p>  IDAndPsw.add(psw);</p><p>  QQPackageqqPackageC

79、heck = new QQPackage();</p><p>  qqPackageCheck.setPackType(PackType.loginApply);</p><p>  qqPackageCheck.setData(IDAndPsw);</p><p>  objectOutputStream.writeObject(qqPackageCheck);

80、</p><p>  objectOutputStream.flush();)</p><p>  //收取服務(wù)器返的信息</p><p>  QQPackageqqPackageReturn = null;</p><p>  qqPackageReturn = (QQPackage)objectInputStream.readObject

81、();</p><p>  PackTypepackType = qqPackageReturn.getPackType();</p><p>  String returnInfo = qqPackageReturn.getData().toString();</p><p><b>  //登錄失敗</b></p><p

82、>  if(packType == PackType.loginFail){</p><p>  JOptionPane.showMessageDialog(qq_Login_JFrame, returnInfo + "累計(jì)三次登錄失敗后,程序?qū)⑼顺?,您還可以操作:" + (3-wrongCount) + "次");</p><p><b

83、>  //登錄成功</b></p><p>  }else if(packType == PackType.loginSuccess){</p><p>  // 把當(dāng)次輸入的號碼增加到文件,實(shí)現(xiàn)記錄輸入號碼的功能</p><p>  qq_Login_JFrame.autoAppendID();</p><p>  qq_

84、Login_JFrame.dispose();</p><p>  newQQ_Chat_JFrame(socket,qqPackageReturn,objectOutputStream,objectInputStream);</p><p>  這樣經(jīng)進(jìn)入了聊天主窗口(QQ_Chat_JFrame)。</p><p>  在QQ_Chat_JFrame中生成一個客

85、戶端讀取線程,在這個線程中會根據(jù)獲取的不同包的不同類型做出不同的響應(yīng)。具體代碼如下:</p><p><b>  // 聊天包</b></p><p>  if (packType == PackType.publicChat) {</p><p>  String message = object.toString();</p>

86、<p>  qq_Chat_JFrame.getTextArea_Dsp().append(message);</p><p>  qq_Chat_JFrame.getTextArea_ChatLogs().append(message);</p><p>  // 在線用戶列表包</p><p>  } else if (packType == Pac

87、kType.onlineuser) {</p><p>  DefaultListModeldefaultListModel = (DefaultListModel) qqPackageRec.getData();</p><p>  qq_Chat_JFrame.getList_OnlineUsers().setModel(defaultListModel);</p>&l

88、t;p>  qq_Chat_JFrame.validate();</p><p><b>  // 服務(wù)器停止包</b></p><p>  } else if (packType == PackType.stopServer){</p><p>  String message = qqPackageRec.getData().toSt

89、ring();</p><p>  JOptionPane.showMessageDialog(qq_Chat_JFrame, message);</p><p>  qq_Chat_JFrame.dispose();</p><p>  System.exit(0);</p><p><b>  // 公告包</b>&

90、lt;/p><p>  } else if (packType == PackType.post){</p><p>  String message = qqPackageRec.getData().toString();</p><p>  qq_Chat_JFrame.getTextArea_Notice().setText(message);</p>

91、<p><b>  // 下線包</b></p><p>  } else if (packType == PackType.enforceDown){</p><p>  String message = qqPackageRec.getData().toString();</p><p>  JOptionPane.showM

92、essageDialog(qq_Chat_JFrame, message);</p><p>  System.exit(0);</p><p>  // 密碼修改回復(fù)包</p><p>  } else if (packType == PackType.resetPassword){</p><p>  String message = q

93、qPackageRec.getData().toString();</p><p>  if("密碼修改成功!請牢記新密碼!".equals(message)){</p><p>  qq_Chat_JFrame.getResetPassword_JDialog().getLabel_Message().setText("");</p>

94、<p>  JOptionPane.showMessageDialog(qq_Chat_JFrame, message);</p><p>  qq_Chat_JFrame.getResetPassword_JDialog().dispose();</p><p><b>  }else{</b></p><p>  qq_Chat

95、_JFrame.getResetPassword_JDialog().getLabel_Message().setText(message);</p><p><b>  }</b></p><p><b>  }</b></p><p>  在QQ_Chat_JFrame中生成一個具有公告信息和在線用戶列表的JSplit

96、Pane(包含一個Jlist選中事件的監(jiān)聽器類. QQ_Chat_List_Listener),生成一個聊天為主功能的JPanel(包含一個按鈕監(jiān)聽類QQ_Chat_Button_Listener),生成一個聊天記錄面板,它默認(rèn)是不可見的。</p><p>  Jlist選中事件的監(jiān)聽器類. QQ_Chat_List_Listener定義了列表選中時做的響應(yīng),將接收者的標(biāo)簽設(shè)置成列表選中的項(xiàng)。</p>

97、<p>  按鈕監(jiān)聽類QQ_Chat_Button_Listener根據(jù)各個按鈕做出不同的響應(yīng):</p><p>  當(dāng)按下聊天記錄按鈕,如果聊天記錄面板使顯示狀態(tài),設(shè)置為不可顯示狀態(tài),并調(diào)整此面板的大小,如果聊天記錄面板使不顯示狀態(tài),設(shè)置為可顯示狀態(tài),并調(diào)整此面板的大小。</p><p>  當(dāng)按下發(fā)送按鈕 獲取選中的用戶,并判,斷是否為空是否為自己,判斷消息是否為空,是否

98、太長,如果都滿足,則更具是否私聊封裝不同的消息包,然后發(fā)送。</p><p>  當(dāng)按下關(guān)閉按鈕 發(fā)送退出消息包,關(guān)閉系統(tǒng)</p><p>  當(dāng)按下修改密碼按鈕,構(gòu)造一個具有指定擁有者的修改密碼對話框,并添加一個按鈕事件的監(jiān)聽器類,如果點(diǎn)擊確認(rèn)按鈕,就驗(yàn)證兩個新密碼是否一樣,若一樣就發(fā)送修改密碼包。 </p><p><b>  5 系統(tǒng)實(shí)現(xiàn)</b

99、></p><p><b>  5.1服務(wù)端</b></p><p>  5.1.1服務(wù)器啟動配置</p><p>  這個窗體主要作用是測試端口是否可用,如果可用則會把端口號保存在config.ini文件中。點(diǎn)擊進(jìn)入服務(wù)器按鈕則會進(jìn)入服務(wù)主窗體。如圖6所示:</p><p><b>  圖5-1服務(wù)器配

100、置</b></p><p>  5.1.2服務(wù)端主窗口</p><p>  這個窗體是服務(wù)主窗體,在這個窗體上有三個面板,分別為服務(wù)器管理、用戶管理。日志管理。</p><p>  服務(wù)器管理面板,這個面板完成了顯示在線用戶、顯示通訊消息、顯示在線用戶人數(shù)、發(fā)送公告、啟動服務(wù)器、關(guān)閉服務(wù)器、強(qiáng)制用戶下線的功能。如圖7所示:</p><

101、p>  圖5-2 服務(wù)器管理</p><p>  服務(wù)器管理面板,這個面板完成了顯示用戶信息、查詢用戶、添加用戶、刪除用戶、修改資料重置所選密碼、重置所有密碼。如圖8所示:</p><p><b>  圖5-3 用戶管理</b></p><p>  日志查詢面板主要完成了對日志文件的搜索,可以按照時間搜索或關(guān)鍵字搜索。如圖9所示:<

102、/p><p><b>  圖5-4日志管理</b></p><p><b>  5.2客戶端</b></p><p>  5.2.1客戶端登陸</p><p>  登陸窗體,通過讀取user.txt文件中的第一行顯示為QQ號碼,密碼全部默認(rèn)為123456,如果帳號和密碼都正確,點(diǎn)擊登錄則進(jìn)入聊天窗體。如

103、圖10所示:</p><p><b>  圖5-5 用戶登錄</b></p><p>  5.2.2客戶端配置</p><p>  當(dāng)用戶點(diǎn)擊設(shè)置按鈕時可以配置服務(wù)器地址和端口號。如圖11所示:</p><p><b>  圖5-6 用戶配置</b></p><p>  5.

104、2.3客戶端聊天主窗口</p><p>  在這個窗口中,會顯示公告信息和在線用戶,若選中的是“所有人”則開始群聊天,若選中的是某個人則為私聊,不可以和自己聊天。如圖12所示:</p><p>  圖5-7 聊天主窗口</p><p>  當(dāng)點(diǎn)擊聊天記錄時會顯示登錄用戶的所有聊天記錄。如圖13所示:</p><p><b>  圖5

105、-8聊天記錄</b></p><p>  5.2.4客戶端修改密碼</p><p>  當(dāng)用戶點(diǎn)擊修改密碼按鈕時,會彈出修改密碼對話框。如果原密碼正確且新密碼合法,則會成功修改密碼。如圖14所示:</p><p><b>  圖5-9 修改密碼</b></p><p><b>  致謝</b&

106、gt;</p><p>  在當(dāng)今電腦網(wǎng)絡(luò)密布的世界當(dāng)中,一個簡單高效的局域網(wǎng)通信工具是如此的具有實(shí)用性,所以我們應(yīng)當(dāng)重視對它的相關(guān)研究與開發(fā)。在這次的畢業(yè)設(shè)計(jì)中,我應(yīng)用了JAVA開發(fā)工具在WINDOWS平臺上開發(fā)了一個基于WINDOWS平臺的局域網(wǎng)通信工具,在這一重要的領(lǐng)域進(jìn)行了相關(guān)的實(shí)踐,不管是對我的研究能力,還是實(shí)際動手能力,還是資料查閱能力,都起了相當(dāng)大的益處。所以,我決定認(rèn)真總結(jié)這次畢業(yè)設(shè)計(jì)的經(jīng)驗(yàn),以及

107、學(xué)習(xí)到的知識,來更加的充實(shí)自己的頭腦和完善自己的知識結(jié)構(gòu)。</p><p>  系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。</p><p>  最后,衷心地感謝院領(lǐng)導(dǎo)為我們提供了優(yōu)越的設(shè)計(jì)環(huán)境,并給予我們的莫大關(guān)心和鼓勵;衷心地感謝老師在百忙中對我的悉心指導(dǎo),在理論和實(shí)踐上給予我的巨大幫助,使得畢業(yè)設(shè)計(jì)和論文得以順利進(jìn)行并完

108、成;同時也感謝老師在生活和工作中對我的指導(dǎo)和關(guān)心;也衷心地感謝同學(xué)們在我遇到困難時對我的幫助。在此,我謹(jǐn)以最誠摯的心情,表達(dá)我衷心的感謝。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 劉永華,Java網(wǎng)絡(luò)編程,清華大學(xué)出版社 2008</p><p>  [2] 張虹 軟件工程與軟件開發(fā)工具 清華大學(xué)出版社 200

109、9</p><p>  [3] Bruce Eckel Thinking in Java 機(jī)械工業(yè)出版社 2009</p><p>  [4] 羅軍舟 TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù) 清華大學(xué)出版社 2008</p><p>  [5] 孫一林 彭波Java網(wǎng) 程實(shí)例 清華大學(xué)出版社 2003</p><p>  [6] 李樹青 Java通用

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論