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

下載本文檔

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

文檔簡介

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

2、gt;<b>  姓 名: </b></p><p><b>  指導教師:</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)了很多非常不錯的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開發(fā)主要包括一個網(wǎng)絡(luò)聊天服務(wù)器程序和一個網(wǎng)絡(luò)聊天客戶程序兩個方面。前者通過Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務(wù)器建立連接,來進行客

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

5、a語言進行編寫,首先可在短時間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對初始原型系統(tǒng)進行不斷修正和改進,直到形成可行系統(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的特點 ……………………………………………………………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é)議常識 …………………………………………………………08</p><p>  1.4 Socket的簡介 ……………………………………………………………09</p><p>  規(guī)劃設(shè)計 ……………………………………………………

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

12、的總體設(shè)計要點 ………………………………………………12</p><p>  3.2 聊天系統(tǒng)的設(shè)計步驟及功能模塊劃分 ……………………………………12</p><p>  3.3 功能模塊結(jié)構(gòu)圖 …………………………………………………………13</p><p>  系統(tǒng)設(shè)計環(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è)計總結(jié) ………………………………………………

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

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

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

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

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

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

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

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

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

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

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

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

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

27、中增加了對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ò)為中心的計算時代,不支持HTML和Java,就意味著應(yīng)用程序的應(yīng)用范圍只能限于同質(zhì)的環(huán)境。</p><p>  Intranet正在成為企業(yè)信息系統(tǒng)最佳的解決方案。它的優(yōu)點表現(xiàn)在:便宜、易于使用和管理。用戶不管使用何種類型的機器和操作系統(tǒng),界面是統(tǒng)一的Web瀏覽器,而

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

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

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

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

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

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

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

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

37、它對象。</p><p><b>  4.魯棒性</b></p><p>  Java在編譯和運行程序時,都要對可能出現(xiàn)的問題進行檢查,以消除錯誤的產(chǎn)生。它提供自動垃圾收集來進行內(nèi)存管理,防止程序員在管理內(nèi)存時容易產(chǎn)生的錯誤。通過集成的面向?qū)ο蟮睦馓幚頇C制,在編譯時,Java提示出可能出現(xiàn)但未被處理的例外,幫助程序員正確地進行選擇以防止系統(tǒng)的崩潰。另外, Java在

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

39、</p><p><b>  6.體系結(jié)構(gòu)中立</b></p><p>  Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令,只要安裝了Java運行時系統(tǒng),Java程序就可在任意的處理器上運行。這些字節(jié)碼指令對應(yīng)于Java虛擬 機中的表示,Java解釋器得到字節(jié)碼后,對它進行轉(zhuǎn)換,使之能夠在不同的平 臺運行。</p><p><b>  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

55、;/p><p>  C、C++中用頭文件來聲明類的原型以及全局變量、庫函數(shù)等,在大的系 統(tǒng)中,維護這些頭文件是很困難的。而Java不支持頭文件,類成員的類型和訪 問權(quán)限都封裝在一個類中,運行時系統(tǒng)對訪問進行控制,防止對私有成員的操作。同時,Java中用import語句來與其它類進行通訊,以便使用它們的方法。</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++中用宏定義來實現(xiàn)的代碼給程序的可讀性帶來了困難。在Java中不支持宏,它通過關(guān)鍵字final來聲明一個常量,以實現(xiàn)宏定義中廣泛使 用的常量

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

58、Java從網(wǎng)絡(luò)上獲取圖象的的方法以說明。</p><p>  Java Applet可以直接從網(wǎng)絡(luò)上結(jié)點獲取圖象并顯示出來,Java提供了如下方法可以創(chuàng)建對應(yīng)于其他結(jié)點的圖象:</p><p>  getImage(new URL(字符串))</p><p>  其使用格式可有兩種:</p><p>  String url = “結(jié)點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é)點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 對象, 并直接作為getImage的參數(shù),后一種格式先用“new URL(url)”生成一個 URL對象,再傳給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來擴充復雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù) 處理或復雜計算分離出來成為獨立可重復利用的模塊。JSP通過JavaBeans實現(xiàn)了同樣的功能擴充。JSP對于在W

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

65、動態(tài)頁面處理過程實際上被封 裝到了JavaBeans中。</p><p>  1.3 IP/TCP協(xié)議常識</p><p>  (1)IP、TCP協(xié)議的特點:</p><p>  TCP/IP(Transmission Control Protocol/Internet Protocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫, TCP/IP是當今網(wǎng)絡(luò)互聯(lián)的核心協(xié)議。TCP

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

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

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

69、P的主機上,TCP可以被看成是一個模塊,和文件系統(tǒng)區(qū)別不大,TCP 也可以調(diào)用一些操作系統(tǒng)的功能,TCP不直接和網(wǎng)絡(luò)打交道,控制網(wǎng)絡(luò)的任務(wù)由專門的設(shè)備驅(qū)動模塊完成。TCP只是調(diào)用IP接口,向TCP提供所有TCP需要的服務(wù)。</p><p><b>  (3)端口號:</b></p><p>  有的時候,一個ip地址不能完整的標識一臺服務(wù)器,這是應(yīng)為一臺物理性的計算機

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

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

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

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

74、  服務(wù)器</b></p><p><b>  三次握手:</b></p><p>  第一次握手:原主機發(fā)送一個帶有本次連接的序號的請求的一個數(shù)據(jù)幀</p><p>  第二次握手:目的主機收到請求后,如果同意連接,則發(fā)回一個帶有一個本次連接序號和源端機連接序列號的確認。</p><p>  第三此握手:源

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

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

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

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

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

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

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

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

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

84、器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiā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);//修改成功返回值帶一個整形值</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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論