畢業(yè)論文-基于java的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) (2)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p>  基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  學(xué) 院:機(jī)電工程學(xué)院</p><p>  專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)雙學(xué)位</p><p><b>  學(xué) 號(hào):</b></p><p&

2、gt;<b>  姓 名: </b></p><p><b>  指導(dǎo)教師:</b></p><p><b>  職 稱: </b></p><p>  論文提交日期:二ОО八年四月</p><p><b>  摘 要</b></p

3、><p>  隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開發(fā)主要包括一個(gè)網(wǎng)絡(luò)聊天服務(wù)器程序和一個(gè)網(wǎng)絡(luò)聊天客戶程序兩個(gè)方面。前者通過Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務(wù)器建立連接,來進(jìn)行客

4、戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過直接繼承Thread類來建立多線程。開發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過分析這些情況,該局域網(wǎng)聊天工具采用Eclipse為基本開發(fā)環(huán)境和jav

5、a語言進(jìn)行編寫,首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)</p><p>  關(guān)鍵詞:局域網(wǎng) 聊天 socket java</p><p><b>  Abstract</b></p><p>  Along with the fast development of Internet, the

6、network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example, Netmeeting, QQ, MSN-

7、Messager and so on. This system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat. The former establishes the server through the Socket, th

8、e server ca</p><p>  Key words: LAN Chat Socket Java</p><p><b>  目 錄</b></p><p>  緒論 ………………………………………………………………………………01</p><p>  1.1 JAVA 的網(wǎng)絡(luò)功能與編程 …………………

9、………………………………01</p><p>  1.1.1 JAVA概述…………………………………………………………………02</p><p>  1.1.2 JAVA的特點(diǎn) ……………………………………………………………04</p><p>  1.1.3 JAVA語言在網(wǎng)絡(luò)上的應(yīng)用 ……………………………………………07</p><p&

10、gt;  1.2 JavaBeans技術(shù) ……………………………………………………………08</p><p>  1.3 IP/TCP協(xié)議常識(shí) …………………………………………………………08</p><p>  1.4 Socket的簡介 ……………………………………………………………09</p><p>  規(guī)劃設(shè)計(jì) ……………………………………………………

11、……………………11</p><p>  2.1 課題來源 ……………………………………………………………………11</p><p>  2.2 需求分析 …………………………………………………………………11</p><p>  系統(tǒng)分析與設(shè)計(jì)方案 ……………………………………………………………12</p><p>  3.1 聊天系統(tǒng)

12、的總體設(shè)計(jì)要點(diǎn) ………………………………………………12</p><p>  3.2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分 ……………………………………12</p><p>  3.3 功能模塊結(jié)構(gòu)圖 …………………………………………………………13</p><p>  系統(tǒng)設(shè)計(jì)環(huán)境與測試 …………………………………………………………26</p>

13、<p>  4.1 開發(fā)環(huán)境和工具 …………………………………………………………26</p><p>  4.2 硬件環(huán)境 ……………………………………………………………………26</p><p>  4.3 聊天系統(tǒng)的測試 …………………………………………………………26</p><p>  畢業(yè)設(shè)計(jì)總結(jié) ………………………………………………

14、……………………28</p><p>  5.1 畢業(yè)設(shè)計(jì)總結(jié)和展望 ……………………………………………………28</p><p>  5.2 經(jīng)驗(yàn)和感想 …………………………………………………………………28</p><p>  致 謝 ……………………………………………………………………………30</p><p>  參考文獻(xiàn) ……

15、……………………………………………………………………31</p><p><b>  緒論</b></p><p>  隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來越離不開信息網(wǎng)絡(luò)的支持, 而聊天室是人們最常見, 最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái),也是網(wǎng)絡(luò)與現(xiàn)實(shí)最貼近的實(shí)用型網(wǎng)站。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基

16、于開放的JAVA應(yīng)用程序開發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請(qǐng)求,易于維護(hù)和更新,其運(yùn)行所需環(huán)境及其工作流程和各個(gè)功能控件的工作原理將在本文依次介紹,并且文中提供了部分程序源代碼。</p><p>  JAVA的網(wǎng)絡(luò)功能與編程</p><p>  1.1.1 JAVA概述</p><p>  美國硅谷有一句行話,

17、每10年~15年有一次輪回。最近的一次輪回就是從Java開始。</p><p>  Java是一個(gè)由Sun公司開發(fā)而成的新一代編程語言。使用它可在各式各樣不同種機(jī)器、不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。不論你使用的是哪一種WWW瀏覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動(dòng)的主頁。Java正在逐步成為Internet應(yīng)用的主要開發(fā)語言。它徹底改變了應(yīng)用軟件的開發(fā)

18、模式,帶來了自PC機(jī)以來又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。</p><p>  Sun的Java語言開發(fā)小組成立于1991年,其目的是開拓消費(fèi)類電子產(chǎn)品市場,例如,交互式電視、烤面包箱等。Sun內(nèi)部人員把這個(gè)項(xiàng)目稱為Green,那時(shí)WorldWideWeb還在圖紙上呢。該小組的領(lǐng)導(dǎo)人是JamesGosling,是一位非常杰出的程序員。他出生于1957年,于1984年加盟SunMicrosyste

