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

下載本文檔

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

文檔簡(jiǎn)介

1、本科畢業(yè)論文基于JAVA的聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 院:機(jī)電工程學(xué)院專(zhuān) 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)雙學(xué)位學(xué) 號(hào):043545464姓 名: 指導(dǎo)教師:李美安職 稱(chēng):教授論文提交日期:二八年四月摘 要隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開(kāi)發(fā)主要包括一個(gè)網(wǎng)絡(luò)聊天服務(wù)器程序和一個(gè)網(wǎng)絡(luò)聊天客戶(hù)程序兩個(gè)方面。前者通過(guò)Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶(hù)端發(fā)來(lái)信息,并能刷新用戶(hù)列表。后者通過(guò)與服務(wù)器建立連接,來(lái)進(jìn)行客戶(hù)

2、端與客戶(hù)端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過(guò)直接繼承Thread類(lèi)來(lái)建立多線(xiàn)程。開(kāi)發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶(hù)端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來(lái)實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過(guò)分析這些情況,該局域網(wǎng)聊天工具采用Eclipse為基本開(kāi)發(fā)環(huán)境和java語(yǔ)言進(jìn)行編寫(xiě),首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)關(guān)鍵詞:局域網(wǎng) 聊天 socket javaAbstra

3、ctAlong with the fast development of Internet, the 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-Messager and so on. This syst

4、em 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, the server can read and deliver the information which client side sends, and can renovate the users tabulation.

5、 The latter make a connection with the server, carries on communication between the client side and the client side. With the LAN correspondence mechanism principle, through inheritting the Thread kind to establish the multithreading directly. In the development, it uses the elementary theory knowle

6、dge which the computer network programmes. for example, TCP/IP agreement, Client/Server pattern, network programming design method and so on. In the network programming, it realizes reading and transmission of the information, that is,informaton flows realize the information exchange, introduce info

7、rmation flow analysis for realizing a system, in which containes some basic software engineering methods. After analyzes these situations, this LAN chating tool takes Eclipse as the basic development environment and compiles in java language. first, it will establish the system application prototype

8、 in a short time. then, for the initial prototype system, it needs constantly revised and improved, until a viable system.Key words: LAN Chat Socket Java目 錄1. 緒論 011.1 JAVA 的網(wǎng)絡(luò)功能與編程 011.1.1 JAVA概述021.1.2 JAVA的特點(diǎn) 041.1.3 JAVA語(yǔ)言在網(wǎng)絡(luò)上的應(yīng)用 071.2 JavaBeans技術(shù) 081.3 IP/TCP協(xié)議常識(shí) 081.4 Socket的簡(jiǎn)介 092. 規(guī)劃設(shè)計(jì) 112.1

9、 課題來(lái)源 112.2 需求分析 113. 系統(tǒng)分析與設(shè)計(jì)方案 123.1 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn) 123.2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分 123.3 功能模塊結(jié)構(gòu)圖 134. 系統(tǒng)設(shè)計(jì)環(huán)境與測(cè)試 264.1 開(kāi)發(fā)環(huán)境和工具 264.2 硬件環(huán)境 264.3 聊天系統(tǒng)的測(cè)試 265. 畢業(yè)設(shè)計(jì)總結(jié) 285.1 畢業(yè)設(shè)計(jì)總結(jié)和展望 285.2 經(jīng)驗(yàn)和感想 28致 謝 30參考文獻(xiàn) 31 內(nèi)蒙古農(nóng)業(yè)大學(xué)學(xué)士學(xué)位論文 311 緒論 隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來(lái)越離不開(kāi)信息網(wǎng)絡(luò)的支持, 而聊天室是人們最常見(jiàn), 最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶(hù)提供一個(gè)借助

10、網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái),也是網(wǎng)絡(luò)與現(xiàn)實(shí)最貼近的實(shí)用型網(wǎng)站。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于開(kāi)放的JAVA應(yīng)用程序開(kāi)發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶(hù)請(qǐng)求,易于維護(hù)和更新,其運(yùn)行所需環(huán)境及其工作流程和各個(gè)功能控件的工作原理將在本文依次介紹,并且文中提供了部分程序源代碼。1.1 JAVA的網(wǎng)絡(luò)功能與編程1.1.1 JAVA概述美國(guó)硅谷有一句行話(huà),每10年15年有一次輪回。最近的一次輪回就是從Java開(kāi)始。Java是一個(gè)由Sun公司開(kāi)發(fā)而成的新一代編程語(yǔ)言。使用它可在各式各樣不同種機(jī)器、不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開(kāi)發(fā)軟件。不論你使用的是哪一種WWW

11、瀏覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動(dòng)的主頁(yè)。Java正在逐步成為Internet應(yīng)用的主要開(kāi)發(fā)語(yǔ)言。它徹底改變了應(yīng)用軟件的開(kāi)發(fā)模式,帶來(lái)了自PC機(jī)以來(lái)又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。Sun的Java語(yǔ)言開(kāi)發(fā)小組成立于1991年,其目的是開(kāi)拓消費(fèi)類(lèi)電子產(chǎn)品市場(chǎng),例如,交互式電視、烤面包箱等。Sun內(nèi)部人員把這個(gè)項(xiàng)目稱(chēng)為Green,那時(shí)WorldWideWeb還在圖紙上呢。該小組的領(lǐng)導(dǎo)人是JamesGosling,是一位非常杰出的程序員。他出生于1957年,于1984年加盟SunMicrosystem公司,之前在一家

