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

下載本文檔

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

文檔簡介

1、<p>  畢 業(yè) 設 計(論 文)</p><p>  基于JAVA的局域網(wǎng)聊天程序設計與實現(xiàn)</p><p> 學生姓名:王若曦</p><p> 學 號:0515031110</p><p> 所在系部:信息工程系</p><p> 專業(yè)班級:05gb計算1班</p><p&g

2、t; 指導教師:謝芳 講師</p><p> 日 期:二○○九年六月</p><p><b>  摘 要</b></p><p>  隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡聊天工具作為一種交流工具,已經(jīng)受到網(wǎng)民的青睞。目前,出現(xiàn)了很多功能強大的聊天工具,其中應用比較廣泛的有騰訊QQ、MSN-Messager等等。</p><p

3、>  即時通訊軟件,是每一個上網(wǎng)用戶都需要的工具,它除了能夠讓您迅速地在網(wǎng)上找到自己的朋友和伙伴之外,還可以實時交談和傳遞信息,截止到目前,全球約有近3億多人使用即時軟件,正因為即時通訊軟件擁有數(shù)以億計的用戶和增長的市場,所以各個公司都盯上了這個最大的市場,一時間,即時通訊市場硝煙四起。</p><p>  對等網(wǎng)絡(peer-to-peer,簡稱P2P),應用最初出現(xiàn)時和現(xiàn)在并不相同。事實上可以認為它是若

4、干不同技術以及流行趨勢相結合的產(chǎn)物。以下是導致P2P技術發(fā)展最重要的趨勢:首先,一些新技術與軟件工程的結合,形成了一種將工作分散的趨勢。P2P計算正是這種分散工作趨勢的結果。其次,在企業(yè)應用集成等因素的驅(qū)動下,過去十年漸漸形成從集中的單機系統(tǒng)轉向分布式系統(tǒng)。然而隨著互聯(lián)網(wǎng)的發(fā)展,全面的分布式計算也就成為一種迫切需求。</p><p>  關鍵詞:局域網(wǎng) 聊天 P2P java</p><

5、p><b>  Abstract</b></p><p>  With the development of the Internet,the chat tool as a communication tool, has been popularly accepted by netizens of all ages. At present, there are many powerfu

6、l chat tools, of which Tencent QQ, MSN-Messager are much more prevalent.</p><p>  Instant messaging software is necessary for every one who connects to the internet, which can not only provide you a prompt w

7、ay to find friends and partners online, but can provide you the convenience of internet relay chat and information delivering. Up to now, there are about 300 million people using real-time software all over the world. As

8、 more and more corporations have focused on this market with growing potential, which has hundreds of millions of uses, the competitions among these corpor</p><p>  The initial application of peer-to-peer ne

9、twork (peer-to-peer, referred to as P2P) is not the same as it is now. In fact, it can be regarded as a combination of different technologies and fashion trends. Below are the most important trends that have led the deve

10、lopment of P2P technology: First of all, the integration of software engineering and new technologies led to a working dispersion trend. As a result, P2P computing was born. Then, in the past decade, it has turned fro m

11、a single centraliz</p><p>  Keywords: LAN chat P2P java</p><p><b>  目 錄</b></p><p><b>  摘 要i</b></p><p>  Abstractii</p><p&

12、gt;<b>  1緒論1</b></p><p>  1.1JAVA的網(wǎng)絡功能與編程1</p><p>  1.1.1 JAVA概述1</p><p>  1.1.2 JAVA的特點3</p><p>  1.1.3 JAVA語言在網(wǎng)絡上的應用6</p><p>  1.2

13、 JavaBeans技術6</p><p>  1.3 IP/TCP協(xié)議常識6</p><p>  1.4 Socket的簡介7</p><p>  1.5 對等網(wǎng)絡8</p><p>  1.5.1 對等網(wǎng)絡發(fā)展歷史8</p><p>  1.5.2 對等網(wǎng)絡的概念9</p>&l

14、t;p>  1.5.3 對等網(wǎng)絡的主要系統(tǒng)結構9</p><p>  2 JAVAqq局域網(wǎng)聊天程序的需求分析13</p><p>  2.1 課題來源13</p><p>  2.2 需求分析13</p><p>  3 JAVAqq局域網(wǎng)聊天程序的系統(tǒng)分析與設計15</p><p>  3

15、.1 JAVAqq局域網(wǎng)聊天程序的總體設計要點15</p><p>  3.2 JAVAqq局域網(wǎng)聊天程序的設計步驟及功能模塊劃分15</p><p>  3.3 JAVAqq局域網(wǎng)聊天程序各功能模塊16</p><p>  4 JAVAqq局域網(wǎng)聊天程序的設計與實現(xiàn)24</p><p>  4.1 開發(fā)環(huán)境工具24<

16、;/p><p>  4.2 硬件環(huán)境24</p><p>  4.3 聊天系統(tǒng)功能模塊的測試24</p><p><b>  結 論28</b></p><p><b>  致 謝30</b></p><p><b>  參考文獻31</

17、b></p><p>  附錄 A 程序源代碼32</p><p><b>  緒論</b></p><p>  隨著互聯(lián)網(wǎng)逐步普及,互聯(lián)網(wǎng)技術的逐步提高。人們的工作和生活也越來越離不開網(wǎng)絡,而即時聊天是人們最常見、最直接的online交流的方式。本系統(tǒng)以聊天功能為主,通過網(wǎng)絡為用戶提供一個人際交流的平臺。本文所介紹的網(wǎng)絡聊天系統(tǒng)是