19、m公司,之前在一家IBM研究機(jī)構(gòu)工作。他是SunNeWs窗口系統(tǒng)的總設(shè)計(jì)師。也是第一個(gè)用C實(shí)現(xiàn)的EMACS的文本編輯器COSMACS的開發(fā)者。</p><p>  在研究開發(fā)過程中,Gosling深刻體會(huì)到消費(fèi)類電子產(chǎn)品和工作站產(chǎn)品在開發(fā)哲學(xué)上的差異:消費(fèi)類電子產(chǎn)品要求可靠性高、費(fèi)用低、標(biāo)準(zhǔn)化、使用簡單,用戶并不關(guān)心CPU的型號(hào),也不欣賞專用昂貴的RISC處理器,他們需要建立在一個(gè)標(biāo)準(zhǔn)基礎(chǔ)之上,具有一系列可選的方

20、案,從8086到80586都可以選取。</p><p><b>  從C開始</b></p><p>  為了使整個(gè)系統(tǒng)與平臺(tái)無關(guān),Gosling首先從改寫C編譯器著手。但是Gosling在改寫過程中感到僅C是無法滿足需要的,于是在1991年6月份開始準(zhǔn)備開發(fā)一個(gè)新的語言,那么給它起一個(gè)什么名字呢?Gosling回首向窗外望去,看見一棵老橡樹,于是建一個(gè)目錄叫Oak,

21、這就是Java語言的前身(后來發(fā)現(xiàn)Oak已是Sun公司另一個(gè)語言的注冊(cè)商標(biāo),才改名為Java,即太平洋上一個(gè)盛產(chǎn)咖啡的島嶼的名字)。</p><p>  Gosling在開始寫Java時(shí),并不局限于擴(kuò)充語言機(jī)制本身,更注重于語言所運(yùn)行的軟硬件環(huán)境。他要建立一個(gè)系統(tǒng),這個(gè)系統(tǒng)運(yùn)行于一個(gè)巨大的、分布的、異構(gòu)的網(wǎng)格環(huán)境中,完成各電子設(shè)備之間的通信與協(xié)同工作。Gosling在設(shè)計(jì)中采用了虛機(jī)器碼(VirtualMachi

22、neCode)方式,即Java語言編譯后產(chǎn)生的是虛擬機(jī),虛擬機(jī)運(yùn)行在一個(gè)解釋器上,每一個(gè)操作系統(tǒng)均有一個(gè)解釋器。這樣一來,Java就成了平臺(tái)無關(guān)語言。這和Gosling設(shè)計(jì)的SunNeWs窗口系統(tǒng)有著相同的技術(shù)味道。在NeWs中用戶界面統(tǒng)一用Postscript描述,不同的顯示器有不同的Postscript解釋器,這樣便保證了用戶界面的良好的可移植性。</p><p>  PatrickNaughton也是Sun

23、公司的技術(shù)骨干,曾經(jīng)是OpenWindows項(xiàng)目的負(fù)責(zé)人。當(dāng)Naughton加入該小組后,整個(gè)工作進(jìn)展神速。經(jīng)過17個(gè)月的奮戰(zhàn),整個(gè)系統(tǒng)勝利完成。它是由一個(gè)操作系統(tǒng)、一種語言(Java)、一個(gè)用戶界面、一個(gè)新的硬件平臺(tái)、三塊專用芯片構(gòu)成的。通常情況下,這樣的項(xiàng)目在Sun公司要75個(gè)人干三年。項(xiàng)目完成后,在Sun公司內(nèi)部做了一次展示和鑒定,觀眾的反應(yīng)是:在各方面都采用了嶄新的、非常大膽的技術(shù)。許多參觀者對(duì)Java留下了非常深刻的印象,特別

24、得到Sun的兩位領(lǐng)導(dǎo)人ScottMcNealy和BillJoy的關(guān)注,但Java的前途未卜。</p><p>  Java語言的轉(zhuǎn)折點(diǎn)</p><p>  到了1994年,WWW已如火如荼地發(fā)展起來。Gosling意識(shí)到WWW需要一個(gè)中性的瀏覽器,它不依賴于任何硬件平臺(tái)和軟件平臺(tái),它應(yīng)是一種實(shí)時(shí)性較高、可靠安全、有交互功能的瀏覽器。于是Gosling決定用Java開發(fā)一個(gè)新的Web瀏覽器。

25、</p><p>  這項(xiàng)工作由Naughton和JonathanPayne負(fù)責(zé),到1994年秋天,完成了WebRunner的開發(fā)工作。WebRunner是HotJava的前身,這個(gè)原型系統(tǒng)展示了Java可能帶來的廣闊市場前景。WebRunner改名為HotJava,并于1995年5月23日發(fā)表后,在產(chǎn)業(yè)界引起了巨大的轟動(dòng),Java的地位也隨之而得到肯定。又經(jīng)過一年的試用和改進(jìn),Java1.0版終于在1996年年

26、初正式發(fā)表。</p><p><b>  Java帶來的影響</b></p><p>  Java雖出現(xiàn)的時(shí)間不長,但已被業(yè)界接受,IBM、Apple、DEC、Adobe、SiliconGraphics、HP、Oracle、Toshiba、Netscap和Microsoft等大公司已經(jīng)購買了Java的許可證。Microsoft還在其Web瀏覽器Explorer3.0版