12、IBM研究機(jī)構(gòu)工作。他是SunNeWs窗口系統(tǒng)的總設(shè)計(jì)師。也是第一個(gè)用C實(shí)現(xiàn)的EMACS的文本編輯器COSMACS的開(kāi)發(fā)者。在研究開(kāi)發(fā)過(guò)程中,Gosling深刻體會(huì)到消費(fèi)類(lèi)電子產(chǎn)品和工作站產(chǎn)品在開(kāi)發(fā)哲學(xué)上的差異:消費(fèi)類(lèi)電子產(chǎn)品要求可靠性高、費(fèi)用低、標(biāo)準(zhǔn)化、使用簡(jiǎn)單,用戶(hù)并不關(guān)心CPU的型號(hào),也不欣賞專(zhuān)用昂貴的RISC處理器,他們需要建立在一個(gè)標(biāo)準(zhǔn)基礎(chǔ)之上,具有一系列可選的方案,從8086到80586都可以選取。 從C開(kāi)始為了使整個(gè)系統(tǒng)與平臺(tái)無(wú)關(guān),Gosling首先從改寫(xiě)C編譯器著手。但是Gosling在改寫(xiě)過(guò)程中感到僅C是無(wú)法滿(mǎn)足需要的,于是在1991年6月份開(kāi)始準(zhǔn)備開(kāi)發(fā)一個(gè)新的語(yǔ)言,那么給它

13、起一個(gè)什么名字呢?Gosling回首向窗外望去,看見(jiàn)一棵老橡樹(shù),于是建一個(gè)目錄叫Oak,這就是Java語(yǔ)言的前身(后來(lái)發(fā)現(xiàn)Oak已是Sun公司另一個(gè)語(yǔ)言的注冊(cè)商標(biāo),才改名為Java,即太平洋上一個(gè)盛產(chǎn)咖啡的島嶼的名字)。Gosling在開(kāi)始寫(xiě)Java時(shí),并不局限于擴(kuò)充語(yǔ)言機(jī)制本身,更注重于語(yǔ)言所運(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ī)器碼(VirtualMachineCode)方式,即Java語(yǔ)言編譯后產(chǎn)生的是虛擬機(jī),虛擬機(jī)運(yùn)行在一個(gè)解釋器上,每一個(gè)操作系統(tǒng)均有一個(gè)解釋器。這樣一

14、來(lái),Java就成了平臺(tái)無(wú)關(guān)語(yǔ)言。這和Gosling設(shè)計(jì)的SunNeWs窗口系統(tǒng)有著相同的技術(shù)味道。在NeWs中用戶(hù)界面統(tǒng)一用Postscript描述,不同的顯示器有不同的Postscript解釋器,這樣便保證了用戶(hù)界面的良好的可移植性。PatrickNaughton也是Sun公司的技術(shù)骨干,曾經(jīng)是OpenWindows項(xiàng)目的負(fù)責(zé)人。當(dāng)Naughton加入該小組后,整個(gè)工作進(jìn)展神速。經(jīng)過(guò)17個(gè)月的奮戰(zhàn),整個(gè)系統(tǒng)勝利完成。它是由一個(gè)操作系統(tǒng)、一種語(yǔ)言(Java)、一個(gè)用戶(hù)界面、一個(gè)新的硬件平臺(tái)、三塊專(zhuān)用芯片構(gòu)成的。通常情況下,這樣的項(xiàng)目在Sun公司要75個(gè)人干三年。項(xiàng)目完成后,在Sun公司內(nèi)部做了

15、一次展示和鑒定,觀眾的反應(yīng)是:在各方面都采用了嶄新的、非常大膽的技術(shù)。許多參觀者對(duì)Java留下了非常深刻的印象,特別得到Sun的兩位領(lǐng)導(dǎo)人ScottMcNealy和BillJoy的關(guān)注,但Java的前途未卜。 Java語(yǔ)言的轉(zhuǎn)折點(diǎn)到了1994年,WWW已如火如荼地發(fā)展起來(lái)。Gosling意識(shí)到WWW需要一個(gè)中性的瀏覽器,它不依賴(lài)于任何硬件平臺(tái)和軟件平臺(tái),它應(yīng)是一種實(shí)時(shí)性較高、可靠安全、有交互功能的瀏覽器。于是Gosling決定用Java開(kāi)發(fā)一個(gè)新的Web瀏覽器。這項(xiàng)工作由Naughton和JonathanPayne負(fù)責(zé),到1994年秋天,完成了WebRunner的開(kāi)發(fā)工作。WebRunner是

16、HotJava的前身,這個(gè)原型系統(tǒng)展示了Java可能帶來(lái)的廣闊市場(chǎng)前景。WebRunner改名為HotJava,并于1995年5月23日發(fā)表后,在產(chǎn)業(yè)界引起了巨大的轟動(dòng),Java的地位也隨之而得到肯定。又經(jīng)過(guò)一年的試用和改進(jìn),Java1.0版終于在1996年年初正式發(fā)表。 Java帶來(lái)的影響Java雖出現(xiàn)的時(shí)間不長(zhǎng),但已被業(yè)界接受,IBM、Apple、DEC、Adobe、SiliconGraphics、HP、Oracle、Toshiba、Netscap和Microsoft等大公司已經(jīng)購(gòu)買(mǎi)了Java的許可證。Microsoft還在其Web瀏覽器Explorer3.0版中增加了對(duì)Java的支持。另