18、基于JAVA編程語言開發(fā)設計的,其主要特性是能動態(tài)、實時的完成消息的傳遞,且具有高效的交互性,能更有效的處理客戶請求,其運行時所需環(huán)境及工作流程和各模塊的工作原理將在本文依次介紹,并且文中提供了全部程序源代碼。</p><p>  JAVA的網(wǎng)絡功能與編程</p><p>  1.1.1 JAVA概述</p><p>  Java是一個由Sun公司開發(fā)的新一代高級

19、編程語言。它可在各式各樣不同機器、不同操作平臺的網(wǎng)絡環(huán)境中開發(fā)軟件。不論你使用的是哪種WEB瀏覽器,哪種計算機,哪種操作系統(tǒng),只要WEB瀏覽器上面注明了“支持Java”,并且裝有JAVA控件,你就可以看到生動的主頁。Java正在逐步成為Internet應用中最主要的開發(fā)語言,它徹底改變了軟件開發(fā)模式,帶來了自PC機以來又一次革命,為飛速發(fā)展的網(wǎng)絡世界增添了新的動力。</p><p>  Sun的Java語言開發(fā)小

20、組成立于1991年,Sun內(nèi)部人員把這個項目稱為Green。該小組的領導人是James Gosling,是一位非常杰出的程序員。在研發(fā)過程中,Gosling深刻體會到消費類電子產(chǎn)品和工作站產(chǎn)品的差異:消費類電子產(chǎn)品要求可靠性高、費用低、標準化、使用簡單。</p><p>  Gosling在開始寫Java時,并不局限于擴充語言機制本身,更注重于語言所運行的軟硬件環(huán)境。他要建立一個系統(tǒng),運行于一個巨大的、分布的、異

21、構的網(wǎng)格環(huán)境中,完成各設備之間的通信與協(xié)同工作。Gosling在設計中采用了虛機器碼方式,即Java語言編譯后產(chǎn)生虛擬機,虛擬機運行在一個解釋器上,每一個操作系統(tǒng)均有一個解釋器。這樣一來,Java就成了跨平臺語言。</p><p>  Patrick Naughton也是Sun公司的技術骨干,曾經(jīng)是OpenWindows項目的負責人。當Naughton加入該小組后,工作進展神速。經(jīng)過17個月的奮戰(zhàn),整個系統(tǒng)勝利完

22、成。它是由一個操作系統(tǒng)、一種語言、一個用戶界面、一個新的硬件平臺、三塊專用芯片構成的。通常情況下,這樣的項目在Sun公司要75個人干三年。項目完成后,在Sun公司內(nèi)部做了一次展示和鑒定,觀眾的反應是:在各個方面都采用了嶄新的、大膽的技術。</p><p>  到了1994年,internet已如火如荼地發(fā)展起來。Gosling意識到internet需要一個瀏覽器,它不依賴于任何平臺,它應是一種實時性較高、可靠安全

23、、又有交互功能的瀏覽器。于是Gosling決定用Java開發(fā)一個新的Web瀏覽器。</p><p>  Java雖出現(xiàn)的時間不長,但已完全被業(yè)界接受,IBM、Apple、Silicon Graphics、HP、Oracle、Toshiba、Netscape和Microsoft等大公司已經(jīng)購買了Java的許可證。Microsoft還在其Web瀏覽器Explorer3.0版中增加了對Java的支持。</p>

24、;<p>  眾多的軟件開發(fā)商也開發(fā)了許多支持Java的軟件產(chǎn)品。如:Borland公司的基于Java的快速應用程序開發(fā)環(huán)境Latte;Metrowerks公司和Natural Intelligence公司分別開發(fā)的基于Machintosh的Java開發(fā)工具;Sun公司的Java開發(fā)環(huán)境JavaWorkshop;Microsoft也開發(fā)出系列Java產(chǎn)品。數(shù)據(jù)庫廠商如Sybase,Oracle等都在開發(fā)支持HTML和Jav

25、a的CGI。</p><p>  Intranet正在成為企業(yè)信息系統(tǒng)最佳的解決方案。它的優(yōu)點表現(xiàn)在:便宜、易于使用和管理。用戶不管使用何種類型的機器和操作系統(tǒng),界面是統(tǒng)一的Web瀏覽器,而數(shù)據(jù)庫、Web頁面、應用程序則存在WEB服務器上。</p><p>  未來的計算方式,每個HomePage的實質(zhì)是一個多媒體應用程序,這些程序用Java來開發(fā)。Java應用程序運行在不同的機器、不同的

26、操作系統(tǒng)之上,甚至于電冰箱、烤面包箱、防盜電子設備之中,用Internet把所有的電子設備連接起來,通過TCP/IP進行信息的交流。</p><p>  Java的出現(xiàn)是計算機信息交換的一個重要里程碑。在單機時代,程序進程之間靠共享存儲進行變量交換;在網(wǎng)絡時代,運行在不同主機上的程序按網(wǎng)絡協(xié)議進行二進制字符流交換,語義由交換雙方維護;在Java時代,運行在網(wǎng)絡上的程序進程交換的是小應用程序。</p>

27、<p>  隨著Internet的崛起、Java的誕生,巨型而臃腫的應用軟件開始向小型化發(fā)展,由眾多生活在Internet上的小應用程序相互協(xié)作完成信息的處理與傳遞。Java會加速應用軟件的小型化、網(wǎng)絡化的趨勢。隨著互聯(lián)網(wǎng)的發(fā)展,軟件必然是面向大眾的,薄利多銷將是網(wǎng)絡應用軟件的重要特點。信息的價值在于使用和共享,Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word將演化成為Web寫作工具,Excel則將演