27、中增加了對(duì)Java的支持。</p><p>  另外,眾多的軟件開發(fā)商也開發(fā)了許多支持Java的軟件產(chǎn)品。如:Borland公司的基于Java的快速應(yīng)用程序開發(fā)環(huán)境Latte;Metrowerks公司和NaturalIntelligence公司分別開發(fā)的基于Machintosh的Java開發(fā)工具;Sun公司的Java開發(fā)環(huán)境JavaWorkshop;Microsoft也開發(fā)出系列Java產(chǎn)品。數(shù)據(jù)庫廠商如Illu

28、stra,Sybase,Versant,Oracle都在開發(fā)支持HTML和Java的CGI(CommonGatewayInterface)。在以網(wǎng)絡(luò)為中心的計(jì)算時(shí)代,不支持HTML和Java,就意味著應(yīng)用程序的應(yīng)用范圍只能限于同質(zhì)的環(huán)境。</p><p>  Intranet正在成為企業(yè)信息系統(tǒng)最佳的解決方案。它的優(yōu)點(diǎn)表現(xiàn)在:便宜、易于使用和管理。用戶不管使用何種類型的機(jī)器和操作系統(tǒng),界面是統(tǒng)一的Web瀏覽器,而

29、數(shù)據(jù)庫、Web頁面、應(yīng)用程序(用Java編的applet)則存在WWW服務(wù)器上。開發(fā)人員只需維護(hù)一個(gè)軟件版本,管理人員省去了為用戶安裝、升級(jí)、培訓(xùn)之苦,用戶則只需一個(gè)操作系統(tǒng),一個(gè)Internet瀏覽器足矣。</p><p>  我們可以設(shè)想未來的計(jì)算方式,每個(gè)HomePage的實(shí)質(zhì)是一個(gè)多媒體應(yīng)用程序,這些程序用Java來開發(fā)。Java應(yīng)用程序運(yùn)行在異質(zhì)的機(jī)器、異質(zhì)的操作系統(tǒng)之上,甚至于電冰箱、烤面包箱、防盜電

30、子設(shè)備之中,用Internet把所有的電子設(shè)備連接起來,通過TCP/IP進(jìn)行信息的交流。Java應(yīng)用程序之間既可以交換消息,也可以交換程序(一個(gè)Java的小應(yīng)用程序applet)。或許有一天,我們可以在Netscape瀏覽器里查看電冰箱的溫度,向烤面包箱發(fā)一個(gè)電子郵件。</p><p>  Java的出現(xiàn)是計(jì)算機(jī)信息交換的一個(gè)重要里程碑。在單機(jī)時(shí)代,程序進(jìn)程之間靠共享存儲(chǔ)進(jìn)行變量交換;在網(wǎng)絡(luò)時(shí)代,運(yùn)行在不同宿主機(jī)

31、上的程序按網(wǎng)絡(luò)協(xié)議進(jìn)行無格式的消息(二進(jìn)制字符流)交換,消息的語義由交換程序雙方維護(hù);在Java時(shí)代,運(yùn)行在網(wǎng)絡(luò)上的程序進(jìn)程交換的是小應(yīng)用程序(applet)。小應(yīng)用程序是什么?它是一個(gè)對(duì)象,由一組屬性和方法構(gòu)成,是一個(gè)可執(zhí)行的實(shí)體;不僅有數(shù)據(jù)的狀態(tài),而且有定義在數(shù)據(jù)上的操作。未來可能進(jìn)行代表(Agent)交換,代理有一定的智能性,那便是信息交換的更高級(jí)階段。</p><p>  隨著Internet的崛起、Ja

32、va的誕生,巨型的、臃腫的應(yīng)用軟件開始向小型化發(fā)展,由眾多“生活”在Internet上的小應(yīng)用程序(applet)相互協(xié)作完成信息的處理與傳遞。Java會(huì)加速應(yīng)用軟件的小型化、網(wǎng)絡(luò)化的趨勢。隨著Internet的發(fā)展,軟件必然是面向“大眾”,而不是“少數(shù)人”的奢侈品,薄利多銷將是網(wǎng)絡(luò)應(yīng)用軟件的重要特點(diǎn)。分布式對(duì)象技術(shù)保證了用多少,下載多少。 Java連同Internet,WWW正在改變應(yīng)用軟件的開發(fā)和使用方式,一切都要圍繞著網(wǎng)絡(luò),圍繞著

33、平臺(tái)無關(guān)。很多人認(rèn)為,Word、Excel等傳統(tǒng)的信息處理工具都必然走向萎縮,因?yàn)樗鼈兪菃螜C(jī)時(shí)代的產(chǎn)物。信息的價(jià)值在于使用和共享,Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word將演化成為Web寫作工具,Excel則將演化成Web上的電子表格。</p><p>  1.1.2 JAVA的特點(diǎn)</p><p> ?。ㄒ唬㎎AVA的主要特點(diǎn)</p><

34、;p>  Java語言有下面一些特點(diǎn):簡單、面向?qū)ο?、分布式、解釋?zhí)行、魯棒、 安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動(dòng)態(tài)性。</p><p><b>  1.簡單性</b></p><p>  Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù),只需理解一些基本的概念,就可以用它編寫出適合于各種情況的應(yīng)用程序。Java略去了運(yùn)算符