17、外,眾多的軟件開(kāi)發(fā)商也開(kāi)發(fā)了許多支持Java的軟件產(chǎn)品。如:Borland公司的基于Java的快速應(yīng)用程序開(kāi)發(fā)環(huán)境Latte;Metrowerks公司和NaturalIntelligence公司分別開(kāi)發(fā)的基于Machintosh的Java開(kāi)發(fā)工具;Sun公司的Java開(kāi)發(fā)環(huán)境JavaWorkshop;Microsoft也開(kāi)發(fā)出系列Java產(chǎn)品。數(shù)據(jù)庫(kù)廠商如Illustra,Sybase,Versant,Oracle都在開(kāi)發(fā)支持HTML和Java的CGI(CommonGatewayInterface)。在以網(wǎng)絡(luò)為中心的計(jì)算時(shí)代,不支持HTML和Java,就意味著應(yīng)用程序的應(yīng)用范圍只能限于同質(zhì)的環(huán)

18、境。Intranet正在成為企業(yè)信息系統(tǒng)最佳的解決方案。它的優(yōu)點(diǎn)表現(xiàn)在:便宜、易于使用和管理。用戶(hù)不管使用何種類(lèi)型的機(jī)器和操作系統(tǒng),界面是統(tǒng)一的Web瀏覽器,而數(shù)據(jù)庫(kù)、Web頁(yè)面、應(yīng)用程序(用Java編的applet)則存在WWW服務(wù)器上。開(kāi)發(fā)人員只需維護(hù)一個(gè)軟件版本,管理人員省去了為用戶(hù)安裝、升級(jí)、培訓(xùn)之苦,用戶(hù)則只需一個(gè)操作系統(tǒng),一個(gè)Internet瀏覽器足矣。我們可以設(shè)想未來(lái)的計(jì)算方式,每個(gè)HomePage的實(shí)質(zhì)是一個(gè)多媒體應(yīng)用程序,這些程序用Java來(lái)開(kāi)發(fā)。Java應(yīng)用程序運(yùn)行在異質(zhì)的機(jī)器、異質(zhì)的操作系統(tǒng)之上,甚至于電冰箱、烤面包箱、防盜電子設(shè)備之中,用Internet把所有的電子設(shè)備

19、連接起來(lái),通過(guò)TCP/IP進(jìn)行信息的交流。Java應(yīng)用程序之間既可以交換消息,也可以交換程序(一個(gè)Java的小應(yīng)用程序applet)?;蛟S有一天,我們可以在Netscape瀏覽器里查看電冰箱的溫度,向烤面包箱發(fā)一個(gè)電子郵件。Java的出現(xiàn)是計(jì)算機(jī)信息交換的一個(gè)重要里程碑。在單機(jī)時(shí)代,程序進(jìn)程之間靠共享存儲(chǔ)進(jìn)行變量交換;在網(wǎng)絡(luò)時(shí)代,運(yùn)行在不同宿主機(jī)上的程序按網(wǎng)絡(luò)協(xié)議進(jìn)行無(wú)格式的消息(二進(jìn)制字符流)交換,消息的語(yǔ)義由交換程序雙方維護(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),

20、而且有定義在數(shù)據(jù)上的操作。未來(lái)可能進(jìn)行代表(Agent)交換,代理有一定的智能性,那便是信息交換的更高級(jí)階段。隨著Internet的崛起、Java的誕生,巨型的、臃腫的應(yīng)用軟件開(kāi)始向小型化發(fā)展,由眾多“生活”在Internet上的小應(yīng)用程序(applet)相互協(xié)作完成信息的處理與傳遞。Java會(huì)加速應(yīng)用軟件的小型化、網(wǎng)絡(luò)化的趨勢(shì)。隨著Internet的發(fā)展,軟件必然是面向“大眾”,而不是“少數(shù)人”的奢侈品,薄利多銷(xiāo)將是網(wǎng)絡(luò)應(yīng)用軟件的重要特點(diǎn)。分布式對(duì)象技術(shù)保證了用多少,下載多少。 Java連同Internet,WWW正在改變應(yīng)用軟件的開(kāi)發(fā)和使用方式,一切都要圍繞著網(wǎng)絡(luò),圍繞著平臺(tái)無(wú)關(guān)。很多人認(rèn)

21、為,Word、Excel等傳統(tǒng)的信息處理工具都必然走向萎縮,因?yàn)樗鼈兪菃螜C(jī)時(shí)代的產(chǎn)物。信息的價(jià)值在于使用和共享,Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word將演化成為Web寫(xiě)作工具,Excel則將演化成Web上的電子表格。1.1.2 JAVA的特點(diǎn)(一)JAVA的主要特點(diǎn)Java語(yǔ)言有下面一些特點(diǎn):簡(jiǎn)單、面向?qū)ο?、分布式、解釋?zhí)行、魯棒、 安全、體系結(jié)構(gòu)中立、可移植、高性能、多線(xiàn)程以及動(dòng)態(tài)性。1.簡(jiǎn)單性Java語(yǔ)言是一種面向?qū)ο蟮恼Z(yǔ)言,它通過(guò)提供最基本的方法來(lái)完成指定的任務(wù),只需理解一些基本的概念,就可以用它編寫(xiě)出適合于各種情況的應(yīng)用程序。Java略去了運(yùn)算符重載、