28、化成Web電子表格。</p><p>  1.1.2 JAVA的特點</p><p> ?。ㄒ唬㎎AVA的主要特點</p><p>  Java語言有下面一些特點:簡單、面向?qū)ο?、分布式、解釋?zhí)行、 安全、體系結構中立、可移植、高性能、多線程以及動態(tài)性。</p><p><b>  1.簡單</b></p>

29、<p>  Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務。Java略去了運算符重載、多重繼承等模糊的概念,且通過實現(xiàn)自動垃圾收集大大簡化了程序設計者的內(nèi)存管理工作。</p><p><b>  2.面向?qū)ο?lt;/b></p><p>  Java語言的設計集中于對象及其接口,它提供了簡單的類機制以及動態(tài)的接口模型,實現(xiàn)了模塊化和

30、信息隱藏;而類則提供了一類對象的原型,并且通過繼承機制,子類可以使用父類所提供的方法,實現(xiàn)了代碼的復用。</p><p><b>  3.分布性</b></p><p>  Java是面向網(wǎng)絡的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡上很方便地訪問其它對象。</p><p><b>  4.安全性&

31、lt;/b></p><p>  用于網(wǎng)絡、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針, 一切對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),這樣就防止程序員使用 “特洛伊”木馬等欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產(chǎn)生的錯誤。</p><p><b>  5.體系結構中立</b></p><p>  Ja

32、va解釋器生成與體系結構無關的指令,Java程序可在任意的處理器上運行。這些指令對應于Java虛擬機中的表示,Java解釋器得到字節(jié)碼后,對它進行轉換,使之能夠在不同的平臺運行。</p><p><b>  6.可移植性</b></p><p>  與平臺無關的特性使Java程序可以方便地被移植到網(wǎng)絡的不同機器上。另外,Java編譯器是由Java語言實現(xiàn)的,Java運

33、行時系統(tǒng)由標準C實現(xiàn),這使得Java 系統(tǒng)本身也具有可移植性。</p><p><b>  7.解釋執(zhí)行</b></p><p>  Java解釋器直接對Java字節(jié)碼進行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時信息,使得連接過程更加簡單。</p><p><b>  8.高性能</b></p><p>

34、;  和其它解釋執(zhí)行的語言如BASIC不同,Java字節(jié)碼的設計使之能很容易地直接轉換成對應于特定CPU的機器碼,從而得到較高的性能。</p><p><b>  9.多線程</b></p><p>  多線程機制使應用程序能夠并行執(zhí)行,而且同步機制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機制

35、,這樣就很容易地實現(xiàn)網(wǎng)絡上的實時交互行為。</p><p><b>  10.動態(tài)性</b></p><p>  Java的設計使它適合于一個不斷發(fā)展的環(huán)境。在類庫中可以自由地加入 新的方法和實例變量而不會影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。</p><p> ?。ǘ┴S富的類庫J

36、ava提供了大量的類以滿足網(wǎng)絡化、多線程、面向?qū)ο笙到y(tǒng)的需要。</p><p>  1.語言包提供的支持包括字符串處理、多線程處理、例外處理、數(shù)學函數(shù)處理等,可以用它簡單地實現(xiàn)Java程序的運行平臺。</p><p>  2.實用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時間和日期等。</p><p>  3.輸入輸出包用統(tǒng)一的流模型來實現(xiàn)所有格式的I/O,包括文

37、件系統(tǒng)、 網(wǎng)絡、輸入</p><p>  4.低級網(wǎng)絡包用于實現(xiàn)Socket編程。</p><p>  5.抽象圖形用戶接口包實現(xiàn)了不同平臺的計算機的圖形用戶接口部件, 包括窗口、菜單、滾動條、對話框等,使得Java可以移植到不同平臺的機器。</p><p>  6.網(wǎng)絡包支持Internet的TCP/IP協(xié)議,提供了與Internet的接口。它支持URL連接,WE

38、B即時訪問,并且簡化了C/S模型的程序設計。</p><p>  1.1.3 JAVA語言在網(wǎng)絡上的應用</p><p>  Java程序可以獲取網(wǎng)絡上結點的圖象、聲音、HTML文檔及文本等資源,并可以對獲得的資源進行處理。在編程處理上,一般先生成一個URL類型的對象,然后用 Java中相應的方法獲取該對象所代表的資源。 </p><p>  1.2 JavaB

39、eans技術</p><p>  JavaBeans就是Java的可重用組件技術。JSP通過JavaBeans來擴充復雜的功能,如文件上載、發(fā)送email以及將業(yè)務處理或復雜計算分離出來成為獨立可重復利用的模塊。JSP對于在Web應用中集成JavaBeans 組件提供了完善的支持。這種支持不僅能縮短開發(fā)時間,也為JSP應用帶來了更多的可伸縮性。 JavaBeans組件可以用來執(zhí)行復雜的計算任務,或負責與數(shù)據(jù)庫的交

40、互以及數(shù)據(jù)提取等。由于JavaBeans開發(fā)起來簡單,又可以利用Java語言的強大功能,許多動態(tài)頁面處理過程實際上被封裝到了JavaBeans中。</p><p>  1.3 IP/TCP協(xié)議常識</p><p>  (1)IP/TCP協(xié)議的特點:</p><p>  TCP/IP(Transmission Control Protocol/Internet Pr

41、otocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫, TCP/IP是當今網(wǎng)絡互聯(lián)的核心協(xié)議。TCP/IP協(xié)議的體系結構共有四個層次,即應用層、傳輸層、網(wǎng)絡互聯(lián)層和網(wǎng)絡接口層。</p><p>  IP協(xié)議的作用:第一,它是網(wǎng)絡層的協(xié)議,提供互聯(lián)網(wǎng)上數(shù)據(jù)傳輸?shù)慕y(tǒng)一格式。第二,提供不可靠的無連接的服務。第三,定義了互聯(lián)網(wǎng)上的傳輸數(shù)據(jù)的基本單元,提供了供路由選擇的信息,沒有差錯校驗和處理的機制。</p><