35、重載、多重繼承等模糊的概念,,且通過實(shí)現(xiàn)自動(dòng)垃圾收集大大簡化了程序設(shè)計(jì)者的內(nèi)存管理工作。另外,Java也適合于在小型機(jī)上運(yùn)行,它的基本解釋器及類的支持只有40KB左右,加上標(biāo)準(zhǔn)類庫和線程的支持也只有215KB左右。庫和線程的支持也只有215KB左右。</p><p><b>  2.面向?qū)ο?lt;/b></p><p>  Java語言的設(shè)計(jì)集中于對(duì)象及其接口,它提供了簡

36、單的類機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,并且通過繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。</p><p><b>  3.分布性</b></p><p>  Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便地訪問其

37、它對(duì)象。</p><p><b>  4.魯棒性</b></p><p>  Java在編譯和運(yùn)行程序時(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在

38、編譯時(shí)還可捕獲類型聲明中的許多常見錯(cuò)誤,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問題的出現(xiàn)。</p><p><b>  5.安全性</b></p><p>  用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針, 一切對(duì)內(nèi)存的訪問都必須通過對(duì)象的實(shí)例變量來實(shí)現(xiàn),這樣就防止程序員使用 “特洛伊”木馬等欺騙手段訪問對(duì)象的私有成員,同時(shí)也避免了指針操作中容易 產(chǎn)生的錯(cuò)誤。

39、</p><p><b>  6.體系結(jié)構(gòu)中立</b></p><p>  Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令,只要安裝了Java運(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>  

40、7.可移植性</b></p><p>  與平臺(tái)無關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。 同時(shí),Java的類庫中也實(shí)現(xiàn)了與不同平臺(tái)的接口,使這些類庫可以移植。另外,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&

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

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

43、p>  Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫中可以自由地加入 新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。</p><p> ?。ǘ㎎avaApplet </p><p>  Java語言的特性使它可以最大限度地利用網(wǎng)絡(luò)。Applet是Java的小應(yīng) 用程序,它是動(dòng)態(tài)、安全、跨平臺(tái)的網(wǎng)絡(luò)應(yīng)

44、用程序。JavaApplet嵌入HTML語言,通過主頁發(fā)布到Internet。網(wǎng)絡(luò)用戶訪問服務(wù)器的Applet時(shí),這些Applet 從網(wǎng)絡(luò)上進(jìn)行傳輸,然后在支持Java的瀏覽器中運(yùn)行。由于Java語言的安全機(jī)制,用戶一旦載入Applet,就可以放心地來生成多媒體的用戶界面或完成復(fù)雜的計(jì)算而不必?fù)?dān)心病毒的入侵。雖然Applet可以和圖像、聲音、動(dòng)畫等一樣從網(wǎng)絡(luò)上下載,但它并不同于這些多媒體的文件格式,它可以接收用戶的輸入,動(dòng)態(tài) 地進(jìn)行改變

45、,而不僅僅是動(dòng)畫的顯示和聲音的播放。</p><p>  (三)豐富的類庫Java提供了大量的類以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。</p><p>  1.語言包提供的支持包括字符串處理、多線程處理、例外處理、數(shù)學(xué)函 數(shù)處理等,可以用它簡單地實(shí)現(xiàn)Java程序的運(yùn)行平臺(tái)。</p><p>  2.實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。&

46、lt;/p><p>  3.輸入輸出包用統(tǒng)一的"流"模型來實(shí)現(xiàn)所有格式的I/O,包括文件系統(tǒng)、 網(wǎng)絡(luò)、輸入</p><p>  4.低級(jí)網(wǎng)絡(luò)包用于實(shí)現(xiàn)Socket編程。</p><p>  5.抽象圖形用戶接口包實(shí)現(xiàn)了不同平臺(tái)的計(jì)算機(jī)的圖形用戶接口部件, 包括窗口、菜單、滾動(dòng)條、對(duì)話框等,使得Java可以移植到不同平臺(tái)的機(jī)器。</p>

47、<p>  6.網(wǎng)絡(luò)包支持Internet的TCP/IP協(xié)議,提供了與In-ternet的接口。 它支持URL連接,WWW的即時(shí)訪問,并且簡化了用戶/服務(wù)器模型的程序設(shè)計(jì)。</p><p> ?。ㄋ模㎎ava和C、C++對(duì)于變量聲明、參數(shù)傳遞、操作符、流控制等,Java使用了和C、C++ 相同的傳統(tǒng),使得熟悉C、C++的程序員能很方便地進(jìn)行編程。同時(shí),Java為 了實(shí)現(xiàn)其簡單、魯棒、安全等特性,也摒棄了

48、C和C++中許多不合理的內(nèi)容。</p><p><b>  1.全局變量</b></p><p>  Java程序中,不能在所有類之外定義全局變量,只能通過在一個(gè)類中定 義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量。例如:</p><p>  ClassGlobalVar{ public static global_var; } </p>

49、<p>  在類GlobalVar中定義變量global_var為public static,使得其它類 可以訪問和修改該變量。 Java對(duì)全局變量進(jìn)行了更好的封裝。而在C和C++中,依賴于不加封裝 的全局變量常常造成系統(tǒng)的崩潰。</p><p><b>  2.Goto</b></p><p>  Java不支持C、C++中的goto語句,而是通過例外處