22、多重繼承等模糊的概念,,且通過(guò)實(shí)現(xiàn)自動(dòng)垃圾收集大大簡(jiǎn)化了程序設(shè)計(jì)者的內(nèi)存管理工作。另外,Java也適合于在小型機(jī)上運(yùn)行,它的基本解釋器及類(lèi)的支持只有40KB左右,加上標(biāo)準(zhǔn)類(lèi)庫(kù)和線(xiàn)程的支持也只有215KB左右。庫(kù)和線(xiàn)程的支持也只有215KB左右。2.面向?qū)ο驤ava語(yǔ)言的設(shè)計(jì)集中于對(duì)象及其接口,它提供了簡(jiǎn)單的類(lèi)機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息隱藏;而類(lèi)則提供了一類(lèi)對(duì)象的原型,并且通過(guò)繼承機(jī)制,子類(lèi)可以使用父類(lèi)所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。3.分布性Java是面向網(wǎng)絡(luò)的語(yǔ)言。通過(guò)它提供的類(lèi)庫(kù)可以處理TCP/IP協(xié)議,用戶(hù)可以通過(guò)URL地址在網(wǎng)絡(luò)上

23、很方便地訪(fǎng)問(wèn)其它對(duì)象。4.魯棒性Java在編譯和運(yùn)行程序時(shí),都要對(duì)可能出現(xiàn)的問(wèn)題進(jìn)行檢查,以消除錯(cuò)誤的產(chǎn)生。它提供自動(dòng)垃圾收集來(lái)進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。通過(guò)集成的面向?qū)ο蟮睦馓幚頇C(jī)制,在編譯時(shí),Java提示出可能出現(xiàn)但未被處理的例外,幫助程序員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外, Java在編譯時(shí)還可捕獲類(lèi)型聲明中的許多常見(jiàn)錯(cuò)誤,防止動(dòng)態(tài)運(yùn)行時(shí)不匹配問(wèn)題的出現(xiàn)。5.安全性用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針, 一切對(duì)內(nèi)存的訪(fǎng)問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止程序員使用 “特洛伊”木馬等欺騙手段訪(fǎng)問(wèn)對(duì)象的私有成員,同時(shí)也

24、避免了指針操作中容易 產(chǎn)生的錯(cuò)誤。6.體系結(jié)構(gòu)中立Java解釋器生成與體系結(jié)構(gòu)無(wú)關(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)行。7.可移植性與平臺(tái)無(wú)關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)上的不同機(jī)器。 同時(shí),Java的類(lèi)庫(kù)中也實(shí)現(xiàn)了與不同平臺(tái)的接口,使這些類(lèi)庫(kù)可以移植。另外,Java編譯器是由Java語(yǔ)言實(shí)現(xiàn)的,Java運(yùn)行時(shí)系統(tǒng)由標(biāo)準(zhǔn)C實(shí)現(xiàn),這使得Java 系統(tǒng)本身也具有可移植性。8.解釋執(zhí)行Java解釋器直接對(duì)Java字節(jié)碼進(jìn)行解釋執(zhí)

25、行。字節(jié)碼本身攜帶了許多編譯時(shí)信息,使得連接過(guò)程更加簡(jiǎn)單。9.高性能和其它解釋執(zhí)行的語(yǔ)言如BASIC不同,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對(duì)應(yīng)于特定CPU的機(jī)器碼,從而得到較高的性能。10.多線(xiàn)程多線(xiàn)程機(jī)制使應(yīng)用程序能夠并行執(zhí)行,而且同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正確操作。通過(guò)使用多線(xiàn)程,程序設(shè)計(jì)者可以分別用不同的線(xiàn)程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。11.動(dòng)態(tài)性Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類(lèi)庫(kù)中可以自由地加入 新的方法和實(shí)例變量而不會(huì)影響用戶(hù)程序的執(zhí)行。并且Java通過(guò)接口來(lái)支持多重繼承,使之比嚴(yán)格的類(lèi)繼承具有更

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

27、變,而不僅僅是動(dòng)畫(huà)的顯示和聲音的播放。(三)豐富的類(lèi)庫(kù)Java提供了大量的類(lèi)以滿(mǎn)足網(wǎng)絡(luò)化、多線(xiàn)程、面向?qū)ο笙到y(tǒng)的需要。1.語(yǔ)言包提供的支持包括字符串處理、多線(xiàn)程處理、例外處理、數(shù)學(xué)函 數(shù)處理等,可以用它簡(jiǎn)單地實(shí)現(xiàn)Java程序的運(yùn)行平臺(tái)。2.實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。3.輸入輸出包用統(tǒng)一的流模型來(lái)實(shí)現(xiàn)所有格式的I/O,包括文件系統(tǒng)、 網(wǎng)絡(luò)、輸入4.低級(jí)網(wǎng)絡(luò)包用于實(shí)現(xiàn)Socket編程。5.抽象圖形用戶(hù)接口包實(shí)現(xiàn)了不同平臺(tái)的計(jì)算機(jī)的圖形用戶(hù)接口部件, 包括窗口、菜單、滾動(dòng)條、對(duì)話(huà)框等,使得Java可以移植到不同平臺(tái)的機(jī)器。6.網(wǎng)絡(luò)包支持Internet的TCP/I