42、;p>  TCP/IP協(xié)議具有以下特點:</p><p>  協(xié)議標準具有開放性,其獨立于特定的計算機硬件及操作系統(tǒng),可以免費使用。</p><p>  統(tǒng)一分配網(wǎng)絡地址,使得每個TCP/IP 設備在網(wǎng)絡中都具有唯一的IP地址。</p><p>  實現(xiàn)了高層協(xié)議的標準化,能為用戶提供多種可靠的服務。</p><p>  (2)TCP/

43、IP協(xié)議進行傳輸數(shù)據(jù)傳輸?shù)倪^程:</p><p>  應用程序為了傳輸數(shù)據(jù)會調(diào)用TCP,將數(shù)據(jù)和對應的參數(shù)傳給TCP,將TCP 數(shù)據(jù)包封裝在IP包內(nèi),通過網(wǎng)絡送給目的TCP。接收方TCP在接收到數(shù)據(jù)后通知上層應用程序,TCP將保證接收數(shù)據(jù)的正確性。TCP調(diào)用IP接口,向TCP提供所有TCP需要的服務。</p><p><b>  (3)端口號:</b></p&

44、gt;<p>  有的時候,一個IP地址不能完整的標識一臺服務器,這是應為一臺物理性的計算機同時運行著多個應用程序,這就需要我們來區(qū)別同一臺機子上的不同的服務,所以就在傳輸層和應用層上設置接口,就是端口。端口實際是一個16位長的 地址,他的范圍是0~65535之間,其中0~1023是熟知端口,主要是給提供服務的應用程序使用,這些端口是所有應用進程都只道的,1024~65535為一般端口,也稱動態(tài)端口、連接端口,用來隨時分配

45、要求通信的客戶端應用程序。在數(shù)據(jù)傳輸過程中,各種服務器不斷的檢測分配給他的端口,一邊發(fā)現(xiàn)要求和他通信的客戶端。 </p><p>  1.4 Socket的簡介</p><p>  Socket,簡稱套接字,用于實現(xiàn)網(wǎng)絡上客戶和服務器之間的連接。也就是說網(wǎng)絡上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字,套接字是在比較低的層次上通信的。</p>

46、<p>  具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服武器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個Socket建立連接,客戶端通過寫Socket來通知服務器,以讀Socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個socket,通過讀寫和客戶端通信。<

47、;/p><p>  Socket程序的工作過程:</p><p>  1、建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。</p><p>  2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進行通道。</p><p>  3、關閉:通信結束時,再將所建的虛擬連接拆除。</p><p><

48、;b>  具體如下:</b></p><p>  Socket套接字原理圖</p><p><b>  1.5 對等網(wǎng)絡</b></p><p>  1.5.1 對等網(wǎng)絡發(fā)展歷史</p><p>  對等網(wǎng)絡(peer to peer,簡稱P2P)應用最初出現(xiàn)時和現(xiàn)在并不相同。事實上可以認為它是若干

49、不同技術的產(chǎn)物。下面是兩個導致P2P技術發(fā)展最重要的趨勢:</p><p>  首先是某些新技術與軟件工程結合,形成一種將工作分散的趨勢。P2P計算正是這種分散工作趨勢的必然結果。</p><p>  其次從工程的角度看來,在企業(yè)應用集成等因素的驅(qū)動下,過去十年漸漸形成一種從集中系統(tǒng)轉向分布式系統(tǒng)的趨勢。</p><p>  對功能強大的網(wǎng)絡計算機的需求以及昂貴的帶

50、寬開銷,是對這種趨勢影響最大的兩個因素。為了提高效率,P2P計算由許多互相連接的同位體組成。</p><p>  除了技術方面之外的社會因素也是一個重要原因。毫無疑問,人們現(xiàn)在對P2P計算技術的熱切關注起源于Napster,Scour,Gnutella,以及即時通訊類的相關產(chǎn)品。這些產(chǎn)品提供了所謂的“killer apps”功能,能夠?qū)2P技術中的一部分下放到客戶端手中。這種第一手的體驗,使得人們越來越關注P2

51、P技術。</p><p>  1.5.2 對等網(wǎng)絡的概念</p><p>  目前,業(yè)界對P2P的定義還沒有一個標準的說法,Intel將P2P技術定義為“通過系統(tǒng)間的直接交換達成計算機資源與信息的共享”。IBM則把它看成是由若干互聯(lián)協(xié)作的計算機構成的系統(tǒng)并具備如下若干特性之一:系統(tǒng)依存于邊緣化設備的主動協(xié)作,每個成員直接從其他成員而不是從服務器的參與中受益;系統(tǒng)中成員同時扮演服務器與客戶

52、端的角色;系統(tǒng)應用的用戶能夠意識到彼此的存在而構成一個虛擬或?qū)嶋H的群體。</p><p>  簡單地說,P2P技術是一種用于不同PC用戶之間、不經(jīng)過中繼設備直接交換數(shù)據(jù)或服務的技術。它打破了傳統(tǒng)的C/S模式,在對等網(wǎng)絡中,每個節(jié)點的地位都是相同的,具備客戶端和服務器雙重特性,可以同時作為服務使用者和服務提供者。</p><p>  1.5.3 對等網(wǎng)絡的主要系統(tǒng)結構</p>