50、理語句try,Catch, final等來代替C、C++中用goto來處理遇到錯(cuò)誤時(shí)跳轉(zhuǎn)的情況,使程序更可讀 且更結(jié)構(gòu)化。 </p><p><b>  3.指針</b></p><p>  指針是C、C++中最靈活,也是最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類型。由指針?biāo)M(jìn)行 的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯 式類型轉(zhuǎn)換后,可以訪問一個(gè)C++中的

51、私有成員,從而破壞安全性,造成系統(tǒng)的 崩潰。而Java對(duì)指針進(jìn)行完全的控制,程序員不能直接進(jìn)行任何指針操作,例如 把整數(shù)轉(zhuǎn)化為指針,或者通過指針釋放某一內(nèi)存地址等。同時(shí),數(shù)組作為類在Java 中實(shí)現(xiàn),良好地解決了數(shù)組訪問越界這一C、C++中不作檢查的錯(cuò)誤。</p><p><b>  4.內(nèi)存管理</b></p><p>  在C中,程序員通過庫函數(shù)malloc()和

52、free()來分配和釋放內(nèi)存,C++ 中則通過運(yùn)算符new和delete來分配和釋放內(nèi)存。再次釋放已釋放的內(nèi)存塊或 未被分配的內(nèi)存塊,會(huì)造成系統(tǒng)的崩潰;同樣,忘記釋放不再使用的內(nèi)存塊也 會(huì)逐漸耗盡系統(tǒng)資源。而在Java中,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,通過運(yùn)算符new 為它們分配內(nèi)存堆。通過new得到對(duì)象的處理權(quán),而實(shí)際分配給對(duì)象的內(nèi)存可能 隨程序運(yùn)行而改變,Java對(duì)此自動(dòng)地進(jìn)行管理并且進(jìn)行垃圾收集,有效防止了由 于程序員的誤操作而導(dǎo)致的錯(cuò)

53、誤,并且更好地利用了系統(tǒng)資源。</p><p><b>  5.數(shù)據(jù)類型的支持</b></p><p>  在C、C++中,對(duì)于不同的平臺(tái),編譯器對(duì)于簡單數(shù)據(jù)類型如int,float 等分別分配不同長度的字節(jié)數(shù),例如:int在IBMPC中為16位,在VAX-11中為 32位,這導(dǎo)致了代碼的不可移植性,但在Java中,對(duì)于這些數(shù)據(jù)類型總是分 配固定長度的位數(shù),如對(duì)int

54、型,它總占32位,這就保證了Java的平臺(tái)無關(guān)性。</p><p><b>  6.類型轉(zhuǎn)換</b></p><p>  在C、C++中,可以通過指針進(jìn)行任意的類型轉(zhuǎn)換,常常帶來不安全性, 而Java中,運(yùn)行時(shí)系統(tǒng)對(duì)對(duì)象的處理要進(jìn)行類型相容性檢查,以防止不安全的 轉(zhuǎn)換。</p><p><b>  7.頭文件</b><

55、;/p><p>  C、C++中用頭文件來聲明類的原型以及全局變量、庫函數(shù)等,在大的系 統(tǒng)中,維護(hù)這些頭文件是很困難的。而Java不支持頭文件,類成員的類型和訪 問權(quán)限都封裝在一個(gè)類中,運(yùn)行時(shí)系統(tǒng)對(duì)訪問進(jìn)行控制,防止對(duì)私有成員的操作。同時(shí),Java中用import語句來與其它類進(jìn)行通訊,以便使用它們的方法。</p><p><b>  8.結(jié)構(gòu)和聯(lián)合</b></p&

56、gt;<p>  C、C++中的結(jié)構(gòu)和聯(lián)合中所有成員均為公有,這就帶來了安全性問題。 Java中不包含結(jié)構(gòu)和聯(lián)合,所有的內(nèi)容都封裝在類中。</p><p><b>  9.預(yù)處理</b></p><p>  C、C++中用宏定義來實(shí)現(xiàn)的代碼給程序的可讀性帶來了困難。在Java中不支持宏,它通過關(guān)鍵字final來聲明一個(gè)常量,以實(shí)現(xiàn)宏定義中廣泛使 用的常量

57、定義</p><p>  1.1.3 JAVA語言在網(wǎng)絡(luò)上的應(yīng)用</p><p>  Java程序可以獲取網(wǎng)絡(luò)上結(jié)點(diǎn)的圖象、聲音、HTML文檔及文本等資源,并可以對(duì)獲得的資源進(jìn)行處理。例如Java程序可以每隔一定時(shí)間讀取某結(jié)點(diǎn)提供的最新數(shù)據(jù),并以圖表的形式顯示出來。在編程處理上,一般先生成一個(gè)URL類型的對(duì)象,然后用 Java中相應(yīng)的方法(method)獲取該對(duì)象所代表的資源。下面列舉一個(gè)

58、Java從網(wǎng)絡(luò)上獲取圖象的的方法以說明。</p><p>  Java Applet可以直接從網(wǎng)絡(luò)上結(jié)點(diǎn)獲取圖象并顯示出來,Java提供了如下方法可以創(chuàng)建對(duì)應(yīng)于其他結(jié)點(diǎn)的圖象:</p><p>  getImage(new URL(字符串))</p><p>  其使用格式可有兩種:</p><p>  String url = “結(jié)點(diǎn)UR

