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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p>  基于JAVA的聊天系統的設計與實現</p><p>  學 院:機電工程學院</p><p>  專 業(yè):計算機科學與技術雙學位</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>  隨著互聯網的快速發(fā)展,網絡聊天工具已經作為一種重要的信息交流工具,受到越來越多的網民的青睞。目前,出現了很多非常不錯的聊天工具,其中應用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統開發(fā)主要包括一個網絡聊天服務器程序和一個網絡聊天客戶程序兩個方面。前者通過Socket套接字建立服務器,服務器能讀取、轉發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務器建立連接,來進行客

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

5、a語言進行編寫,首先可在短時間內建立系統應用原型,然后,對初始原型系統進行不斷修正和改進,直到形成可行系統</p><p>  關鍵詞:局域網 聊天 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 的網絡功能與編程 …………………

9、………………………………01</p><p>  1.1.1 JAVA概述…………………………………………………………………02</p><p>  1.1.2 JAVA的特點 ……………………………………………………………04</p><p>  1.1.3 JAVA語言在網絡上的應用 ……………………………………………07</p><p&

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

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

12、的總體設計要點 ………………………………………………12</p><p>  3.2 聊天系統的設計步驟及功能模塊劃分 ……………………………………12</p><p>  3.3 功能模塊結構圖 …………………………………………………………13</p><p>  系統設計環(huán)境與測試 …………………………………………………………26</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

37、它對象。</p><p><b>  4.魯棒性</b></p><p>  Java在編譯和運行程序時,都要對可能出現的問題進行檢查,以消除錯誤的產生。它提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。通過集成的面向對象的例外處理機制,在編譯時,Java提示出可能出現但未被處理的例外,幫助程序員正確地進行選擇以防止系統的崩潰。另外, Java在

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

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

40、7.可移植性</b></p><p>  與平臺無關的特性使Java程序可以方便地被移植到網絡上的不同機器。 同時,Java的類庫中也實現了與不同平臺的接口,使這些類庫可以移植。另外,Java編譯器是由Java語言實現的,Java運行時系統由標準C實現,這使得Java 系統本身也具有可移植性。</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é)碼的設計使之能很容易地直接轉換成對應于特定CPU的機器碼,從而得到較高的性能。</p><p&g

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

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

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

45、,而不僅僅是動畫的顯示和聲音的播放。</p><p> ?。ㄈ┴S富的類庫Java提供了大量的類以滿足網絡化、多線程、面向對象系統的需要。</p><p>  1.語言包提供的支持包括字符串處理、多線程處理、例外處理、數學函 數處理等,可以用它簡單地實現Java程序的運行平臺。</p><p>  2.實用程序包提供的支持包括哈希表、堆棧、可變數組、時間和日期等。&

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

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

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

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

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

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

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

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

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

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

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

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

58、Java從網絡上獲取圖象的的方法以說明。</p><p>  Java Applet可以直接從網絡上結點獲取圖象并顯示出來,Java提供了如下方法可以創(chuàng)建對應于其他結點的圖象:</p><p>  getImage(new URL(字符串))</p><p>  其使用格式可有兩種:</p><p>  String url = “結點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(“結點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的參數,后一種格式先用“new URL(url)”生成一個 URL對象,再傳給getImage,兩種格式本質上是一樣的。 </p><p>  以上僅是Java在客

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

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

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

66、/IP協議的體系結構共有四個層次,即應用層、傳輸層、網絡互聯層和網絡接口層。</p><p>  IP協議的作用:第一,它是網絡層的協議,提供互聯網上數據傳輸的統一格式。第二,提供不可靠的無連接的服務。第三,定義了互聯網上的傳輸數據的基本單元,提供了供路由選擇的信息,沒有差錯校驗和處理的機制。</p><p>  TCP協議的功能:差錯控制——可靠性、面向連接、分段(Segment)、端口

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

68、lt;/p><p>  實現了高層協議的標準化,能為用戶提供多種可靠的服務。</p><p>  (2)TCP/IP協議進行傳輸數據傳輸的過程:</p><p>  應用程序為了傳輸數據會調用TCP,將數據和對應的參數傳給TCP,將TCP 數據包封裝在IP包內,通過網絡送給目的TCP。接收方TCP在接收到數據后通知上層應用程序,TCP將保證接收數據的正確性。在實現TC

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

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

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

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

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

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

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

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

77、的能進一步提高本人的網絡開發(fā)編程的能力。</p><p><b>  2.2需求分析</b></p><p>  聊天系統不外乎兩個方面,服務器端和客戶端。簡單分析一下兩個方面所要完成的任務,對設計這個程序來說,等于完成了一半。首先來看一下服務器端的任務:</p><p> ?。保掌鞫藨斀⒁粋€ServerSocket,并且不斷進行偵聽是

78、否有客戶端連接或者斷開連接(包括判斷沒有響應的連接超時)?! 。玻掌鞫藨斒且粋€信息發(fā)送中心,所有客戶端的信息都傳到服務器端,由服務器端根據要求分發(fā)信息。</p><p>  以上就是服務器端最主要的兩個任務。不難看出,服務器端的任務并不復雜。</p><p>  客戶端應該完成的工作包括:</p><p>  1.與服務器端建立通信通道,向服務器端發(fā)送信息。

79、  2.接收來自服務器的信息。</p><p>  相對服務器而言,客戶端的任務更加簡單,有了以上的簡單分析,可以知道,解決上述四個問題,即完成了該聊天系統的核心。</p><p>  3 系統分析與設計方案</p><p>  3.1 聊天系統的總體設計要點 聊天系統的設計跟普通網站設計有著許多不同的地方,普通網站設計所考慮的因素,例如,普通網站需要對布

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

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

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

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

84、器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認端口為9527,然后無限循環(huán)調用accept()方法接受客戶程序的連接。</p><p><b>  服務器線程源碼:</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);//失敗則返回值不帶參數</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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論