53、<p>  PZP模式的變化經(jīng)歷了集中式、分布式和混合式3個階段。</p><p>  (1)集中式對等網(wǎng)絡</p><p>  集中式P2P模式由一個中心服務器來負責記錄共享信息以及反饋查詢;每一個對等實體要對它所需共享的信息以及進行的通信負責。這種形式具有中心化的特點,但是它不同于傳統(tǒng)意義上的C/S模式。集中式P2P模式則是所有網(wǎng)上提供的資料都存放在提供該資料的客戶機上,服

54、務器上只保留索引信息,此外服務器與對等實體以及對等實體之間都具有交互能力。</p><p>  集中目錄式PZP模型還存在很多問題,主要表現(xiàn)為:</p><p>  中央服務器的癱瘓將導致整個網(wǎng)絡的崩潰,可靠性和安全性較低:</p><p>  隨著網(wǎng)絡規(guī)模的擴大,中央目錄服務器維護和更新的費用將急劇增加,所需成本過高;</p><p>  

55、中央服務器的存在引起共享資源在版權問題上的糾紛,這也是直接導致Napster破產(chǎn)的原因;</p><p>  缺乏有效的強制共享機制,資源可用性差。</p><p>  集中式P2P可提供中心服務器目錄檢索、管理服務和標準的點到點通信,具有高效的檢索和低效的交換服務的特點。集中式P2P對小型網(wǎng)絡而言在管理和控制方面占有一定的優(yōu)勢,但對大型網(wǎng)絡并不適合。</p><p&g

56、t;  (2)分布式對等網(wǎng)絡</p><p>  在分布式P2P中,對等機通過與相鄰對等機之間的連接遍歷整個網(wǎng)絡體系。每個對等機在功能上都是相似的,并沒有專門的服務器,而對等機必須依靠它們所在的分布網(wǎng)絡來查找文件和定位其他對等機。</p><p>  以Gnutella網(wǎng)絡為例,一臺新對等機首先通過訪問某特殊站點提供的主機緩存服務機制來得到一臺活動對等機地址,通過與它建立一個連接將自己接入

57、Gnutella網(wǎng)絡;接著,該新對等機主動探查網(wǎng)絡中的其它對等機,找到與之相鄰的對等機節(jié)點,在進行文件查找時,該對等機首先向與之相鄰的所有活動對等點發(fā)送一個查詢描述符Query,在其他對等機接收到該查詢描述符后,檢查本地是否有符合查詢請求的文件內(nèi)容,如果有,則按查詢描述符的發(fā)送路徑返回一個查詢響應描述符QueryHit,無論本地是否存在符合查詢請求的文件內(nèi)容,其他對等機都會將該查詢包通過擴散方式繼續(xù)在網(wǎng)絡中傳遞,直至查詢包中TTL屬性值

58、遞減為0時才停止繼續(xù)轉發(fā);一旦定位了響應查詢文件的對等機之后,就與響應對等機建立TCP連接,通過HTTP協(xié)議從響應對等機中下載自己查詢的文件。文件的傳輸不再經(jīng)過Gnutella網(wǎng)絡進行。</p><p>  分布式對等網(wǎng)絡模型也存在很多弊端,主要表現(xiàn)在以下方面:</p><p>  搜索請求要經(jīng)過整個網(wǎng)絡或者至少是一個很大的范圍才能得到結果,因此,這種模式占用很多帶寬,而且需要花費很長時間

59、才能有返回結果。</p><p>  隨著網(wǎng)絡規(guī)模的擴大,通過擴散方式定位對等點及查詢信息的方法將會造成網(wǎng)絡流量增加,導致網(wǎng)絡擁塞,最終使Gnutella網(wǎng)絡被分片,因此,網(wǎng)絡的可擴展性不好,不適合大型網(wǎng)絡。</p><p>  純分布式的P2P模式很難被企業(yè)所利用,因為它缺少對網(wǎng)絡上的用戶節(jié)點數(shù)以及對他們提供的資源的一個總體把握。</p><p>  安全性不高,

60、易遭受惡意攻擊。</p><p>  這種無中心、純分布式系統(tǒng)的特點是:它不再是簡單的點到點通信,而是更高效、更復雜的網(wǎng)絡通信。</p><p>  (3)混合P2P網(wǎng)絡</p><p>  集中式P2P有利于網(wǎng)絡資源的快速檢索,并且只要服務器能力足夠強大就可以無限擴展,但是其中心化的模式容易遭到直接的攻擊:分布式P2P解決了抗攻擊問題,但是又缺乏快速搜索和可擴展性

61、?;旌鲜絇2P結合了集中式和分布式P2P的優(yōu)點,在設計思想和處理能力上都得到了進一步的優(yōu)化。它在分布式模式的基礎上,將用戶節(jié)點按能力進行分類,使某些節(jié)點擔任特殊的任務。</p><p>  這些節(jié)點共分為3種:</p><p>  用戶節(jié)點:普通節(jié)點,它不具有任何特殊的功能。</p><p>  搜索節(jié)點:處理搜索請求,從它們的孩子節(jié)點中搜索文件列表,這些節(jié)點必須有