59、L”;</p><p>  Image image;</p><p><b>  try {</b></p><p>  image = getImage(new URL(url));</p><p><b>  }</b></p><p>  catch(Exception

60、 e){</p><p>  System.out.println(“Can’t open the URL “); }</p><p><b>  或</b></p><p>  URL imgur=null;</p><p>  Image image;</p><p><b>  t

61、ry {</b></p><p>  imgur=new URL(“結(jié)點(diǎn)URL “);</p><p>  }catch (MalformedURLException e) {</p><p>  System.out.println(“Can’t open the URL “); </p><p><b>  }&l

62、t;/b></p><p>  image=getImage(imgur);</p><p>  前一種格式用“new URL(url)”生成 URL 對(duì)象, 并直接作為getImage的參數(shù),后一種格式先用“new URL(url)”生成一個(gè) URL對(duì)象,再傳給getImage,兩種格式本質(zhì)上是一樣的。 </p><p>  以上僅是Java在客

63、戶端應(yīng)用的一些方面,目前,Java更廣泛的應(yīng)用是在服務(wù)器端。</p><p>  1.2 JavaBeans技術(shù)</p><p>  什么是JavaBeans?JavaBeans就是Java的可重用組件技術(shù)。ASP通過COM來擴(kuò)充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù) 處理或復(fù)雜計(jì)算分離出來成為獨(dú)立可重復(fù)利用的模塊。JSP通過JavaBeans實(shí)現(xiàn)了同樣的功能擴(kuò)充。JSP對(duì)于在W

64、eb應(yīng)用中集成JavaBeans 組件提供了完善的支持。這種支持不僅能縮短開發(fā)時(shí)間(可以直接利用經(jīng)測試和可信任的已有組件,避免了重復(fù)開發(fā)),也為JSP應(yīng)用帶來了更多的可伸縮性。 JavaBeans組件可以用來執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫的交互以及數(shù)據(jù)提取等。在實(shí)際的JSP開發(fā)過程中,讀者將會(huì)發(fā)現(xiàn),和傳統(tǒng)的ASP或 PHP頁面相比,JSP頁面將會(huì)是非常簡潔的,由于JavaBeans開發(fā)起來簡單,又可以利用Java語言的強(qiáng)大功能,許多

65、動(dòng)態(tài)頁面處理過程實(shí)際上被封 裝到了JavaBeans中。</p><p>  1.3 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é)議的縮寫, TCP/IP是當(dāng)今網(wǎng)絡(luò)互聯(lián)的核心協(xié)議。TCP

66、/IP協(xié)議的體系結(jié)構(gòu)共有四個(gè)層次,即應(yīng)用層、傳輸層、網(wǎng)絡(luò)互聯(lián)層和網(wǎng)絡(luò)接口層。</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ù)的基本單元,提供了供路由選擇的信息,沒有差錯(cuò)校驗(yàn)和處理的機(jī)制。</p><p>  TCP協(xié)議的功能:差錯(cuò)控制——可靠性、面向連接、分段(Segment)、端口

67、號(hào)。TCP是傳輸控制協(xié)議,是面向連接的提供了一種可靠的傳輸服務(wù),它用三次握手和滑動(dòng)窗口機(jī)制來保證傳輸?shù)目煽啃?,及進(jìn)行流量控制。</p><p>  TCP/IP協(xié)議具有以下特點(diǎn):</p><p>  協(xié)議標(biāo)準(zhǔn)具有開放性,其獨(dú)立于特定的計(jì)算機(jī)硬件及操作系統(tǒng),可以免費(fèi)使用。</p><p>  統(tǒng)一分配網(wǎng)絡(luò)地址,使得每個(gè)TCP/IP 設(shè)備在網(wǎng)絡(luò)中都具有唯一的IP地址。&

68、lt;/p><p>  實(shí)現(xiàn)了高層協(xié)議的標(biāo)準(zhǔn)化,能為用戶提供多種可靠的服務(wù)。</p><p>  (2)TCP/IP協(xié)議進(jìn)行傳輸數(shù)據(jù)傳輸?shù)倪^程:</p><p>  應(yīng)用程序?yàn)榱藗鬏敂?shù)據(jù)會(huì)調(diào)用TCP,將數(shù)據(jù)和對(duì)應(yīng)的參數(shù)傳給TCP,將TCP 數(shù)據(jù)包封裝在IP包內(nèi),通過網(wǎng)絡(luò)送給目的TCP。接收方TCP在接收到數(shù)據(jù)后通知上層應(yīng)用程序,TCP將保證接收數(shù)據(jù)的正確性。在實(shí)現(xiàn)TC