28、P協(xié)議,提供了與In-ternet的接口。 它支持URL連接,WWW的即時(shí)訪(fǎng)問(wèn),并且簡(jiǎn)化了用戶(hù)/服務(wù)器模型的程序設(shè)計(jì)。(四)Java和C、C+對(duì)于變量聲明、參數(shù)傳遞、操作符、流控制等,Java使用了和C、C+ 相同的傳統(tǒng),使得熟悉C、C+的程序員能很方便地進(jìn)行編程。同時(shí),Java為 了實(shí)現(xiàn)其簡(jiǎn)單、魯棒、安全等特性,也摒棄了C和C+中許多不合理的內(nèi)容。1.全局變量Java程序中,不能在所有類(lèi)之外定義全局變量,只能通過(guò)在一個(gè)類(lèi)中定 義公用、靜態(tài)的變量來(lái)實(shí)現(xiàn)一個(gè)全局變量。例如:ClassGlobalVar public static global_var; 在類(lèi)GlobalVar中定義變量globa

29、l_var為public static,使得其它類(lèi) 可以訪(fǎng)問(wèn)和修改該變量。 Java對(duì)全局變量進(jìn)行了更好的封裝。而在C和C+中,依賴(lài)于不加封裝 的全局變量常常造成系統(tǒng)的崩潰。2.GotoJava不支持C、C+中的goto語(yǔ)句,而是通過(guò)例外處理語(yǔ)句try,Catch, final等來(lái)代替C、C+中用goto來(lái)處理遇到錯(cuò)誤時(shí)跳轉(zhuǎn)的情況,使程序更可讀 且更結(jié)構(gòu)化。 3.指針指針是C、C+中最靈活,也是最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類(lèi)型。由指針?biāo)M(jìn)行 的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過(guò)指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯 式類(lèi)型轉(zhuǎn)換后,可以訪(fǎng)問(wèn)一個(gè)C+中的私有成員,從而破壞安全性,造成系統(tǒng)的 崩潰。而Java對(duì)

30、指針進(jìn)行完全的控制,程序員不能直接進(jìn)行任何指針操作,例如 把整數(shù)轉(zhuǎn)化為指針,或者通過(guò)指針釋放某一內(nèi)存地址等。同時(shí),數(shù)組作為類(lèi)在Java 中實(shí)現(xiàn),良好地解決了數(shù)組訪(fǎng)問(wèn)越界這一C、C+中不作檢查的錯(cuò)誤。4.內(nèi)存管理在C中,程序員通過(guò)庫(kù)函數(shù)malloc()和free()來(lái)分配和釋放內(nèi)存,C+ 中則通過(guò)運(yùn)算符new和delete來(lái)分配和釋放內(nèi)存。再次釋放已釋放的內(nèi)存塊或 未被分配的內(nèi)存塊,會(huì)造成系統(tǒng)的崩潰;同樣,忘記釋放不再使用的內(nèi)存塊也 會(huì)逐漸耗盡系統(tǒng)資源。而在Java中,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,通過(guò)運(yùn)算符new 為它們分配內(nèi)存堆。通過(guò)new得到對(duì)象的處理權(quán),而實(shí)際分配給對(duì)象的內(nèi)存可能 隨程序運(yùn)行而

31、改變,Java對(duì)此自動(dòng)地進(jìn)行管理并且進(jìn)行垃圾收集,有效防止了由 于程序員的誤操作而導(dǎo)致的錯(cuò)誤,并且更好地利用了系統(tǒng)資源。5.數(shù)據(jù)類(lèi)型的支持在C、C+中,對(duì)于不同的平臺(tái),編譯器對(duì)于簡(jiǎn)單數(shù)據(jù)類(lèi)型如int,float 等分別分配不同長(zhǎng)度的字節(jié)數(shù),例如:int在IBMPC中為16位,在VAX-11中為 32位,這導(dǎo)致了代碼的不可移植性,但在Java中,對(duì)于這些數(shù)據(jù)類(lèi)型總是分 配固定長(zhǎng)度的位數(shù),如對(duì)int型,它總占32位,這就保證了Java的平臺(tái)無(wú)關(guān)性。6.類(lèi)型轉(zhuǎn)換在C、C+中,可以通過(guò)指針進(jìn)行任意的類(lèi)型轉(zhuǎn)換,常常帶來(lái)不安全性, 而Java中,運(yùn)行時(shí)系統(tǒng)對(duì)對(duì)象的處理要進(jìn)行類(lèi)型相容性檢查,以防止不安全的

32、轉(zhuǎn)換。7.頭文件C、C+中用頭文件來(lái)聲明類(lèi)的原型以及全局變量、庫(kù)函數(shù)等,在大的系 統(tǒng)中,維護(hù)這些頭文件是很困難的。而Java不支持頭文件,類(lèi)成員的類(lèi)型和訪(fǎng) 問(wèn)權(quán)限都封裝在一個(gè)類(lèi)中,運(yùn)行時(shí)系統(tǒng)對(duì)訪(fǎng)問(wèn)進(jìn)行控制,防止對(duì)私有成員的操作。同時(shí),Java中用import語(yǔ)句來(lái)與其它類(lèi)進(jìn)行通訊,以便使用它們的方法。8.結(jié)構(gòu)和聯(lián)合C、C+中的結(jié)構(gòu)和聯(lián)合中所有成員均為公有,這就帶來(lái)了安全性問(wèn)題。 Java中不包含結(jié)構(gòu)和聯(lián)合,所有的內(nèi)容都封裝在類(lèi)中。9.預(yù)處理C、C+中用宏定義來(lái)實(shí)現(xiàn)的代碼給程序的可讀性帶來(lái)了困難。在Java中不支持宏,它通過(guò)關(guān)鍵字final來(lái)聲明一個(gè)常量,以實(shí)現(xiàn)宏定義中廣泛使 用的常量定義1.1