62、128 kbit/s RAM的網(wǎng)絡連接速度,建議使用高性能的處理器。</p><p>  索引節(jié)點:連接速度快、內(nèi)存充足的節(jié)點可以作為索引節(jié)點。索引節(jié)點用于保存可以利用的搜索節(jié)點信息,并搜集狀態(tài)信息,維護網(wǎng)絡結構信息。</p><p>  在第三代P2P的軟件體系結構中,采用了混合式P2P。這種模式的關鍵之一是引入了索引節(jié)點,索引節(jié)點不會直接連接到有版權的資料上,它就像搜索引擎一樣,只是搜

63、索和所需資料相關的地址,至于用戶到底連接下載了什么內(nèi)容則和它無關。這種模式的關鍵之二是引入搜索節(jié)點,搜索節(jié)點管理著所屬用戶的文件列表。用戶節(jié)點通過索引節(jié)點獲得搜索節(jié)點信息,之后用戶節(jié)點就與獲得的搜索節(jié)點相連,每一次查詢都通過該搜索節(jié)點進行。當用戶發(fā)出搜索請求后,如果和用戶節(jié)點直接相連的搜索節(jié)點查詢結果達到100個就停止;如果不足100個,就向相鄰的搜索節(jié)點發(fā)出請求,如果查詢結果還不夠,就繼續(xù)向外快速發(fā)散,直到所有的搜索節(jié)點都被搜索到為止

64、。若所有的搜索節(jié)點都被訪問過,就意味著整個網(wǎng)絡上的節(jié)點都被搜索到了,其速度要比純P2P模式快得多。</p><p>  2 JAVAqq局域網(wǎng)聊天程序的需求分析</p><p><b>  2.1 課題來源</b></p><p>  根據(jù)當前網(wǎng)絡的需求,網(wǎng)絡聊天越來越受各種網(wǎng)民所青睞。因此開發(fā)網(wǎng)絡聊天是相當有必要,而且在網(wǎng)站內(nèi)增加聊天功能

65、,它不僅可以提高網(wǎng)站的訪問量,同時可以留著訪客,更重要的是讓訪客透過聊天室實時的互相交流?,F(xiàn)在Intranet網(wǎng)絡在企業(yè)中越來越流行,不需要連入廣域網(wǎng)就實現(xiàn)實時消息傳遞的系統(tǒng)由于其優(yōu)越的性能受到企業(yè)的青睞。本人原來學習過JAVA語言,對P2P技術以及網(wǎng)絡編程也較有興趣,為了更好的考驗自己對JAVA語言的掌握程度,以及能更深入的理解P2P技術的內(nèi)涵,本人就決定以《基于JAVA局域網(wǎng)聊天程序設計與實現(xiàn)》為畢業(yè)設計,希望通過這一次的能進一步提

66、高本人的網(wǎng)絡編程的能力。</p><p><b>  2.2 需求分析</b></p><p>  基于P2P的聊天系統(tǒng),用戶既是服務器端也是客戶端。這并不同于傳統(tǒng)的一服務器多客戶端的網(wǎng)絡結構,而是多服務器多客戶端的網(wǎng)絡結構,服務器與客戶端一一綁定,數(shù)量相等。不過,從原理上看,這還是C/S模式。所以,我的程序大致可分為服務器模塊和客戶端模塊來進行分析。</p&

67、gt;<p>  首先介紹一下服務器模塊的任務:</p><p>  1.服務器模塊應當建立一個ServerSocket,并且不斷進行偵聽是否有客戶端模塊連接或者斷開連接。</p><p>  2.服務器模塊監(jiān)聽網(wǎng)絡上的客戶端模塊是否有與本機進行通信的需求。若有需求,就建立連接,接收消息,通過ActionListener接口進行偵聽,當用戶點擊按鈕后,啟動一個聊天界面,將消息

68、通過客戶端模塊顯示出來。</p><p>  以上就是服務器模塊最主要的兩個任務。</p><p>  客戶端應該完成的工作包括:</p><p>  1.向需要通信的主機發(fā)送連接請求,若成功,通過ServerSocket進行連接,端口默認為5001。</p><p>  2.向已建立連接的主機發(fā)送消息。</p><p&g

69、t;  3.顯示本機服務器接收的信息。</p><p>  除此之外,本系統(tǒng)還講實現(xiàn)群聊功能:默認239.0.0.0為廣播地址,用UDP技術通過廣播的方式把消息傳遞給局域網(wǎng)內(nèi)每個用戶的手中。從原理上講,跟實現(xiàn)客戶端的原理差不多,只不過這里不是點對點兩人通信。</p><p>  3 JAVAqq局域網(wǎng)聊天程序的系統(tǒng)分析與設計</p><p>  3.1 JAVA

70、qq局域網(wǎng)聊天程序的總體設計要點</p><p>  聊天系統(tǒng)的設計跟普通網(wǎng)站設計有著許多不同的地方,普通網(wǎng)站設計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。因此,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點:</p><p><b>  1、實現(xiàn)思想</b></p><

71、p>  局域網(wǎng)基于P2P上的聊天程序一般都是以服務器模塊提供連接響應,使用者通過客戶端模塊連接,與用戶交談,這是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實現(xiàn)服務器和客戶端兩個模塊的程序。</p><p>  2、服務器模塊工作流程</p><p>  服務器模塊通過socket()系統(tǒng)調(diào)用創(chuàng)建一個Socket數(shù)組后,與指定的本地端口綁定,就可以在端口進行偵聽list

72、en()。如果有用戶連接請求,則建立一個Socket,將客戶端地址賦給這個Socket。然后就可以相互傳遞信息了。</p><p>  3、客戶端模塊工作流程</p><p>  客戶端程序相對簡單,只需要建立一個Socket與服務器模塊連接,成功后通過這個Socket來發(fā)送和接收數(shù)據(jù)就可以了。</p><p>  系統(tǒng)通過ActionListener接口來監(jiān)聽用戶

