版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 畢 業(yè) 設(shè) 計(jì)(論 文)</p><p> 基于JAVA的局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)</p><p> 學(xué)生姓名:王若曦</p><p> 學(xué) 號(hào):0515031110</p><p> 所在系部:信息工程系</p><p> 專業(yè)班級(jí):05gb計(jì)算1班</p><p&g
2、t; 指導(dǎo)教師:謝芳 講師</p><p> 日 期:二○○九年六月</p><p><b> 摘 要</b></p><p> 隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)聊天工具作為一種交流工具,已經(jīng)受到網(wǎng)民的青睞。目前,出現(xiàn)了很多功能強(qiáng)大的聊天工具,其中應(yīng)用比較廣泛的有騰訊QQ、MSN-Messager等等。</p><p
3、> 即時(shí)通訊軟件,是每一個(gè)上網(wǎng)用戶都需要的工具,它除了能夠讓您迅速地在網(wǎng)上找到自己的朋友和伙伴之外,還可以實(shí)時(shí)交談和傳遞信息,截止到目前,全球約有近3億多人使用即時(shí)軟件,正因?yàn)榧磿r(shí)通訊軟件擁有數(shù)以億計(jì)的用戶和增長的市場,所以各個(gè)公司都盯上了這個(gè)最大的市場,一時(shí)間,即時(shí)通訊市場硝煙四起。</p><p> 對等網(wǎng)絡(luò)(peer-to-peer,簡稱P2P),應(yīng)用最初出現(xiàn)時(shí)和現(xiàn)在并不相同。事實(shí)上可以認(rèn)為它是若
4、干不同技術(shù)以及流行趨勢相結(jié)合的產(chǎn)物。以下是導(dǎo)致P2P技術(shù)發(fā)展最重要的趨勢:首先,一些新技術(shù)與軟件工程的結(jié)合,形成了一種將工作分散的趨勢。P2P計(jì)算正是這種分散工作趨勢的結(jié)果。其次,在企業(yè)應(yīng)用集成等因素的驅(qū)動(dòng)下,過去十年漸漸形成從集中的單機(jī)系統(tǒng)轉(zhuǎn)向分布式系統(tǒng)。然而隨著互聯(lián)網(wǎng)的發(fā)展,全面的分布式計(jì)算也就成為一種迫切需求。</p><p> 關(guān)鍵詞:局域網(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)絡(luò)功能與編程1</p><p> 1.1.1 JAVA概述1</p><p> 1.1.2 JAVA的特點(diǎn)3</p><p> 1.1.3 JAVA語言在網(wǎng)絡(luò)上的應(yīng)用6</p><p> 1.2
13、 JavaBeans技術(shù)6</p><p> 1.3 IP/TCP協(xié)議常識(shí)6</p><p> 1.4 Socket的簡介7</p><p> 1.5 對等網(wǎng)絡(luò)8</p><p> 1.5.1 對等網(wǎng)絡(luò)發(fā)展歷史8</p><p> 1.5.2 對等網(wǎng)絡(luò)的概念9</p>&l
14、t;p> 1.5.3 對等網(wǎng)絡(luò)的主要系統(tǒng)結(jié)構(gòu)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)分析與設(shè)計(jì)15</p><p> 3
15、.1 JAVAqq局域網(wǎng)聊天程序的總體設(shè)計(jì)要點(diǎn)15</p><p> 3.2 JAVAqq局域網(wǎng)聊天程序的設(shè)計(jì)步驟及功能模塊劃分15</p><p> 3.3 JAVAqq局域網(wǎng)聊天程序各功能模塊16</p><p> 4 JAVAqq局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(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> 結(jié) 論28</b></p><p><b> 致 謝30</b></p><p><b> 參考文獻(xiàn)31</
17、b></p><p> 附錄 A 程序源代碼32</p><p><b> 緒論</b></p><p> 隨著互聯(lián)網(wǎng)逐步普及,互聯(lián)網(wǎng)技術(shù)的逐步提高。人們的工作和生活也越來越離不開網(wǎng)絡(luò),而即時(shí)聊天是人們最常見、最直接的online交流的方式。本系統(tǒng)以聊天功能為主,通過網(wǎng)絡(luò)為用戶提供一個(gè)人際交流的平臺(tái)。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是
18、基于JAVA編程語言開發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成消息的傳遞,且具有高效的交互性,能更有效的處理客戶請求,其運(yùn)行時(shí)所需環(huán)境及工作流程和各模塊的工作原理將在本文依次介紹,并且文中提供了全部程序源代碼。</p><p> JAVA的網(wǎng)絡(luò)功能與編程</p><p> 1.1.1 JAVA概述</p><p> Java是一個(gè)由Sun公司開發(fā)的新一代高級(jí)
19、編程語言。它可在各式各樣不同機(jī)器、不同操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開發(fā)軟件。不論你使用的是哪種WEB瀏覽器,哪種計(jì)算機(jī),哪種操作系統(tǒng),只要WEB瀏覽器上面注明了“支持Java”,并且裝有JAVA控件,你就可以看到生動(dòng)的主頁。Java正在逐步成為Internet應(yīng)用中最主要的開發(fā)語言,它徹底改變了軟件開發(fā)模式,帶來了自PC機(jī)以來又一次革命,為飛速發(fā)展的網(wǎng)絡(luò)世界增添了新的動(dòng)力。</p><p> Sun的Java語言開發(fā)小
20、組成立于1991年,Sun內(nèi)部人員把這個(gè)項(xiàng)目稱為Green。該小組的領(lǐng)導(dǎo)人是James Gosling,是一位非常杰出的程序員。在研發(fā)過程中,Gosling深刻體會(huì)到消費(fèi)類電子產(chǎn)品和工作站產(chǎn)品的差異:消費(fèi)類電子產(chǎn)品要求可靠性高、費(fèi)用低、標(biāo)準(zhǔn)化、使用簡單。</p><p> Gosling在開始寫Java時(shí),并不局限于擴(kuò)充語言機(jī)制本身,更注重于語言所運(yùn)行的軟硬件環(huán)境。他要建立一個(gè)系統(tǒng),運(yùn)行于一個(gè)巨大的、分布的、異
21、構(gòu)的網(wǎng)格環(huán)境中,完成各設(shè)備之間的通信與協(xié)同工作。Gosling在設(shè)計(jì)中采用了虛機(jī)器碼方式,即Java語言編譯后產(chǎn)生虛擬機(jī),虛擬機(jī)運(yùn)行在一個(gè)解釋器上,每一個(gè)操作系統(tǒng)均有一個(gè)解釋器。這樣一來,Java就成了跨平臺(tái)語言。</p><p> Patrick Naughton也是Sun公司的技術(shù)骨干,曾經(jīng)是OpenWindows項(xiàng)目的負(fù)責(zé)人。當(dāng)Naughton加入該小組后,工作進(jìn)展神速。經(jīng)過17個(gè)月的奮戰(zhàn),整個(gè)系統(tǒng)勝利完
22、成。它是由一個(gè)操作系統(tǒng)、一種語言、一個(gè)用戶界面、一個(gè)新的硬件平臺(tái)、三塊專用芯片構(gòu)成的。通常情況下,這樣的項(xiàng)目在Sun公司要75個(gè)人干三年。項(xiàng)目完成后,在Sun公司內(nèi)部做了一次展示和鑒定,觀眾的反應(yīng)是:在各個(gè)方面都采用了嶄新的、大膽的技術(shù)。</p><p> 到了1994年,internet已如火如荼地發(fā)展起來。Gosling意識(shí)到internet需要一個(gè)瀏覽器,它不依賴于任何平臺(tái),它應(yīng)是一種實(shí)時(shí)性較高、可靠安全
23、、又有交互功能的瀏覽器。于是Gosling決定用Java開發(fā)一個(gè)新的Web瀏覽器。</p><p> Java雖出現(xiàn)的時(shí)間不長,但已完全被業(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的快速應(yīng)用程序開發(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)點(diǎn)表現(xiàn)在:便宜、易于使用和管理。用戶不管使用何種類型的機(jī)器和操作系統(tǒng),界面是統(tǒng)一的Web瀏覽器,而數(shù)據(jù)庫、Web頁面、應(yīng)用程序則存在WEB服務(wù)器上。</p><p> 未來的計(jì)算方式,每個(gè)HomePage的實(shí)質(zhì)是一個(gè)多媒體應(yīng)用程序,這些程序用Java來開發(fā)。Java應(yīng)用程序運(yùn)行在不同的機(jī)器、不同的
26、操作系統(tǒng)之上,甚至于電冰箱、烤面包箱、防盜電子設(shè)備之中,用Internet把所有的電子設(shè)備連接起來,通過TCP/IP進(jìn)行信息的交流。</p><p> 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)行二進(jìn)制字符流交換,語義由交換雙方維護(hù);在Java時(shí)代,運(yùn)行在網(wǎng)絡(luò)上的程序進(jìn)程交換的是小應(yīng)用程序。</p>
27、<p> 隨著Internet的崛起、Java的誕生,巨型而臃腫的應(yīng)用軟件開始向小型化發(fā)展,由眾多生活在Internet上的小應(yīng)用程序相互協(xié)作完成信息的處理與傳遞。Java會(huì)加速應(yīng)用軟件的小型化、網(wǎng)絡(luò)化的趨勢。隨著互聯(lián)網(wǎng)的發(fā)展,軟件必然是面向大眾的,薄利多銷將是網(wǎng)絡(luò)應(yīng)用軟件的重要特點(diǎn)。信息的價(jià)值在于使用和共享,Internet和Web是信息的使用和共享最快捷、最便宜的方式,Word將演化成為Web寫作工具,Excel則將演
28、化成Web電子表格。</p><p> 1.1.2 JAVA的特點(diǎn)</p><p> (一)JAVA的主要特點(diǎn)</p><p> Java語言有下面一些特點(diǎn):簡單、面向?qū)ο?、分布式、解釋?zhí)行、 安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動(dòng)態(tài)性。</p><p><b> 1.簡單</b></p>
29、<p> Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù)。Java略去了運(yùn)算符重載、多重繼承等模糊的概念,且通過實(shí)現(xiàn)自動(dòng)垃圾收集大大簡化了程序設(shè)計(jì)者的內(nèi)存管理工作。</p><p><b> 2.面向?qū)ο?lt;/b></p><p> Java語言的設(shè)計(jì)集中于對象及其接口,它提供了簡單的類機(jī)制以及動(dòng)態(tài)的接口模型,實(shí)現(xiàn)了模塊化和
30、信息隱藏;而類則提供了一類對象的原型,并且通過繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。</p><p><b> 3.分布性</b></p><p> Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便地訪問其它對象。</p><p><b> 4.安全性&
31、lt;/b></p><p> 用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵。Java不支持指針, 一切對內(nèi)存的訪問都必須通過對象的實(shí)例變量來實(shí)現(xiàn),這樣就防止程序員使用 “特洛伊”木馬等欺騙手段訪問對象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。</p><p><b> 5.體系結(jié)構(gòu)中立</b></p><p> Ja
32、va解釋器生成與體系結(jié)構(gòu)無關(guān)的指令,Java程序可在任意的處理器上運(yùn)行。這些指令對應(yīng)于Java虛擬機(jī)中的表示,Java解釋器得到字節(jié)碼后,對它進(jìn)行轉(zhuǎn)換,使之能夠在不同的平臺(tái)運(yùn)行。</p><p><b> 6.可移植性</b></p><p> 與平臺(tái)無關(guān)的特性使Java程序可以方便地被移植到網(wǎng)絡(luò)的不同機(jī)器上。另外,Java編譯器是由Java語言實(shí)現(xiàn)的,Java運(yùn)
33、行時(shí)系統(tǒng)由標(biāo)準(zhǔn)C實(shí)現(xiàn),這使得Java 系統(tǒng)本身也具有可移植性。</p><p><b> 7.解釋執(zhí)行</b></p><p> Java解釋器直接對Java字節(jié)碼進(jìn)行解釋執(zhí)行。字節(jié)碼本身攜帶了許多編譯時(shí)信息,使得連接過程更加簡單。</p><p><b> 8.高性能</b></p><p>
34、; 和其它解釋執(zhí)行的語言如BASIC不同,Java字節(jié)碼的設(shè)計(jì)使之能很容易地直接轉(zhuǎn)換成對應(yīng)于特定CPU的機(jī)器碼,從而得到較高的性能。</p><p><b> 9.多線程</b></p><p> 多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行,而且同步機(jī)制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制
35、,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。</p><p><b> 10.動(dòng)態(tài)性</b></p><p> Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫中可以自由地加入 新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。</p><p> ?。ǘ┴S富的類庫J
36、ava提供了大量的類以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。</p><p> 1.語言包提供的支持包括字符串處理、多線程處理、例外處理、數(shù)學(xué)函數(shù)處理等,可以用它簡單地實(shí)現(xiàn)Java程序的運(yùn)行平臺(tái)。</p><p> 2.實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。</p><p> 3.輸入輸出包用統(tǒng)一的流模型來實(shí)現(xiàn)所有格式的I/O,包括文
37、件系統(tǒng)、 網(wǎng)絡(luò)、輸入</p><p> 4.低級(jí)網(wǎng)絡(luò)包用于實(shí)現(xiàn)Socket編程。</p><p> 5.抽象圖形用戶接口包實(shí)現(xiàn)了不同平臺(tái)的計(jì)算機(jī)的圖形用戶接口部件, 包括窗口、菜單、滾動(dòng)條、對話框等,使得Java可以移植到不同平臺(tái)的機(jī)器。</p><p> 6.網(wǎng)絡(luò)包支持Internet的TCP/IP協(xié)議,提供了與Internet的接口。它支持URL連接,WE
38、B即時(shí)訪問,并且簡化了C/S模型的程序設(shè)計(jì)。</p><p> 1.1.3 JAVA語言在網(wǎng)絡(luò)上的應(yīng)用</p><p> Java程序可以獲取網(wǎng)絡(luò)上結(jié)點(diǎn)的圖象、聲音、HTML文檔及文本等資源,并可以對獲得的資源進(jìn)行處理。在編程處理上,一般先生成一個(gè)URL類型的對象,然后用 Java中相應(yīng)的方法獲取該對象所代表的資源。 </p><p> 1.2 JavaB
39、eans技術(shù)</p><p> JavaBeans就是Java的可重用組件技術(shù)。JSP通過JavaBeans來擴(kuò)充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù)處理或復(fù)雜計(jì)算分離出來成為獨(dú)立可重復(fù)利用的模塊。JSP對于在Web應(yīng)用中集成JavaBeans 組件提供了完善的支持。這種支持不僅能縮短開發(fā)時(shí)間,也為JSP應(yīng)用帶來了更多的可伸縮性。 JavaBeans組件可以用來執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫的交
40、互以及數(shù)據(jù)提取等。由于JavaBeans開發(fā)起來簡單,又可以利用Java語言的強(qiáng)大功能,許多動(dòng)態(tài)頁面處理過程實(shí)際上被封裝到了JavaBeans中。</p><p> 1.3 IP/TCP協(xié)議常識(shí)</p><p> (1)IP/TCP協(xié)議的特點(diǎn):</p><p> TCP/IP(Transmission Control Protocol/Internet Pr
41、otocol)是傳輸控制協(xié)議/網(wǎng)際協(xié)議的縮寫, TCP/IP是當(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ò)接口層。</p><p> IP協(xié)議的作用:第一,它是網(wǎng)絡(luò)層的協(xié)議,提供互聯(lián)網(wǎng)上數(shù)據(jù)傳輸?shù)慕y(tǒng)一格式。第二,提供不可靠的無連接的服務(wù)。第三,定義了互聯(lián)網(wǎng)上的傳輸數(shù)據(jù)的基本單元,提供了供路由選擇的信息,沒有差錯(cuò)校驗(yàn)和處理的機(jī)制。</p><
42、;p> TCP/IP協(xié)議具有以下特點(diǎn):</p><p> 協(xié)議標(biāo)準(zhǔn)具有開放性,其獨(dú)立于特定的計(jì)算機(jī)硬件及操作系統(tǒng),可以免費(fèi)使用。</p><p> 統(tǒng)一分配網(wǎng)絡(luò)地址,使得每個(gè)TCP/IP 設(shè)備在網(wǎng)絡(luò)中都具有唯一的IP地址。</p><p> 實(shí)現(xiàn)了高層協(xié)議的標(biāo)準(zhǔn)化,能為用戶提供多種可靠的服務(wù)。</p><p> (2)TCP/
43、IP協(xié)議進(jìn)行傳輸數(shù)據(jù)傳輸?shù)倪^程:</p><p> 應(yīng)用程序?yàn)榱藗鬏敂?shù)據(jù)會(huì)調(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ù)的正確性。TCP調(diào)用IP接口,向TCP提供所有TCP需要的服務(wù)。</p><p><b> (3)端口號(hào):</b></p&
44、gt;<p> 有的時(shí)候,一個(gè)IP地址不能完整的標(biāo)識(shí)一臺(tái)服務(wù)器,這是應(yīng)為一臺(tái)物理性的計(jì)算機(jī)同時(shí)運(yùn)行著多個(gè)應(yīng)用程序,這就需要我們來區(qū)別同一臺(tái)機(jī)子上的不同的服務(wù),所以就在傳輸層和應(yīng)用層上設(shè)置接口,就是端口。端口實(shí)際是一個(gè)16位長的 地址,他的范圍是0~65535之間,其中0~1023是熟知端口,主要是給提供服務(wù)的應(yīng)用程序使用,這些端口是所有應(yīng)用進(jìn)程都只道的,1024~65535為一般端口,也稱動(dòng)態(tài)端口、連接端口,用來隨時(shí)分配
45、要求通信的客戶端應(yīng)用程序。在數(shù)據(jù)傳輸過程中,各種服務(wù)器不斷的檢測分配給他的端口,一邊發(fā)現(xiàn)要求和他通信的客戶端。 </p><p> 1.4 Socket的簡介</p><p> Socket,簡稱套接字,用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶和服務(wù)器之間的連接。也就是說網(wǎng)絡(luò)上兩個(gè)或兩個(gè)以上雙工方式通信的進(jìn)程之間總有一個(gè)連接,這個(gè)連接的端點(diǎn)成為套接字,套接字是在比較低的層次上通信的。</p>
46、<p> 具體的說:一個(gè)服務(wù)器應(yīng)用程序一般偵聽一個(gè)特定的端口等待客戶端的連接請求,當(dāng)一個(gè)連接請求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過程中,客戶端被分配一個(gè)本地端口與一個(gè)Socket建立連接,客戶端通過寫Socket來通知服務(wù)器,以讀Socket中的信息,類似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來偵聽原始端口上的其他連接請求。服務(wù)器也通過它的本地端口連接一個(gè)socket,通過讀寫和客戶端通信。<
47、;/p><p> Socket程序的工作過程:</p><p> 1、建立Socket連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接通道。</p><p> 2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通道。</p><p> 3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。</p><p><
48、;b> 具體如下:</b></p><p> Socket套接字原理圖</p><p><b> 1.5 對等網(wǎng)絡(luò)</b></p><p> 1.5.1 對等網(wǎng)絡(luò)發(fā)展歷史</p><p> 對等網(wǎng)絡(luò)(peer to peer,簡稱P2P)應(yīng)用最初出現(xiàn)時(shí)和現(xiàn)在并不相同。事實(shí)上可以認(rèn)為它是若干
49、不同技術(shù)的產(chǎn)物。下面是兩個(gè)導(dǎo)致P2P技術(shù)發(fā)展最重要的趨勢:</p><p> 首先是某些新技術(shù)與軟件工程結(jié)合,形成一種將工作分散的趨勢。P2P計(jì)算正是這種分散工作趨勢的必然結(jié)果。</p><p> 其次從工程的角度看來,在企業(yè)應(yīng)用集成等因素的驅(qū)動(dòng)下,過去十年漸漸形成一種從集中系統(tǒng)轉(zhuǎn)向分布式系統(tǒng)的趨勢。</p><p> 對功能強(qiáng)大的網(wǎng)絡(luò)計(jì)算機(jī)的需求以及昂貴的帶
50、寬開銷,是對這種趨勢影響最大的兩個(gè)因素。為了提高效率,P2P計(jì)算由許多互相連接的同位體組成。</p><p> 除了技術(shù)方面之外的社會(huì)因素也是一個(gè)重要原因。毫無疑問,人們現(xiàn)在對P2P計(jì)算技術(shù)的熱切關(guān)注起源于Napster,Scour,Gnutella,以及即時(shí)通訊類的相關(guān)產(chǎn)品。這些產(chǎn)品提供了所謂的“killer apps”功能,能夠?qū)2P技術(shù)中的一部分下放到客戶端手中。這種第一手的體驗(yàn),使得人們越來越關(guān)注P2
51、P技術(shù)。</p><p> 1.5.2 對等網(wǎng)絡(luò)的概念</p><p> 目前,業(yè)界對P2P的定義還沒有一個(gè)標(biāo)準(zhǔn)的說法,Intel將P2P技術(shù)定義為“通過系統(tǒng)間的直接交換達(dá)成計(jì)算機(jī)資源與信息的共享”。IBM則把它看成是由若干互聯(lián)協(xié)作的計(jì)算機(jī)構(gòu)成的系統(tǒng)并具備如下若干特性之一:系統(tǒng)依存于邊緣化設(shè)備的主動(dòng)協(xié)作,每個(gè)成員直接從其他成員而不是從服務(wù)器的參與中受益;系統(tǒng)中成員同時(shí)扮演服務(wù)器與客戶
52、端的角色;系統(tǒng)應(yīng)用的用戶能夠意識(shí)到彼此的存在而構(gòu)成一個(gè)虛擬或?qū)嶋H的群體。</p><p> 簡單地說,P2P技術(shù)是一種用于不同PC用戶之間、不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù)。它打破了傳統(tǒng)的C/S模式,在對等網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)的地位都是相同的,具備客戶端和服務(wù)器雙重特性,可以同時(shí)作為服務(wù)使用者和服務(wù)提供者。</p><p> 1.5.3 對等網(wǎng)絡(luò)的主要系統(tǒng)結(jié)構(gòu)</p>
53、<p> PZP模式的變化經(jīng)歷了集中式、分布式和混合式3個(gè)階段。</p><p> (1)集中式對等網(wǎng)絡(luò)</p><p> 集中式P2P模式由一個(gè)中心服務(wù)器來負(fù)責(zé)記錄共享信息以及反饋查詢;每一個(gè)對等實(shí)體要對它所需共享的信息以及進(jìn)行的通信負(fù)責(zé)。這種形式具有中心化的特點(diǎn),但是它不同于傳統(tǒng)意義上的C/S模式。集中式P2P模式則是所有網(wǎng)上提供的資料都存放在提供該資料的客戶機(jī)上,服
54、務(wù)器上只保留索引信息,此外服務(wù)器與對等實(shí)體以及對等實(shí)體之間都具有交互能力。</p><p> 集中目錄式PZP模型還存在很多問題,主要表現(xiàn)為:</p><p> 中央服務(wù)器的癱瘓將導(dǎo)致整個(gè)網(wǎng)絡(luò)的崩潰,可靠性和安全性較低:</p><p> 隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,中央目錄服務(wù)器維護(hù)和更新的費(fèi)用將急劇增加,所需成本過高;</p><p>
55、中央服務(wù)器的存在引起共享資源在版權(quán)問題上的糾紛,這也是直接導(dǎo)致Napster破產(chǎn)的原因;</p><p> 缺乏有效的強(qiáng)制共享機(jī)制,資源可用性差。</p><p> 集中式P2P可提供中心服務(wù)器目錄檢索、管理服務(wù)和標(biāo)準(zhǔn)的點(diǎn)到點(diǎn)通信,具有高效的檢索和低效的交換服務(wù)的特點(diǎn)。集中式P2P對小型網(wǎng)絡(luò)而言在管理和控制方面占有一定的優(yōu)勢,但對大型網(wǎng)絡(luò)并不適合。</p><p&g
56、t; (2)分布式對等網(wǎng)絡(luò)</p><p> 在分布式P2P中,對等機(jī)通過與相鄰對等機(jī)之間的連接遍歷整個(gè)網(wǎng)絡(luò)體系。每個(gè)對等機(jī)在功能上都是相似的,并沒有專門的服務(wù)器,而對等機(jī)必須依靠它們所在的分布網(wǎng)絡(luò)來查找文件和定位其他對等機(jī)。</p><p> 以Gnutella網(wǎng)絡(luò)為例,一臺(tái)新對等機(jī)首先通過訪問某特殊站點(diǎn)提供的主機(jī)緩存服務(wù)機(jī)制來得到一臺(tái)活動(dòng)對等機(jī)地址,通過與它建立一個(gè)連接將自己接入
57、Gnutella網(wǎng)絡(luò);接著,該新對等機(jī)主動(dòng)探查網(wǎng)絡(luò)中的其它對等機(jī),找到與之相鄰的對等機(jī)節(jié)點(diǎn),在進(jìn)行文件查找時(shí),該對等機(jī)首先向與之相鄰的所有活動(dòng)對等點(diǎn)發(fā)送一個(gè)查詢描述符Query,在其他對等機(jī)接收到該查詢描述符后,檢查本地是否有符合查詢請求的文件內(nèi)容,如果有,則按查詢描述符的發(fā)送路徑返回一個(gè)查詢響應(yīng)描述符QueryHit,無論本地是否存在符合查詢請求的文件內(nèi)容,其他對等機(jī)都會(huì)將該查詢包通過擴(kuò)散方式繼續(xù)在網(wǎng)絡(luò)中傳遞,直至查詢包中TTL屬性值
58、遞減為0時(shí)才停止繼續(xù)轉(zhuǎn)發(fā);一旦定位了響應(yīng)查詢文件的對等機(jī)之后,就與響應(yīng)對等機(jī)建立TCP連接,通過HTTP協(xié)議從響應(yīng)對等機(jī)中下載自己查詢的文件。文件的傳輸不再經(jīng)過Gnutella網(wǎng)絡(luò)進(jìn)行。</p><p> 分布式對等網(wǎng)絡(luò)模型也存在很多弊端,主要表現(xiàn)在以下方面:</p><p> 搜索請求要經(jīng)過整個(gè)網(wǎng)絡(luò)或者至少是一個(gè)很大的范圍才能得到結(jié)果,因此,這種模式占用很多帶寬,而且需要花費(fèi)很長時(shí)間
59、才能有返回結(jié)果。</p><p> 隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大,通過擴(kuò)散方式定位對等點(diǎn)及查詢信息的方法將會(huì)造成網(wǎng)絡(luò)流量增加,導(dǎo)致網(wǎng)絡(luò)擁塞,最終使Gnutella網(wǎng)絡(luò)被分片,因此,網(wǎng)絡(luò)的可擴(kuò)展性不好,不適合大型網(wǎng)絡(luò)。</p><p> 純分布式的P2P模式很難被企業(yè)所利用,因?yàn)樗鄙賹W(wǎng)絡(luò)上的用戶節(jié)點(diǎn)數(shù)以及對他們提供的資源的一個(gè)總體把握。</p><p> 安全性不高,
60、易遭受惡意攻擊。</p><p> 這種無中心、純分布式系統(tǒng)的特點(diǎn)是:它不再是簡單的點(diǎn)到點(diǎn)通信,而是更高效、更復(fù)雜的網(wǎng)絡(luò)通信。</p><p> (3)混合P2P網(wǎng)絡(luò)</p><p> 集中式P2P有利于網(wǎng)絡(luò)資源的快速檢索,并且只要服務(wù)器能力足夠強(qiáng)大就可以無限擴(kuò)展,但是其中心化的模式容易遭到直接的攻擊:分布式P2P解決了抗攻擊問題,但是又缺乏快速搜索和可擴(kuò)展性
61、?;旌鲜絇2P結(jié)合了集中式和分布式P2P的優(yōu)點(diǎn),在設(shè)計(jì)思想和處理能力上都得到了進(jìn)一步的優(yōu)化。它在分布式模式的基礎(chǔ)上,將用戶節(jié)點(diǎn)按能力進(jìn)行分類,使某些節(jié)點(diǎn)擔(dān)任特殊的任務(wù)。</p><p> 這些節(jié)點(diǎn)共分為3種:</p><p> 用戶節(jié)點(diǎn):普通節(jié)點(diǎn),它不具有任何特殊的功能。</p><p> 搜索節(jié)點(diǎn):處理搜索請求,從它們的孩子節(jié)點(diǎn)中搜索文件列表,這些節(jié)點(diǎn)必須有
62、128 kbit/s RAM的網(wǎng)絡(luò)連接速度,建議使用高性能的處理器。</p><p> 索引節(jié)點(diǎn):連接速度快、內(nèi)存充足的節(jié)點(diǎn)可以作為索引節(jié)點(diǎn)。索引節(jié)點(diǎn)用于保存可以利用的搜索節(jié)點(diǎn)信息,并搜集狀態(tài)信息,維護(hù)網(wǎng)絡(luò)結(jié)構(gòu)信息。</p><p> 在第三代P2P的軟件體系結(jié)構(gòu)中,采用了混合式P2P。這種模式的關(guān)鍵之一是引入了索引節(jié)點(diǎn),索引節(jié)點(diǎn)不會(huì)直接連接到有版權(quán)的資料上,它就像搜索引擎一樣,只是搜
63、索和所需資料相關(guān)的地址,至于用戶到底連接下載了什么內(nèi)容則和它無關(guān)。這種模式的關(guān)鍵之二是引入搜索節(jié)點(diǎn),搜索節(jié)點(diǎn)管理著所屬用戶的文件列表。用戶節(jié)點(diǎn)通過索引節(jié)點(diǎn)獲得搜索節(jié)點(diǎn)信息,之后用戶節(jié)點(diǎn)就與獲得的搜索節(jié)點(diǎn)相連,每一次查詢都通過該搜索節(jié)點(diǎn)進(jìn)行。當(dāng)用戶發(fā)出搜索請求后,如果和用戶節(jié)點(diǎn)直接相連的搜索節(jié)點(diǎn)查詢結(jié)果達(dá)到100個(gè)就停止;如果不足100個(gè),就向相鄰的搜索節(jié)點(diǎn)發(fā)出請求,如果查詢結(jié)果還不夠,就繼續(xù)向外快速發(fā)散,直到所有的搜索節(jié)點(diǎn)都被搜索到為止
64、。若所有的搜索節(jié)點(diǎn)都被訪問過,就意味著整個(gè)網(wǎng)絡(luò)上的節(jié)點(diǎn)都被搜索到了,其速度要比純P2P模式快得多。</p><p> 2 JAVAqq局域網(wǎng)聊天程序的需求分析</p><p><b> 2.1 課題來源</b></p><p> 根據(jù)當(dāng)前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來越受各種網(wǎng)民所青睞。因此開發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能
65、,它不僅可以提高網(wǎng)站的訪問量,同時(shí)可以留著訪客,更重要的是讓訪客透過聊天室實(shí)時(shí)的互相交流?,F(xiàn)在Intranet網(wǎng)絡(luò)在企業(yè)中越來越流行,不需要連入廣域網(wǎng)就實(shí)現(xiàn)實(shí)時(shí)消息傳遞的系統(tǒng)由于其優(yōu)越的性能受到企業(yè)的青睞。本人原來學(xué)習(xí)過JAVA語言,對P2P技術(shù)以及網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對JAVA語言的掌握程度,以及能更深入的理解P2P技術(shù)的內(nèi)涵,本人就決定以《基于JAVA局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)》為畢業(yè)設(shè)計(jì),希望通過這一次的能進(jìn)一步提
66、高本人的網(wǎng)絡(luò)編程的能力。</p><p><b> 2.2 需求分析</b></p><p> 基于P2P的聊天系統(tǒng),用戶既是服務(wù)器端也是客戶端。這并不同于傳統(tǒng)的一服務(wù)器多客戶端的網(wǎng)絡(luò)結(jié)構(gòu),而是多服務(wù)器多客戶端的網(wǎng)絡(luò)結(jié)構(gòu),服務(wù)器與客戶端一一綁定,數(shù)量相等。不過,從原理上看,這還是C/S模式。所以,我的程序大致可分為服務(wù)器模塊和客戶端模塊來進(jìn)行分析。</p&
67、gt;<p> 首先介紹一下服務(wù)器模塊的任務(wù):</p><p> 1.服務(wù)器模塊應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽是否有客戶端模塊連接或者斷開連接。</p><p> 2.服務(wù)器模塊監(jiān)聽網(wǎng)絡(luò)上的客戶端模塊是否有與本機(jī)進(jìn)行通信的需求。若有需求,就建立連接,接收消息,通過ActionListener接口進(jìn)行偵聽,當(dāng)用戶點(diǎn)擊按鈕后,啟動(dòng)一個(gè)聊天界面,將消息
68、通過客戶端模塊顯示出來。</p><p> 以上就是服務(wù)器模塊最主要的兩個(gè)任務(wù)。</p><p> 客戶端應(yīng)該完成的工作包括:</p><p> 1.向需要通信的主機(jī)發(fā)送連接請求,若成功,通過ServerSocket進(jìn)行連接,端口默認(rèn)為5001。</p><p> 2.向已建立連接的主機(jī)發(fā)送消息。</p><p&g
69、t; 3.顯示本機(jī)服務(wù)器接收的信息。</p><p> 除此之外,本系統(tǒng)還講實(shí)現(xiàn)群聊功能:默認(rèn)239.0.0.0為廣播地址,用UDP技術(shù)通過廣播的方式把消息傳遞給局域網(wǎng)內(nèi)每個(gè)用戶的手中。從原理上講,跟實(shí)現(xiàn)客戶端的原理差不多,只不過這里不是點(diǎn)對點(diǎn)兩人通信。</p><p> 3 JAVAqq局域網(wǎng)聊天程序的系統(tǒng)分析與設(shè)計(jì)</p><p> 3.1 JAVA
70、qq局域網(wǎng)聊天程序的總體設(shè)計(jì)要點(diǎn)</p><p> 聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對布局進(jìn)入大量美化以及動(dòng)畫設(shè)計(jì)等等,而聊天室只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):</p><p><b> 1、實(shí)現(xiàn)思想</b></p><
71、p> 局域網(wǎng)基于P2P上的聊天程序一般都是以服務(wù)器模塊提供連接響應(yīng),使用者通過客戶端模塊連接,與用戶交談,這是一個(gè)面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器和客戶端兩個(gè)模塊的程序。</p><p> 2、服務(wù)器模塊工作流程</p><p> 服務(wù)器模塊通過socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè)Socket數(shù)組后,與指定的本地端口綁定,就可以在端口進(jìn)行偵聽list
72、en()。如果有用戶連接請求,則建立一個(gè)Socket,將客戶端地址賦給這個(gè)Socket。然后就可以相互傳遞信息了。</p><p> 3、客戶端模塊工作流程</p><p> 客戶端程序相對簡單,只需要建立一個(gè)Socket與服務(wù)器模塊連接,成功后通過這個(gè)Socket來發(fā)送和接收數(shù)據(jù)就可以了。</p><p> 系統(tǒng)通過ActionListener接口來監(jiān)聽用戶
73、的對按鈕的點(diǎn)擊,來啟動(dòng)各聊天窗口進(jìn)行相關(guān)工作,如私聊,群聊等。</p><p> 3.2 JAVAqq局域網(wǎng)聊天程序的設(shè)計(jì)步驟及功能模塊劃分</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> 程序的登錄窗口,從此窗口中,輸入用戶名,點(diǎn)擊“登陸”來初始化一個(gè)StateFrame對象,并在顯示器上顯
80、示出客戶端的主界面。在后期的完善中,會(huì)完成記住用戶名及自動(dòng)登錄功能。主要通過將用戶名寫入一個(gè)記事本保存起來。</p><p> 2.StateFrame</p><p> public final static int DEFAULT_PORT=8322;//默認(rèn)端口</p><p> public final static int CATCH_PORT=73
81、22;</p><p> public final static int TCP_PORT=6322;//默認(rèn)TCP連接端口</p><p> public void init(){//初始化應(yīng)用程序窗口</p><p><b> ……</b></p><p> friList.addActionListener
82、(new ActionListener(){</p><p> //用ActionListener接口來對圖形界面中的各個(gè)組件進(jìn)行監(jiān)聽</p><p> public void actionPerformed(ActionEvent e) {</p><p> //雙擊登錄到列表框內(nèi)容時(shí)觸發(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> //啟動(dòng)私聊主界面</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ā)送本機(jī)的IP以及請求響應(yīng)并對相應(yīng)的組播端進(jìn)行監(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ā)送一個(gè)登錄信息給已登錄的用戶,通知他們本程序上線。</p><p> //包的數(shù)據(jù)結(jié)構(gòu)為:判斷位+用戶名+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> 用來顯示用用戶名及在線人的窗口,并對窗口中各組件實(shí)施監(jiān)聽。讓其可順利生成各個(gè)聊天主界面。</p><p><b> 3.Catcher</b></p><p> //實(shí)現(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”時(shí)反送一個(gè)含有對方用戶名以及本機(jī)的IP的數(shù)據(jù)包到組播組</p><p><b> ……</b></p><p><b> }</b></p><p>
97、; public void Connect(String check){ //Connect()方法實(shí)現(xiàn)了對對方回應(yīng)本機(jī)信息的過程,</p><p> //其中第一以及最后一個(gè)為無用信息,在接受方被吸收掉</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對象進(jìn)行處理。</p><p><b> 5.CheckIn</b></p><p> //對回應(yīng)信息的端口的監(jiān)聽,一旦收到回應(yīng)信息則開啟一個(gè)新線程對其進(jì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()方法實(shí)現(xiàn)對回應(yīng)的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);//啟動(dòng)一個(gè)私聊主界面</p><p><b> }</b></
114、p><p><b> ……</b></p><p><b> }</b></p><p> 根據(jù)所得到對方的IP信息建立一個(gè)TCP連接,并啟動(dòng)一個(gè)私聊主界面,進(jìn)行TCP通信。</p><p> 8.UserInfo</p><p> public class UserI
115、nfo {//初始化用戶信息,姓名以及IP地址,姓名是通過登錄界面由用戶鍵入的,IP</p><p> //地址是程序直接由機(jī)器獲取的</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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)
- java畢業(yè)設(shè)計(jì)----基于java局域網(wǎng)聊天程序設(shè)計(jì)與實(shí)現(xiàn)(附源代碼)
- java課程設(shè)計(jì)--局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- 局域網(wǎng)聊天程序java課程設(shè)計(jì)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java局域網(wǎng)聊天軟件
- 基于java的局域網(wǎng)聊天系統(tǒng)
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- 軟件課程設(shè)計(jì)---局域網(wǎng)聊天程序
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計(jì)報(bào)告
- java局域網(wǎng)聊天軟件大學(xué)設(shè)計(jì)好sqlserver
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計(jì)報(bào)告
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- 軟件課程設(shè)計(jì)報(bào)告--局域網(wǎng)聊天程序
- 基于Socket技術(shù)的局域網(wǎng)聊天系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- c++局域網(wǎng)聊天軟件設(shè)計(jì)與實(shí)現(xiàn)
- 局域網(wǎng)聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).doc
- 畢業(yè)設(shè)計(jì)--局域網(wǎng)聊天系統(tǒng)
- 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論