33、.3 JAVA語(yǔ)言在網(wǎng)絡(luò)上的應(yīng)用Java程序可以獲取網(wǎng)絡(luò)上結(jié)點(diǎn)的圖象、聲音、HTML文檔及文本等資源,并可以對(duì)獲得的資源進(jìn)行處理。例如Java程序可以每隔一定時(shí)間讀取某結(jié)點(diǎn)提供的最新數(shù)據(jù),并以圖表的形式顯示出來(lái)。在編程處理上,一般先生成一個(gè)URL類(lèi)型的對(duì)象,然后用 Java中相應(yīng)的方法(method)獲取該對(duì)象所代表的資源。下面列舉一個(gè)Java從網(wǎng)絡(luò)上獲取圖象的的方法以說(shuō)明。Java Applet可以直接從網(wǎng)絡(luò)上結(jié)點(diǎn)獲取圖象并顯示出來(lái),Java提供了如下方法可以創(chuàng)建對(duì)應(yīng)于其他結(jié)點(diǎn)的圖象:getImage(new URL(字符串)其使用格式可有兩種:String url = “結(jié)點(diǎn)URL”;Im

34、age image;try image = getImage(new URL(url);catch(Exception e) System.out.println(“Cant open the URL “); 或URL imgur=null;Image image;try imgur=new URL(“結(jié)點(diǎn)URL “);catch (MalformedURLException e) System.out.println(“Cant open the URL “); image=getImage(imgur);前一種格式用“new URL(url)”生成 URL 對(duì)象, 并直接作為getImag

35、e的參數(shù),后一種格式先用“new URL(url)”生成一個(gè) URL對(duì)象,再傳給getImage,兩種格式本質(zhì)上是一樣的。 以上僅是Java在客戶(hù)端應(yīng)用的一些方面,目前,Java更廣泛的應(yīng)用是在服務(wù)器端。1.2 JavaBeans技術(shù)什么是JavaBeans?JavaBeans就是Java的可重用組件技術(shù)。ASP通過(guò)COM來(lái)擴(kuò)充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù) 處理或復(fù)雜計(jì)算分離出來(lái)成為獨(dú)立可重復(fù)利用的模塊。JSP通過(guò)JavaBeans實(shí)現(xiàn)了同樣的功能擴(kuò)充。JSP對(duì)于在Web應(yīng)用中集成JavaBeans 組件提供了完善的支持。這種支持不僅能縮短開(kāi)發(fā)時(shí)間(可以直接利用經(jīng)測(cè)試和可信

36、任的已有組件,避免了重復(fù)開(kāi)發(fā)),也為JSP應(yīng)用帶來(lái)了更多的可伸縮性。 JavaBeans組件可以用來(lái)執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫(kù)的交互以及數(shù)據(jù)提取等。在實(shí)際的JSP開(kāi)發(fā)過(guò)程中,讀者將會(huì)發(fā)現(xiàn),和傳統(tǒng)的ASP或 PHP頁(yè)面相比,JSP頁(yè)面將會(huì)是非常簡(jiǎn)潔的,由于JavaBeans開(kāi)發(fā)起來(lái)簡(jiǎn)單,又可以利用Java語(yǔ)言的強(qiáng)大功能,許多動(dòng)態(tài)頁(yè)面處理過(guò)程實(shí)際上被封 裝到了JavaBeans中。1.3 IP/TCP協(xié)議常識(shí)(1)IP、TCP協(xié)議的特點(diǎn):TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫(xiě), TCP/I

37、P是當(dāng)今網(wǎng)絡(luò)互聯(lián)的核心協(xié)議。TCP/IP協(xié)議的體系結(jié)構(gòu)共有四個(gè)層次,即應(yīng)用層、傳輸層、網(wǎng)絡(luò)互聯(lián)層和網(wǎng)絡(luò)接口層。IP協(xié)議的作用:第一,它是網(wǎng)絡(luò)層的協(xié)議,提供互聯(lián)網(wǎng)上數(shù)據(jù)傳輸?shù)慕y(tǒng)一格式。第二,提供不可靠的無(wú)連接的服務(wù)。第三,定義了互聯(lián)網(wǎng)上的傳輸數(shù)據(jù)的基本單元,提供了供路由選擇的信息,沒(méi)有差錯(cuò)校驗(yàn)和處理的機(jī)制。TCP協(xié)議的功能:差錯(cuò)控制可靠性、面向連接、分段(Segment)、端口號(hào)。TCP是傳輸控制協(xié)議,是面向連接的提供了一種可靠的傳輸服務(wù),它用三次握手和滑動(dòng)窗口機(jī)制來(lái)保證傳輸?shù)目煽啃?,及進(jìn)行流量控制。 TCP/IP協(xié)議具有以下特點(diǎn):1、 協(xié)議標(biāo)準(zhǔn)具有開(kāi)放性,其獨(dú)立于特定的計(jì)算機(jī)硬件及操作系統(tǒng),可