73、的對按鈕的點擊,來啟動各聊天窗口進行相關工作,如私聊,群聊等。</p><p>  3.2 JAVAqq局域網(wǎng)聊天程序的設計步驟及功能模塊劃分</p><p><b>  聊天系統(tǒng)工作原理圖</b></p><p>  3.3 JAVAqq局域網(wǎng)聊天程序各功能模塊</p><p>  1.LoadingFrame(源

74、代碼見附錄,下同)</p><p>  public void init(){//登陸界面的初始化方法</p><p>  setTitle("登錄");</p><p>  setIconImage((new ImageIcon("\\image\\icon.gif")).getImage());</p>&

75、lt;p><b>  ……</b></p><p>  setLocation(387, 234);</p><p>  setSize(350,300);</p><p>  setVisible(true);</p><p>  setDefaultCloseOperation(3);</p>&

76、lt;p>  loadBtn.addActionListener(this);//將“登陸”按鈕加入到事件偵聽器中</p><p>  cancelBtn.addActionListener(this);//講“取消”按鈕加入到事件偵聽器中</p><p>  nameText.addActionListener(this);//講輸入用戶名的文本框加入到事件偵聽器中</p&g

77、t;<p>  this.setResizable(false);</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  if(e.getSource()==loadBtn||e.getSource()==nameT

78、ext){//創(chuàng)建客戶端主界面</p><p>  text=nameText.getText();</p><p>  new StateFrame(text);</p><p>  dispose();</p><p>  }else if(e.getSource()==cancelBtn){//取消登錄,推出程序</p>

79、<p>  dispose();</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  程序的登錄窗口,從此窗口中,輸入用戶名,點擊“登陸”來初始化一個StateFrame對象,并在顯示器上顯

80、示出客戶端的主界面。在后期的完善中,會完成記住用戶名及自動登錄功能。主要通過將用戶名寫入一個記事本保存起來。</p><p>  2.StateFrame</p><p>  public final static int DEFAULT_PORT=8322;//默認端口</p><p>  public final static int CATCH_PORT=73

81、22;</p><p>  public final static int TCP_PORT=6322;//默認TCP連接端口</p><p>  public void init(){//初始化應用程序窗口</p><p><b>  ……</b></p><p>  friList.addActionListener

82、(new ActionListener(){</p><p>  //用ActionListener接口來對圖形界面中的各個組件進行監(jiān)聽</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  //雙擊登錄到列表框內(nèi)容時觸發(fā)的事件為連通列表框中的IP,建立TCP通信</p>&l

83、t;p>  Socket socket;</p><p>  int s=friList.getSelectedIndex();</p><p>  String address=userinfo[s].getIP();//獲取對方IP</p><p><b>  try {</b></p><p>  socke

84、t=new Socket(address,TCP_PORT);//建立連接</p><p>  MainChatFrame mf=new MainChatFrame(socket,userinfo[s].getName());</p><p><b>  //啟動私聊主界面</b></p><p>  } catch (Exception e

85、1) {e1.printStackTrace();}</p><p><b>  }});</b></p><p><b>  ……</b></p><p>  //初始化UDP協(xié)議端口信息</p><p>  //首先向已在線的程序發(fā)送本機的IP以及請求響應并對相應的組播端進行監(jiān)聽</p&g

86、t;<p>  public void JoinGroup(){</p><p><b>  try {</b></p><p>  group=InetAddress.getByName("238.0.0.0");//初始化廣播聊天信息組</p><p>  groupC=InetAddress.getBy

87、Name("239.0.0.0");//初始化登錄信息組</p><p>  socket=new DatagramSocket();</p><p>  byte notify[]=new byte[100];</p><p>  byte nametag[]=new byte[20];</p><p>  nameta

88、g=name.getBytes();</p><p>  //發(fā)送一個登錄信息給已登錄的用戶,通知他們本程序上線。</p><p>  //包的數(shù)據(jù)結構為:判斷位+用戶名+IP地扯+用戶名長度</p><p>  notify=new String("C"+name</p><p>  +InetAddress.getLo

89、calHost().getHostAddress()+name.length()).getBytes();</p><p>  packet=new DatagramPacket(notify,notify.length,groupC,CATCH_PORT);</p><p>  socket.send(packet);</p><p>  socketC=new

90、MulticastSocket(CATCH_PORT);</p><p>  socketC.joinGroup(groupC);</p><p>  Catcher catcher=new Catcher(socketC,this,name,userinfo);</p><p>  CheckIn login=new CheckIn(this,userinfo);

91、</p><p>  } catch (Exception e) {e.printStackTrace();}}</p><p>  用來顯示用用戶名及在線人的窗口,并對窗口中各組件實施監(jiān)聽。讓其可順利生成各個聊天主界面。</p><p><b>  3.Catcher</b></p><p>  //實現(xiàn)對組播端口