69、P的主機(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提供所有TCP需要的服務(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ī)

70、同時(shí)運(yùn)行著多個(gè)應(yīng)用程序,這就需要我們來區(qū)別同一臺(tái)機(jī)子上的不同的服務(wù),所以就在傳輸層和應(yīng)用層上設(shè)置接口,就是 端口。端口實(shí)際是一個(gè)16位長的 地址,他的范圍是0~65535之間,其中0~1023是熟知端口,主要是給提供服務(wù)的應(yīng)用程序使用,這些端口是所有應(yīng)用進(jìn)程都只道的,1024~65535為一般端口,也稱動(dòng)態(tài)端口、連接端口,用來隨時(shí)分配要求通信的個(gè)客戶端應(yīng)用程序。在數(shù)據(jù)傳輸過程中,各種服務(wù)器不斷的檢測分配給他的端口,一邊發(fā)現(xiàn)要求和他通信的

71、客戶端。</p><p>  1.4 Socket的簡介</p><p>  Socket,簡稱套接字,用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接。也就是說網(wǎng)絡(luò)上兩個(gè)或兩個(gè)以上雙工方式通信的進(jìn)程之間總有一個(gè)連接,這個(gè)連接的端點(diǎn)成為套接字,套接字是在比較低的層次上通信的。</p><p>  具體的說:一個(gè)服務(wù)器應(yīng)用程序一般偵聽一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接

72、請(qǐng)求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過程中,客戶端被分配一個(gè)本地端口與一個(gè)socket建立連接,客戶端通過寫socket來通知服務(wù)器,以讀socket中的信息,類似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來偵聽原始端口上的其他連接請(qǐng)求。服務(wù)器也通過它的本地端口連接一個(gè)socket,通過讀寫和客戶端通信。</p><p>  Socket程序的工作過程:</p><p&g

73、t;  1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p>  2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通道。</p><p>  3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。</p><p><b>  具體如下:</b></p><p><b>

74、  服務(wù)器</b></p><p><b>  三次握手:</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>  第三此握手:源

75、端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,在向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。</p><p><b>  具體過程如下</b></p><p>  主機(jī)A 主機(jī)B</p><p><b>  2 規(guī)劃設(shè)計(jì)</b></p><p><b>  

76、2.1 課題來源</b></p><p>  根據(jù)當(dāng)前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來越受各種網(wǎng)民所青睞。因此開發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪問量,同時(shí)可以留著訪客,更重要的是讓訪客透過聊天室實(shí)時(shí)的互相交流。而本人也學(xué)習(xí)過JAVA語言,對(duì)網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對(duì)JAVA語言的掌握程度,本人就決定以《基于JAVA聊天設(shè)計(jì)與實(shí)現(xiàn)》為畢業(yè)設(shè)計(jì),希望通過這一次

77、的能進(jìn)一步提高本人的網(wǎng)絡(luò)開發(fā)編程的能力。</p><p><b>  2.2需求分析</b></p><p>  聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶端。簡單分析一下兩個(gè)方面所要完成的任務(wù),對(duì)設(shè)計(jì)這個(gè)程序來說,等于完成了一半。首先來看一下服務(wù)器端的任務(wù):</p><p>  1.服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽是

78、否有客戶端連接或者斷開連接(包括判斷沒有響應(yīng)的連接超時(shí))。 ?。玻?wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。</p><p>  以上就是服務(wù)器端最主要的兩個(gè)任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜。</p><p>  客戶端應(yīng)該完成的工作包括:</p><p> ?。保c服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。

79、 ?。玻邮諄碜苑?wù)器的信息。</p><p>  相對(duì)服務(wù)器而言,客戶端的任務(wù)更加簡單,有了以上的簡單分析,可以知道,解決上述四個(gè)問題,即完成了該聊天系統(tǒng)的核心。</p><p>  3 系統(tǒng)分析與設(shè)計(jì)方案</p><p>  3.1 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn) 聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布

80、局進(jìn)入大量美化以及動(dòng)畫設(shè)計(jì)等等,而聊天室只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):</p><p><b>  1、實(shí)現(xiàn)思想</b></p><p>  在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信

81、過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。</p><p>  2、服務(wù)器端工作流程</p><p>  服務(wù)器端通過socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè)Socket數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進(jìn)行偵聽listen()。如果有客戶端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空Socket,將客戶端地址賦給這個(gè)Socke

82、t。然后登錄成功的客戶就可以在服務(wù)器上聊天了。</p><p><b>  3、客戶端工作流程</b></p><p>  客戶端程序相對(duì)簡單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過這個(gè)Socket來發(fā)送和接收數(shù)據(jù)就可以了。</p><p>  3 .2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分</p><p>

83、<b>  聊天系統(tǒng)工作原理圖</b></p><p>  3.3 聊天系統(tǒng)各功能模塊</p><p> ?。?)服務(wù)器程序模塊</p><p>  服務(wù)器與客戶間通過套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡單,Java API為處理套接口的通信提供了一個(gè)類java.net.Socket,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)

84、器采用多線程以滿足多用戶的請(qǐng)求,并通過創(chuàng)建一個(gè)ServerSocket對(duì)象來監(jiān)聽來自客戶的連接請(qǐng)求,默認(rèn)端口為9527,然后無限循環(huán)調(diào)用accept()方法接受客戶程序的連接。</p><p><b>  服務(wù)器線程源碼:</b></p><p>  package qq.server;</p><p>  import java.io.IOE

85、xception;</p><p>  import java.io.ObjectInputStream;</p><p>  import java.io.ObjectOutputStream;</p><p>  import java.net.Socket;</p><p>  import java.util.*;</p>