38、以免費(fèi)使用。2、 統(tǒng)一分配網(wǎng)絡(luò)地址,使得每個(gè)TCP/IP 設(shè)備在網(wǎng)絡(luò)中都具有唯一的IP地址。3、 實(shí)現(xiàn)了高層協(xié)議的標(biāo)準(zhǔn)化,能為用戶(hù)提供多種可靠的服務(wù)。(2)TCP/IP協(xié)議進(jìn)行傳輸數(shù)據(jù)傳輸?shù)倪^(guò)程:應(yīng)用程序?yàn)榱藗鬏敂?shù)據(jù)會(huì)調(diào)用TCP,將數(shù)據(jù)和對(duì)應(yīng)的參數(shù)傳給TCP,將TCP 數(shù)據(jù)包封裝在IP包內(nèi),通過(guò)網(wǎng)絡(luò)送給目的TCP。接收方TCP在接收到數(shù)據(jù)后通知上層應(yīng)用程序,TCP將保證接收數(shù)據(jù)的正確性。在實(shí)現(xiàn)TCP的主機(jī)上,TCP可以被看成是一個(gè)模塊,和文件系統(tǒng)區(qū)別不大,TCP 也可以調(diào)用一些操作系統(tǒng)的功能,TCP不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的任務(wù)由專(zhuān)門(mén)的設(shè)備驅(qū)動(dòng)模塊完成。TCP只是調(diào)用IP接口,向TCP提供

39、所有TCP需要的服務(wù)。(3)端口號(hào):有的時(shí)候,一個(gè)ip地址不能完整的標(biāo)識(shí)一臺(tái)服務(wù)器,這是應(yīng)為一臺(tái)物理性的計(jì)算機(jī)同時(shí)運(yùn)行著多個(gè)應(yīng)用程序,這就需要我們來(lái)區(qū)別同一臺(tái)機(jī)子上的不同的服務(wù),所以就在傳輸層和應(yīng)用層上設(shè)置接口,就是 端口。端口實(shí)際是一個(gè)16位長(zhǎng)的 地址,他的范圍是065535之間,其中01023是熟知端口,主要是給提供服務(wù)的應(yīng)用程序使用,這些端口是所有應(yīng)用進(jìn)程都只道的,102465535為一般端口,也稱(chēng)動(dòng)態(tài)端口、連接端口,用來(lái)隨時(shí)分配要求通信的個(gè)客戶(hù)端應(yīng)用程序。在數(shù)據(jù)傳輸過(guò)程中,各種服務(wù)器不斷的檢測(cè)分配給他的端口,一邊發(fā)現(xiàn)要求和他通信的客戶(hù)端。1.4 Socket的簡(jiǎn)介Socket,簡(jiǎn)稱(chēng)套接

40、字,用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶(hù)和服務(wù)器之間的連接。也就是說(shuō)網(wǎng)絡(luò)上兩個(gè)或兩個(gè)以上雙工方式通信的進(jìn)程之間總有一個(gè)連接,這個(gè)連接的端點(diǎn)成為套接字,套接字是在比較低的層次上通信的。具體的說(shuō):一個(gè)服務(wù)器應(yīng)用程序一般偵聽(tīng)一個(gè)特定的端口等待客戶(hù)端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶(hù)端和服武器端建立一個(gè)通信連接,在連接過(guò)程中,客戶(hù)端被分配一個(gè)本地端口與一個(gè)socket建立連接,客戶(hù)端通過(guò)寫(xiě)socket來(lái)通知服務(wù)器,以讀socket中的信息,類(lèi)似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來(lái)偵聽(tīng)原始端口上的其他連接請(qǐng)求。服務(wù)器也通過(guò)它的本地端口連接一個(gè)socket,通過(guò)讀寫(xiě)和客戶(hù)端通信。Socket程序的工作過(guò)程

41、:1、建立Socket連接:在通信開(kāi)始之前由通信雙方確認(rèn)身份,建立一條專(zhuān)用的虛擬連接通道。2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通道。3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。具體如下:服務(wù)器1服務(wù)器socket2監(jiān)聽(tīng)4接收5讀6寫(xiě)7關(guān)閉3客戶(hù)端etsocket6 寫(xiě)5 讀7關(guān)閉 三次握手:第一次握手:原主機(jī)發(fā)送一個(gè)帶有本次連接的序號(hào)的請(qǐng)求的一個(gè)數(shù)據(jù)幀第二次握手:目的主機(jī)收到請(qǐng)求后,如果同意連接,則發(fā)回一個(gè)帶有一個(gè)本次連接序號(hào)和源端機(jī)連接序列號(hào)的確認(rèn)。第三此握手:源端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,在向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。具體過(guò)程如下ACK=1第一次握手,

42、主機(jī)A向主機(jī)B發(fā)送連接請(qǐng)求第二次握手,主機(jī)B收到主機(jī)A的請(qǐng)求,向主機(jī)A回發(fā)一個(gè)確認(rèn),同時(shí)向主機(jī)A發(fā)送一個(gè)連接請(qǐng)求第三次握手,主機(jī)A收到主機(jī)B發(fā)送的數(shù)據(jù)包在向主機(jī)B發(fā)送一個(gè)確認(rèn)連接主機(jī)A 主機(jī)BACK=1,SYN=1,SEQ=aaaaaaaaaaSYN=1,SEQ= 2 規(guī)劃設(shè)計(jì)2.1 課題來(lái)源根據(jù)當(dāng)前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來(lái)越受各種網(wǎng)民所青睞。因此開(kāi)發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪(fǎng)問(wèn)量,同時(shí)可以留著訪(fǎng)客,更重要的是讓訪(fǎng)客透過(guò)聊天室實(shí)時(shí)的互相交流。而本人也學(xué)習(xí)過(guò)JAVA語(yǔ)言,對(duì)網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對(duì)JAVA語(yǔ)言的掌握程度,本人就決定以基于