92、的監(jiān)聽,并作出反映</p><p>  public void run(){</p><p>  try {socket=new DatagramSocket();</p><p>  while(true){</p><p>  byte[] Rdata=new byte[256];</p><p>  packet

93、=new DatagramPacket(Rdata,Rdata.length);</p><p>  Csocket.receive(packet);//等待接受數(shù)據(jù)包</p><p>  String count=new </p><p>  String(packet.getData()).substring(packet.getLength()-1,packe

94、t.getLength());</p><p>  int num=Integer.parseInt(count); </p><p>  //count記錄了數(shù)據(jù)包的最后一位數(shù),也就是記錄了用戶名的長度。</p><p>  String check=new String(packet.getData()).</p><p>  subst

95、ring(1+num,packet.getLength()-1); //check為數(shù)據(jù)包的IP地址</p><p>  String judge=new String(packet.getData()).substring(0,1);</p><p>  String usertag=new String (packet.getData()).substring(1,num+1);<

96、;/p><p>  if(judge.equals("C")){</p><p>  //judge為“C”時反送一個含有對方用戶名以及本機的IP的數(shù)據(jù)包到組播組</p><p><b>  ……</b></p><p><b>  }</b></p><p>

97、;  public void Connect(String check){ //Connect()方法實現(xiàn)了對對方回應本機信息的過程,</p><p>  //其中第一以及最后一個為無用信息,在接受方被吸收掉</p><p><b>  ……</b></p><p>  CheckSocket=new Socket(check,CHECK_PO

98、RT);</p><p>  in=new BufferedReader(new</p><p>  InputStreamReader(CheckSocket.getInputStream()));</p><p>  out=new PrintWriter(CheckSocket.getOutputStream());</p><p>&

99、lt;b>  ……</b></p><p>  用來對登錄信息的監(jiān)聽,并解析傳送過來的數(shù)據(jù)包。</p><p>  4.Listener</p><p>  public void run(){</p><p>  try {while(true){</p><p>  byte[] Rdata=ne

100、w byte[256];</p><p>  packet=new DatagramPacket(Rdata,Rdata.length);//用Rdata數(shù)組來接收數(shù)據(jù),</p><p>  MSocket.receive(packet);//并傳給MulticastSocket對象</p><p>  SF.groupchat.processMsg(n

101、ew String(packet.getData()));</p><p>  SF.groupchat.setVisible(true);ring();</p><p><b>  }</b></p><p>  } catch (IOException e) {</p><p>  e.printStackTrace

102、();}}</p><p>  用來對群消息的監(jiān)聽及處理,將接收到的消息打包,傳給MulticastSocket對象,再利用CheckIn和Logon對象進行處理。</p><p><b>  5.CheckIn</b></p><p>  //對回應信息的端口的監(jiān)聽,一旦收到回應信息則開啟一個新線程對其進行信息的接收</p>&

103、lt;p>  public void run(){</p><p><b>  try {</b></p><p>  Check=new ServerSocket(CHECK_PORT);</p><p>  } catch (IOException e) {e.printStackTrace();}</p><p&

104、gt;<b>  try {</b></p><p>  while(true){</p><p>  client=Check.accept();</p><p>  Logon ll=new Logon(sf,client,userinfo);</p><p>  ll.start();}</p>&l

105、t;p>  } catch (IOException e) {e.printStackTrace();}}</p><p><b>  6.Logon</b></p><p>  public void run(){</p><p>  //run()方法實現(xiàn)對回應的TCP連接的信息的接收,并且完成對UserInfo信息的保存</

106、p><p>  String msg=null;</p><p><b>  Try{</b></p><p>  msg=receiveMsg();</p><p>  name=msg;//獲取對方的名字</p><p>  msg=receiveMsg();</p><p&g

107、t;  ip=msg;//獲取對方的IP</p><p><b>  {</b></p><p>  k=sf.friList.getSelectedIndex();</p><p>  userinfo[k]=new UserInfo(name,ip);</p><p><b>  }</b>&l

108、t;/p><p>  sf.processFriend(userinfo[k].getName());</p><p>  msg=receiveMsg();</p><p><b>  ……</b></p><p><b>  }</b></p><p><b>  

109、}</b></p><p>  public String receiveMsg()throws IOException{//接收數(shù)據(jù)</p><p>  String msg=new String();</p><p><b>  try {</b></p><p>  msg=in.readLine();

110、</p><p>  } catch (IOException e) {……}</p><p>  return msg;</p><p><b>  }</b></p><p>  5和6主要完成對群消息的處理,5主要完成對信息的解包,顯示等等;而6主要是對TCP連接的信息的接收,以及對用戶信息的保存。</p&g

111、t;<p>  7.TCPConnect</p><p>  public void run(){</p><p><b>  try {</b></p><p>  listen=new ServerSocket(port);</p><p>  processMsg("正在監(jiān)聽TCP端口………

112、");//建立TCP連接</p><p>  } catch (Exception e) {</p><p>  processMsg("群聊功能仍可使用");//建立失敗,不過還可以群聊</p><p><b>  }</b></p><p><b>  ……</b>

113、</p><p>  while(true){</p><p>  Socket client = listen.accept();</p><p>  MainChatFrame mf=new MainChatFrame(client,name);//啟動一個私聊主界面</p><p><b>  }</b></

114、p><p><b>  ……</b></p><p><b>  }</b></p><p>  根據(jù)所得到對方的IP信息建立一個TCP連接,并啟動一個私聊主界面,進行TCP通信。</p><p>  8.UserInfo</p><p>  public class UserI

115、nfo {//初始化用戶信息,姓名以及IP地址,姓名是通過登錄界面由用戶鍵入的,IP</p><p>  //地址是程序直接由機器獲取的</p><p>  private String name;</p><p>  private String IP;</p><p>  public UserInfo(String name, Stri

116、ng ip) {this.name = name;IP = ip;}</p><p>  public String getIP() {return IP;}</p><p>  public void setIP(String ip) {IP = ip;}</p><p>  public String getName() {return name;}</p

溫馨提示

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

評論

0/150

提交評論