86、<p>  import qq.dao.hibernate.IServiceDao;</p><p>  import qq.entity.*;</p><p>  public class ServerController {</p><p>  private User user;</p><p>  private Soc

87、ket s;</p><p>  private IServiceDao dao;</p><p>  private ObjectInputStream ois;</p><p>  private ObjectOutputStream oos;</p><p>  private OnlineUser onlineUser;</p&

88、gt;<p>  public ServerController(Socket s) {</p><p><b>  super();</b></p><p>  dao=ServerMainClass.userDao;</p><p>  this.s = s;</p><p><b>  }&

89、lt;/b></p><p>  public void handle() throws Exception {</p><p>  ois=new ObjectInputStream(s.getInputStream());</p><p>  oos=new ObjectOutputStream(s.getOutputStream());</p>

90、;<p>  onlineUser=new OnlineUser(ois,oos);</p><p>  while(true){</p><p>  Request req=(Request)ois.readObject();</p><p>  ois.read();</p><p>  RequestType type=r

91、eq.getType();</p><p>  if(type.equals(RequestType.exit)){</p><p>  exitHandle();</p><p><b>  break;</b></p><p>  }else if(type.equals(RequestType.login)){&l

92、t;/p><p>  loginHandle(req);</p><p>  }else if(type.equals(RequestType.register)){</p><p>  registerHandle();</p><p>  }else if(type.equals(RequestType.offline)){</p>

93、;<p>  offlineHandle();</p><p><b>  break;</b></p><p>  }else if(type.equals(RequestType.changeInformation)){</p><p>  changeInformationHandle();</p><p

94、>  }else if(type.equals(RequestType.modifypasswd)){</p><p>  modifypasswdHandle(req);</p><p>  }else if(type.equals(RequestType.sendMessage)){</p><p>  sendMessageHandle(req);<

95、;/p><p>  }else if(type.equals(RequestType.receiveFile)){</p><p>  receiveFileHandle(req);</p><p>  }else if(type.equals(RequestType.sendFile)){</p><p>  sendFileHandle(re

96、q);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  private void modifypasswdHandle(Request req) {</p><p&g

97、t;  Long id=Long.parseLong(req.getData("id"));</p><p>  String oldpwd=req.getData("oldpwd");</p><p>  String newpwd=req.getData("newpwd");</p><p>  Res

98、ponse res=new Response(RequestType.modifypasswd);</p><p><b>  try {</b></p><p>  dao.updatePwd(id, oldpwd, newpwd);</p><p>  res.setData(1);</p><p><b>

99、;  try {</b></p><p>  oos.writeObject(res);</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  }

100、 catch (RuntimeException e) {</p><p><b>  try {</b></p><p>  oos.writeObject(res);</p><p>  } catch (IOException e1) {</p><p>  e1.printStackTrace();</p&

101、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  private void changeInformationHandle() {</p><p><b>  try

102、 {</b></p><p>  User user=(User)ois.readObject();</p><p>  Response res=new Response(RequestType.changeInformation);</p><p><b>  try {</b></p><p>  da

103、o.updateUser(user);</p><p>  res.setData(1);//修改成功返回值帶一個(gè)整形值</p><p>  oos.writeObject(res);</p><p>  oos.flush();</p><p>  } catch (RuntimeException e) {</p><

104、p>  oos.writeObject(res);//失敗則返回值不帶參數(shù)</p><p>  oos.flush();</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  } catch (IOException e) {</p>

105、<p>  e.printStackTrace();</p><p>  } catch (ClassNotFoundException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b>

106、</p><p>  private void exitHandle() {</p><p><b>  try {</b></p><p>  s.close();</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace()

107、;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //發(fā)送文件</b></p><p>  private void sendFileHandle(Request req) {</p><p>

108、;<b>  //try {</b></p><p>  //User u=(User)ois.readObject();</p><p><b>  //</b></p><p>  //} catch (Exception e) {</p><p>  //e.prin

109、tStackTrace();</p><p><b>  //} </b></p><p><b>  }</b></p><p><b>  //接受文件</b></p><p>  private void receiveFileHandle(Request req)

110、{</p><p><b>  }</b></p><p><b>  //發(fā)送消息</b></p><p>  private void sendMessageHandle(Request req) {</p><p>  Response res=new Response(RequestType

111、.receiveMessage);</p><p>  Message message=null;</p><p><b>  try {</b></p><p>  message=(Message)ois.readObject();</p><p>  res.setData(message);</p>

112、<p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p>  } catch (ClassNotFoundException e) {</p><p>  e.printStackTrace();</p><p><b>  }</

113、b></p><p>  User to=message.getTo();</p><p>  if(to==null){</p><p>  sendToAllUser(res);//如果收信人為null,則發(fā)送信息給所有人</p><p><b>  }else{</b></p><p>

114、;  //發(fā)送信息給to和他自己</p><p>  Response res1=new Response(RequestType.individualTalk);</p><p>  res1.setData(message);</p><p>  ObjectOutputStream o=null;</p><p>  Set<Us

115、er>set=ServerMainClass.userMap.keySet();</p><p>  Iterator it=set.iterator();</p><p>  while(it.hasNext()){</p><p>  User u=(User)it.next();</p><p>  if(u.equals(to)

116、){</p><p>  o=ServerMainClass.userMap.get(u).getOos();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論