43、JAVA聊天設(shè)計(jì)與實(shí)現(xiàn)為畢業(yè)設(shè)計(jì),希望通過(guò)這一次的能進(jìn)一步提高本人的網(wǎng)絡(luò)開(kāi)發(fā)編程的能力。2.2需求分析聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶(hù)端。簡(jiǎn)單分析一下兩個(gè)方面所要完成的任務(wù),對(duì)設(shè)計(jì)這個(gè)程序來(lái)說(shuō),等于完成了一半。首先來(lái)看一下服務(wù)器端的任務(wù):服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽(tīng)是否有客戶(hù)端連接或者斷開(kāi)連接(包括判斷沒(méi)有響應(yīng)的連接超時(shí))。服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶(hù)端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。以上就是服務(wù)器端最主要的兩個(gè)任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜。客戶(hù)端應(yīng)該完成的工作包括:與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。接收

44、來(lái)自服務(wù)器的信息。相對(duì)服務(wù)器而言,客戶(hù)端的任務(wù)更加簡(jiǎn)單,有了以上的簡(jiǎn)單分析,可以知道,解決上述四個(gè)問(wèn)題,即完成了該聊天系統(tǒng)的核心。3 系統(tǒng)分析與設(shè)計(jì)方案31 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn) 聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫(huà)設(shè)計(jì)等等,而聊天室只要提供滿(mǎn)足訪(fǎng)客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):1、實(shí)現(xiàn)思想在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶(hù)端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶(hù)交談,這是一個(gè)面向連接的通信過(guò)程。因此,

45、程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶(hù)端兩部分程序。2、服務(wù)器端工作流程服務(wù)器端通過(guò)socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè)Socket數(shù)組后(即設(shè)定了接受連接客戶(hù)的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進(jìn)行偵聽(tīng)listen()。如果有客戶(hù)端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空Socket,將客戶(hù)端地址賦給這個(gè)Socket。然后登錄成功的客戶(hù)就可以在服務(wù)器上聊天了。3、客戶(hù)端工作流程客戶(hù)端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過(guò)這個(gè)Socket來(lái)發(fā)送和接收數(shù)據(jù)就可以了。3 .2 聊天系統(tǒng)的設(shè)計(jì)步驟及功能模塊劃分聊天系統(tǒng)工作原理圖 3.3 聊天系統(tǒng)各功能模

46、塊(1)服務(wù)器程序模塊服務(wù)器與客戶(hù)間通過(guò)套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡(jiǎn)單,Java API為處理套接口的通信提供了一個(gè)類(lèi).Socket,使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)器采用多線(xiàn)程以滿(mǎn)足多用戶(hù)的請(qǐng)求,并通過(guò)創(chuàng)建一個(gè)ServerSocket對(duì)象來(lái)監(jiān)聽(tīng)來(lái)自客戶(hù)的連接請(qǐng)求,默認(rèn)端口為9527,然后無(wú)限循環(huán)調(diào)用accept()方法接受客戶(hù)程序的連接。服務(wù)器線(xiàn)程源碼:package qq.server;import java.io.IOException;import java.io.ObjectInputStream;import java.io.Ob

47、jectOutputStream;import .Socket;import java.util.*;import qq.dao.hibernate.IServiceDao;import qq.entity.*;public class ServerController private User user;private Socket s;private IServiceDao dao;private ObjectInputStream ois;private ObjectOutputStream oos;private OnlineUser onlineUser;public

48、 ServerController(Socket s) super();dao=ServerMainClass.userDao;this.s = s; public void handle() throws Exception ois=new ObjectInputStream(s.getInputStream();oos=new ObjectOutputStream(s.getOutputStream();onlineUser=new OnlineUser(ois,oos);while(true)Request req=(Request)ois.readObject();ois.read()

49、;RequestType type=req.getType();if(type.equals(RequestType.exit)exitHandle();break;else if(type.equals(RequestType.login)loginHandle(req);else if(type.equals(RequestType.register)registerHandle();else if(type.equals(RequestType.offline)offlineHandle();break;else if(type.equals(RequestType.changeInfo

50、rmation)changeInformationHandle();else if(type.equals(RequestType.modifypasswd)modifypasswdHandle(req);else if(type.equals(RequestType.sendMessage)sendMessageHandle(req);else if(type.equals(RequestType.receiveFile)receiveFileHandle(req);else if(type.equals(RequestType.sendFile)sendFileHandle(req);pr

51、ivate void modifypasswdHandle(Request req) Long id=Long.parseLong(req.getData(id);String oldpwd=req.getData(oldpwd);String newpwd=req.getData(newpwd);Response res=new Response(RequestType.modifypasswd);try dao.updatePwd(id, oldpwd, newpwd);res.setData(1);try oos.writeObject(res); catch (IOException

52、e) e.printStackTrace(); catch (RuntimeException e) try oos.writeObject(res); catch (IOException e1) e1.printStackTrace();private void changeInformationHandle() try User user=(User)ois.readObject();Response res=new Response(RequestType.changeInformation);try dao.updateUser(user);res.setData(1);/修改成功返回值帶一個(gè)整形值oos.writeObject(res);oos.flush(); catch (RuntimeException e) oos.writeObject(res);/失敗則返回值不帶參數(shù)oos.flush();e.printStackTrace(); catch (IOException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace();private void exit

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論