基于JAVA的分布式聊天系統(tǒng)設(shè)計(jì)(含源)_第1頁(yè)
基于JAVA的分布式聊天系統(tǒng)設(shè)計(jì)(含源)_第2頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、畢業(yè)論文題目:基于JAVA的聊天系統(tǒng)設(shè)計(jì)學(xué)生姓名:*學(xué)生學(xué)號(hào):系別:專業(yè):屆別:2011指導(dǎo)教師:*2011屆本科畢業(yè)論文目錄前言(3)1概述(3)1.1開(kāi)發(fā)背景(4)1.2JAVA語(yǔ)言簡(jiǎn)介(4)1.2.1JAVA語(yǔ)言的特點(diǎn)(4)1.2.2 JAVA環(huán)境配置(5)1.3分布式簡(jiǎn)介(7)1.4JAVA語(yǔ)言在分布式系統(tǒng)的應(yīng)用(8)2 需求分析(9)2.1系統(tǒng)說(shuō)明錯(cuò)誤!未定義書(shū)簽。(9)2.2系統(tǒng)功能簡(jiǎn)介錯(cuò)誤!未定義書(shū)簽。(9)2.2.1基本功能錯(cuò)誤!未定義書(shū)簽。(9)2.2.2界面設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。0)3系統(tǒng)設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。0)3.1系統(tǒng)設(shè)計(jì)思想(錯(cuò)誤!未定義書(shū)簽。0)3.2 聊天系

2、統(tǒng)的功能模塊設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。0)3.2.1聊天系統(tǒng)工作原理圖(錯(cuò)誤!未定義書(shū)簽。0)3.2.2聊天系統(tǒng)功能圖(錯(cuò)誤!未定義書(shū)簽。1)3.2.3數(shù)據(jù)庫(kù)設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。2)4詳細(xì)設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。2)4.1開(kāi)發(fā)環(huán)境工具(錯(cuò)誤!未定義書(shū)簽。2)4.2詳細(xì)代碼及說(shuō)明(錯(cuò)誤!未定義書(shū)簽。3)4.2.1服務(wù)器程序設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。3)4.2.2客戶端程序設(shè)計(jì)(錯(cuò)誤!未定義書(shū)簽。3)5測(cè)試(錯(cuò)誤!未定義書(shū)簽。7)6總結(jié)錯(cuò)誤!未定義書(shū)簽。(19)6.1畢業(yè)設(shè)計(jì)總結(jié)與展望錯(cuò)誤!未定義書(shū)簽。(19)6.2經(jīng)驗(yàn)和感想(錯(cuò)誤!未定義書(shū)簽。0)致謝(錯(cuò)誤!未定義書(shū)簽。0)參考文獻(xiàn)(錯(cuò)誤!未定

3、義書(shū)簽。1)21基于JAVA的分布式聊天系統(tǒng)設(shè)計(jì)學(xué)生:*指導(dǎo)老師:*摘要:隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天軟件已經(jīng)作為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。本次設(shè)計(jì)的聊天系統(tǒng)就是模仿騰訊QQ來(lái)設(shè)計(jì)的。該系統(tǒng)開(kāi)發(fā)主要包括網(wǎng)絡(luò)聊天服務(wù)器程序和網(wǎng)絡(luò)聊天客戶端程序兩個(gè)方面。前者通過(guò)Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來(lái)的信息,并能刷新用戶列表。后者通過(guò)與服務(wù)器建立連接,來(lái)進(jìn)行客戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過(guò)直接繼承Thread

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

5、*Abstract:AlongwiththefastdevelopmentofInternet,thenetworkchatingtoolhasalreadybecomeonekindofimportantcommunicationtoolsandreceivedmoreandmorewebcamsfavor.Atpresent,manyextremelygoodchatingtoolshaveappeared.forexample,Netmeeting,QQ,MSN-Messagerandsoon.Thissystemdevelopmentmainlyincludestwoaspectsof

6、theserverprocedureofthenetworkchatandthecustomerprocedureofthenetworkchat.TheformerestablishestheserverthroughtheSocket,theservercanreadanddelivertheinformationwhichclientsidesends,andcanrenovatetheuserstabulation.Thelattermakeaconnectionwiththeserver,carriesoncommunicationbetweentheclientsideandthe

7、clientside.WiththeLANcorrespondencemechanismprinciple,throughinherittingtheThreadkindtoestablishthemultithreadingdirectly.Inthedevelopment,itusestheelementarytheoryknowledgewhichthecomputernetworkprogrammes.forexample,TCP/IPagreement,Client/Serverpattern,networkprogrammingdesignmethodandsoon.Inthene

8、tworkprogramming,itrealizesreadingandtransmissionoftheinformation,thatis,informatonflowsrealizetheinformationexchange,introduceinformationflowanalysisforrealizingasystem,inwhichcontainessomebasicsoftwareengineeringmethods.Afteranalyzesthesesituations,thisLANchatingtooltakesEclipseasthebasicdevelopme

9、ntenvironmentandcompilesinJAVAlanguage.first,itwillestablishthesystemapplicationprototypeinashorttime.then,fortheinitialprototypesystem,itneedsconstantlyrevisedandimproved,untilaviablesystem.Keywords:JAVA;distributed;lan;Socket;C/S前言網(wǎng)上流行的諸如QQ的即時(shí)聊天工具是我們所熟知的聊天系統(tǒng),只要記得對(duì)方的號(hào)碼,上網(wǎng)時(shí)可以呼他,無(wú)論他在哪里,都可以和他進(jìn)行即時(shí)聊天。這些

10、軟件系統(tǒng)大多都采用C/S工作模式2,制作這些軟件的公司在互聯(lián)網(wǎng)上免費(fèi)提供下載客戶端程序,卻不提供服務(wù)器程序。所以對(duì)于未與互聯(lián)網(wǎng)連接的私有網(wǎng)絡(luò),這些軟件根本就用不上,更不會(huì)提供程序源代碼。為了弄懂這些軟件的工作原理,所以我就開(kāi)始著手本課題的研究。分布式系統(tǒng)(distributedsystem)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。正是因?yàn)檐浖奶匦?,所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。因此,網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。內(nèi)聚性是指每一個(gè)數(shù)據(jù)庫(kù)分布節(jié)點(diǎn)高度自治,有本地的數(shù)據(jù)庫(kù)管理系統(tǒng)。透明性是指每一個(gè)數(shù)據(jù)庫(kù)分布節(jié)點(diǎn)對(duì)用戶的應(yīng)用來(lái)說(shuō)都是透明的,看不出是本地還是

11、遠(yuǎn)程。在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,用戶感覺(jué)不到數(shù)據(jù)是分布的,即用戶不須知道關(guān)系是否分割、有無(wú)副本、數(shù)據(jù)存于哪個(gè)站點(diǎn)以及事務(wù)在哪個(gè)站點(diǎn)上執(zhí)行等?;诰W(wǎng)絡(luò)的軟件系統(tǒng)大多都是分布式系統(tǒng),只不過(guò)在系統(tǒng)的復(fù)雜程度上有所區(qū)別而已。這次研究的聊天系統(tǒng)就是典型的分布式系統(tǒng)。JAVA本身就是一種分布式語(yǔ)言。JAVA語(yǔ)言支持Internet應(yīng)用的開(kāi)發(fā),在基本的JAVA應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(JAVAnet),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫(kù),包括URL、URLConnection、Socket、ServerSocket等。JAVA的RMI(遠(yuǎn)程方法激活)機(jī)制也是開(kāi)發(fā)分布式應(yīng)用的重要手段。1 概述1.1開(kāi)發(fā)背

12、景隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來(lái)越離不開(kāi)信息網(wǎng)絡(luò)的支持,而聊天室是人們最常見(jiàn),最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái)。其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請(qǐng)求,易于維護(hù)和更新。1.2JAVA語(yǔ)言簡(jiǎn)介JAVA是一個(gè)由Sun公司開(kāi)發(fā)而成的新一代編程語(yǔ)言。使用它可在不同種機(jī)器、不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開(kāi)發(fā)軟件。不論你使用的是哪一種WWW瀏覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持JAVA”,你就可以看到生動(dòng)的主頁(yè)。JAVA已經(jīng)逐步成為Internet應(yīng)用的主要開(kāi)發(fā)

13、語(yǔ)言。它徹底改變了應(yīng)用軟件的開(kāi)發(fā)模式,帶來(lái)了自PC機(jī)以來(lái)又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。JAVA的出現(xiàn)是計(jì)算機(jī)信息交換的一個(gè)重要里程碑。在單機(jī)時(shí)代,程序進(jìn)程之間靠共享存儲(chǔ)進(jìn)行變量交換;在網(wǎng)絡(luò)時(shí)代,運(yùn)行在不同宿主機(jī)上的程序按網(wǎng)絡(luò)協(xié)議進(jìn)行無(wú)格式的消息(二進(jìn)制字符流)交換,消息的語(yǔ)義由交換程序雙方維護(hù);在JAVA時(shí)代,運(yùn)行在網(wǎng)絡(luò)上的程序進(jìn)程交換的是小應(yīng)用程序(Applet)。它是一個(gè)對(duì)象,由一組屬性和方法構(gòu)成,是一個(gè)可執(zhí)行的實(shí)體;不僅有數(shù)據(jù)的狀態(tài),而且有定義在數(shù)據(jù)上的操作。未來(lái)可能進(jìn)行代表(Agent)交換,代理有一定的智能性,那便是信息交換的更高級(jí)階段。1.2.1JAVA語(yǔ)言的

14、特點(diǎn)1. 簡(jiǎn)單性2. 面向?qū)ο驤AVA語(yǔ)言的設(shè)計(jì)集中于對(duì)象及其接口,它提供了簡(jiǎn)單的類機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝了它的狀態(tài)變量以及相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,并且通過(guò)繼承機(jī)制,子類可以使用父類所提供的方法,實(shí)現(xiàn)了代碼的復(fù)用。3. 分布性JAVA是面向網(wǎng)絡(luò)的語(yǔ)言。通過(guò)它提供的類庫(kù)可以處理TCP/IP協(xié)議5,用戶可以通過(guò)URL地址在網(wǎng)絡(luò)上很方便地訪問(wèn)其它對(duì)象。4.魯棒性5.安全性用于網(wǎng)絡(luò)、分布環(huán)境下的JAVA必須要防止病毒的入侵。JAVA不支持指針,一切對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止程序員使用“特洛伊”木馬等欺騙手段訪問(wèn)對(duì)象的私有成

15、員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。6. 體系結(jié)構(gòu)中立7. 可移植性8. 解釋執(zhí)行9.高性能10.多線程多線程機(jī)制使應(yīng)用程序能夠并行執(zhí)行,而且同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正確操作。通過(guò)使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易地實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互行為。11.動(dòng)態(tài)性1.2.2JAVA環(huán)境配置本方案設(shè)計(jì)采用Eclipse,在進(jìn)行具體的操作之前,需要給系統(tǒng)下載安裝jdk,安裝完成jdk之后,還需要對(duì)系統(tǒng)環(huán)境變量進(jìn)行設(shè)置。步驟如下:第一步:進(jìn)入我的桌面,右擊“我的電腦”,選擇“屬性”選項(xiàng),進(jìn)入“系統(tǒng)屬性“對(duì)話框,單擊”高級(jí)標(biāo)簽“,如圖1

16、-1所示。第二步:點(diǎn)擊上圖箭頭所示“環(huán)境變量”,進(jìn)入圖1-2畫(huà)面。圖1-1系統(tǒng)屬性TXAJiDWErxrHTIWF7HP70HCA7_HDNIrj?-rlr-I_05d:VSjnApScTTtt-Vbin:EkSuriAp.匚:llioEin已rvt弓mdSettiuLesVfEajts.匚:tDoDune口andSettin百sfE孔nm.r4C4c:FF_Ha_MDSU匚:譏nmo小護(hù)曲HO-冷UWEa:jE=dl:l.4.205meekdf打;OSE-*1-1Winlyhs_nrlKVTnnnvr亠re.hk.V.詼?zhǔn)乐穒?stscijswa*ITJAVAc-gHelloWorldApp

17、.java編譯的結(jié)果是生成字節(jié)碼文件HelloWorldApp.class。最后用JAVA解釋器來(lái)運(yùn)行該字節(jié)碼文件:c:JAVAHelloWorldApp結(jié)果是在屏幕上顯示“HelloWorld!”。表明環(huán)境變量配置成功。1.3分布式簡(jiǎn)介所謂分布式計(jì)算是一門計(jì)算機(jī)科學(xué),它研究如何把一個(gè)需要非常巨大的計(jì)算能力才能解決的問(wèn)題分成許多小的部分,然后把這些部分分配給許多計(jì)算機(jī)進(jìn)行處理,最后把這些計(jì)算結(jié)果綜合起來(lái)得到最終的結(jié)果。分布式網(wǎng)絡(luò)存儲(chǔ)技術(shù)是將數(shù)據(jù)分散的存儲(chǔ)于多臺(tái)獨(dú)立的機(jī)器設(shè)備上。分布式網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷,利用位置服務(wù)器定位存儲(chǔ)信息,不但解決了傳統(tǒng)集中

18、式存儲(chǔ)系統(tǒng)中單存儲(chǔ)服務(wù)器的瓶頸問(wèn)題,還提高了系統(tǒng)的可靠性、可用性和擴(kuò)展性。1. 分布式應(yīng)用最近的分布式計(jì)算項(xiàng)目已經(jīng)被用于使用世界各地成千上萬(wàn)位志愿者的計(jì)算機(jī)的閑置計(jì)算能力,通過(guò)因特網(wǎng),您可以分析來(lái)自外太空的電訊號(hào),尋找隱蔽的黑洞,并探索可能存在的外星智慧生命;您可以尋找超過(guò)1000萬(wàn)位數(shù)字的梅森質(zhì)數(shù);您也可以尋找并發(fā)現(xiàn)對(duì)抗艾滋病病毒的更為有效的藥物。這些項(xiàng)目都很龐大,需要驚人的計(jì)算量,僅僅由單個(gè)的電腦或是個(gè)人在一個(gè)能讓人接受的時(shí)間內(nèi)計(jì)算完成是決不可能的。2. 分布式計(jì)算與互聯(lián)網(wǎng)的普及隨著計(jì)算機(jī)的普及,個(gè)人電腦開(kāi)始進(jìn)入千家萬(wàn)戶。與之伴隨產(chǎn)生的是電腦的利用問(wèn)題。越來(lái)越多的電腦處于閑置狀態(tài),即使在開(kāi)

19、機(jī)狀態(tài)下CPU的潛力也遠(yuǎn)遠(yuǎn)不能被完全利用。我們可以想象,一臺(tái)家用的計(jì)算機(jī)將大多數(shù)的時(shí)間花費(fèi)在“等待”上面。即便是使用者實(shí)際使用他們的計(jì)算機(jī)時(shí),處理器依然是寂靜的消費(fèi),依然是不計(jì)其數(shù)的等待(等待輸入,但實(shí)際上并沒(méi)有做什么)?;ヂ?lián)網(wǎng)的出現(xiàn),使得連接調(diào)用所有這些擁有限制計(jì)算資源的計(jì)算機(jī)系統(tǒng)成為了現(xiàn)實(shí)。1.4JAVA語(yǔ)言在分布式系統(tǒng)的應(yīng)用分布式計(jì)算不是一門年輕的技術(shù),早在上個(gè)世紀(jì)70年代末便已是計(jì)算機(jī)科學(xué)的一個(gè)獨(dú)立分支了;它也不是一門冷僻的技術(shù),從C/S模式到P2P模式,從集群計(jì)算到網(wǎng)格計(jì)算,乃至風(fēng)靡當(dāng)下的云計(jì)算,都是其表演的舞臺(tái)。另一方面,JAVA作為一門應(yīng)網(wǎng)絡(luò)而生的語(yǔ)言,對(duì)分布式計(jì)算有著天然的友好

20、性,同時(shí)也是當(dāng)今最流行的編程語(yǔ)言。然而令人稍感意外的是,以“分布式JAVA應(yīng)用”為專題的書(shū)籍并不多見(jiàn),佳作則更少。至于國(guó)人所著者,請(qǐng)恕在下孤陋,尚未得見(jiàn)。不過(guò)細(xì)想之下,其實(shí)不足為奇。要開(kāi)發(fā)一個(gè)高質(zhì)量的分布式JAVA應(yīng)用,以達(dá)到高性能、可伸縮、高可用、低延遲的要求,同時(shí)保證一致性、容錯(cuò)性、可恢復(fù)性和安全性,是何等的不易啊。它對(duì)程序開(kāi)發(fā)的挑戰(zhàn)在于:不僅需要對(duì)JAVA語(yǔ)言、類庫(kù)、各種框架及相關(guān)工具極為熟悉,還需要對(duì)底層的JVM機(jī)制6、各種網(wǎng)絡(luò)協(xié)議有足夠的了解;它對(duì)分析設(shè)計(jì)的挑戰(zhàn)在于:不僅需要熟悉傳統(tǒng)的應(yīng)用架構(gòu)模式,還需要掌握適用于分布式應(yīng)用的架構(gòu)模式和算法設(shè)計(jì)。此外,分布式應(yīng)用對(duì)數(shù)據(jù)庫(kù)管理員、測(cè)試分

21、析人員等也提出了更高的要求。大型應(yīng)用通常會(huì)拆分為多個(gè)子系統(tǒng)來(lái)實(shí)現(xiàn),對(duì)于JAVA來(lái)說(shuō),這些子系統(tǒng)可能部署在同一臺(tái)機(jī)器的多個(gè)不同的JVM7中,也可能部署在不同的機(jī)器上,但這些子系統(tǒng)又不是完全獨(dú)立的,要相互通信來(lái)共同實(shí)現(xiàn)業(yè)務(wù)功能,對(duì)于此類JAVA應(yīng)用,我們稱之為分布式JAVA應(yīng)用。對(duì)于分布式JAVA應(yīng)用,本系統(tǒng)設(shè)計(jì)主要采用一種非常典型的方法來(lái)實(shí)現(xiàn),即基于消息方式實(shí)現(xiàn)系統(tǒng)間的通信方式:當(dāng)系統(tǒng)之間要通信時(shí),就向外發(fā)送消息,消息可以是字節(jié)流、字節(jié)數(shù)組,甚至是JAVA對(duì)象,其他系統(tǒng)接收到消息后則進(jìn)行相應(yīng)的業(yè)務(wù)處理。消息方式的系統(tǒng)間通信,通常基于網(wǎng)絡(luò)協(xié)議來(lái)實(shí)現(xiàn),常用的實(shí)現(xiàn)系統(tǒng)間通信的協(xié)議有:TCP/IP和UD

22、P/IP。TCP/IP是一種可靠的網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)膮f(xié)議。TCP/IP要求通信雙方首先建立連接,之后再進(jìn)行數(shù)據(jù)的傳輸。TCP/IP負(fù)責(zé)保證數(shù)據(jù)傳輸?shù)目煽啃?,包括?shù)據(jù)的可到達(dá)、數(shù)據(jù)到達(dá)的順序等,但由于TCP/IP需要保證連接及數(shù)據(jù)傳輸?shù)目煽?,因此可能?huì)犧牲一些性能。UDP/IP是一種不保證數(shù)據(jù)一定到達(dá)的網(wǎng)絡(luò)數(shù)據(jù)傳輸協(xié)議。UDP/IP并不直接給通信的雙方建立連接,而是發(fā)送到網(wǎng)絡(luò)上進(jìn)行傳遞。由于UDP/IP不建立連接,并且不能保證數(shù)據(jù)傳輸?shù)目煽?,因此性能上表現(xiàn)相對(duì)較好,但可能會(huì)出現(xiàn)數(shù)據(jù)丟失以及數(shù)據(jù)亂序的現(xiàn)象。2 需求分析2.1 系統(tǒng)說(shuō)明聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶端。簡(jiǎn)單分析一下兩個(gè)方面所要完

23、成的任務(wù),對(duì)設(shè)計(jì)這個(gè)程序來(lái)說(shuō),等于完成了一半。首先來(lái)看一下服務(wù)器端的任務(wù):1. 服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽(tīng)是否有客戶端連接或者斷開(kāi)連接(包括判斷沒(méi)有響應(yīng)的連接超時(shí))。2. 服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。以上就是服務(wù)器端最主要的兩個(gè)任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜??蛻舳藨?yīng)該完成的工作包括:1. 與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。2. 接收來(lái)自服務(wù)器的信息。相對(duì)服務(wù)器而言,客戶端的任務(wù)更加簡(jiǎn)單,有了以上的簡(jiǎn)單分析,可以知道,解決上述四個(gè)問(wèn)題,即完成了該聊天系統(tǒng)的核心。2.2 系統(tǒng)功能

24、簡(jiǎn)介2.2.1基本功能1. 戶可以注冊(cè)。2. 用戶可以登錄。3. 用戶可以添加好友。4用戶可以刪除好友。5用戶可以發(fā)送和接收消息。2.2.2界面設(shè)計(jì)程序界面主要參考騰迅公司的QQ2000,在實(shí)現(xiàn)時(shí)采用的JAVA的Swing圖形包。開(kāi)發(fā)工具用的是Eclipse。用戶在使用的過(guò)程中一目了然。3 系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)設(shè)計(jì)思想聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫(huà)設(shè)計(jì)等等,而聊天室只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):1實(shí)現(xiàn)思想在Internet上的聊天程序一般都

25、是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。2服務(wù)器端工作流程服務(wù)器端通過(guò)Socket()系統(tǒng)調(diào)用創(chuàng)建一個(gè)Socket數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定bind(),就可以在端口進(jìn)行偵聽(tīng)listen。如果有客戶端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空Socket,將客戶端地址賦給這個(gè)Socket。然后登錄成功的客戶就可以在服務(wù)器上聊天了。3客戶端工作流程客戶端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過(guò)

26、這個(gè)Socket來(lái)發(fā)送和接收數(shù)據(jù)就可以了。3 .2聊天系統(tǒng)的功能模塊設(shè)計(jì)3.2.1 聊天系統(tǒng)工作原理圖:圖3-1聊天系統(tǒng)原理圖3.2.2聊天系統(tǒng)功能圖圖3-2聊天系統(tǒng)功能結(jié)構(gòu)圖3.2.3數(shù)據(jù)庫(kù)設(shè)計(jì)系統(tǒng)采用任何一種流行的,Java支持的數(shù)據(jù)庫(kù),本系統(tǒng)采用了Microsoft公司的SQLServer2000作為后臺(tái)數(shù)據(jù)庫(kù)。通過(guò)對(duì)現(xiàn)在流行的一些Icq的參考,建立數(shù)據(jù)庫(kù),名為javaicq,數(shù)據(jù)庫(kù)共建立兩個(gè)表,一個(gè)是用戶的基本信息,包括呢稱,Jicq號(hào)碼等。一個(gè)是用戶的好友表,包括用戶自己的號(hào)碼和好友的號(hào)碼。(1)用戶的基本信息表(表名icq)表3-1用戶的基本信息表(表名icq)序號(hào)字段名含義數(shù)據(jù)類

27、型NULL1Icqno用戶的號(hào)碼intNo2Nickname用戶的呢稱CharNo3Password用戶的密碼CharNo4Status用戶在線否BitNo5Ip用戶IP地址CharYes6Info用戶的資料VarcharYes7Pic用戶的頭像號(hào)IntYes8Sex用戶性別CharYes9Email用戶的emailCharYes10Place用戶的籍貫Charyes其中Icqno字段為自動(dòng)增加。(其他還可以添加諸如電話號(hào)碼等字段作為更多選擇)(2)用戶的好友表(表名friend)表3-2用戶的好友表(表名friend)序號(hào)字段名含義數(shù)據(jù)類型NULL1Icqno用戶的號(hào)碼IntNo2Frien

28、d好友的號(hào)碼IntNo4 詳細(xì)設(shè)計(jì)4.1開(kāi)發(fā)環(huán)境工具基于JAVA聊天系統(tǒng)的設(shè)計(jì)主要運(yùn)用JAVA與語(yǔ)言與Socket類結(jié)合而開(kāi)發(fā)。其開(kāi)發(fā)的主要環(huán)境包括:服務(wù)器端:(Windows平臺(tái))首先應(yīng)有JAVA環(huán)境jdk,建議采用jdkl.4以上,另外還需配置classpath環(huán)境變量,本系統(tǒng)開(kāi)發(fā)工具為Eclipse??蛻舳耍褐灰蠮AVA環(huán)境jdk就可以,建議jdkl.4。4.2 詳細(xì)代碼及說(shuō)明(因篇幅有限,省略代碼)4.2.1 服務(wù)器程序設(shè)計(jì)服務(wù)器與客戶間通過(guò)套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡(jiǎn)單,JAVAAPI為處理套接口的通信提供了一個(gè)類.Socket.,使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用

29、程序相對(duì)容易.服務(wù)器采用多線程以滿足多用戶的請(qǐng)求,通過(guò)JDBC與后臺(tái)數(shù)據(jù)庫(kù)連接,并通過(guò)創(chuàng)建一個(gè)ServerSocket對(duì)象來(lái)監(jiān)聽(tīng)來(lái)自客戶的連接請(qǐng)求,默認(rèn)端口為8080,然后無(wú)限循環(huán)調(diào)用acceptor方法接受客戶程序的連接4.2.2 客戶程序設(shè)計(jì)(部分)客戶通過(guò)Socket(InetAddress,port)建立與服務(wù)器的連接。服務(wù)器與客戶都通過(guò)構(gòu)造BufferedReader,PrintWriter來(lái)建立輸入輸出流,然后雙方通過(guò)該輸入輸出流來(lái)相互傳遞信息,一旦收到客戶方的連接請(qǐng)求,服務(wù)器accept。方法返回一個(gè)新建的Socket對(duì)象。客戶端然后向服務(wù)器發(fā)送消息,比如注冊(cè),登錄,查找好友等,

30、服務(wù)器收到來(lái)自客戶的請(qǐng)求后,針對(duì)不同的消息處理請(qǐng)求,雖然UDP不可靠但是對(duì)于icq可靠性并不太重要,而且UDP快速,所以客戶間發(fā)送信息通過(guò)UDP10。用戶登錄時(shí)通過(guò)類DatagramPacket和DatagramSocket創(chuàng)建UDP包括其本地接受端口以及發(fā)送端口,默認(rèn)端口為5000和5001,通過(guò)取得的好友的IP地址來(lái)向好友發(fā)送消息(send(DatagramPacket)和接受消息(receive(DatagramPacket)。當(dāng)用戶通過(guò)UDP收到消息后,可以通過(guò)DatagramPacket的方法InetAddressgetAddress()得到對(duì)方的ip地址,通過(guò)對(duì)好友列表比較以判斷是

31、誰(shuí)并提示用戶收到某某的消息,然后用戶選擇該用戶查看消息,如果好友列表沒(méi)有該人就顯示收到陌生人的消息。用戶可以按陌生人按鈕查看消息。1用戶注冊(cè)。當(dāng)服務(wù)器收到用戶的注冊(cè)請(qǐng)求,便開(kāi)始接受客戶傳第的信息,諸如客戶的呢稱啦,性別,籍貫,頭像,個(gè)人資料等,接受完畢后,便通過(guò)JdbcOdbc與后臺(tái)數(shù)據(jù)庫(kù)連接,然后向數(shù)據(jù)庫(kù)添加記錄,如果成功,便向客戶返回其Jicq號(hào)碼,并在數(shù)據(jù)庫(kù)中注冊(cè)用戶的IP地址,然后更新其Status為1即用戶在線??蛻羰盏椒?wù)器返回的信息后,便打開(kāi)主程序窗口,并同時(shí)開(kāi)始創(chuàng)建UDP以便在用戶之間建立聯(lián)系。部分程序代碼如下:voidjButton1_mouseClicked(MouseEv

32、ente)InputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println(new);out.println(nickname.getText().trim();out.println(password.getPassword();out.println(email.getText().trim();out.println(info.getText().

33、trim();out.println(place.getSelectedItem();out.println(headpic.getSelectedIndex();/headpicindexintno;no=Integer.parseInt(in.readLine();/System.out.print(no);Stringstr=;str=in.readLine().trim();if(str.equals(false)JOptionPane.showMessageDialog(this,對(duì)不起,出錯(cuò)了:-(,ok,JOptionPane.INFORMATION_MESSAGE);elseJ

34、OptionPane.showMessageDialog(this,yourjavaicq#is+no,ok,JOptionPane.INFORMATION_MESSAGE);this.dispose();MainWinf2=newMainWin(no,sername,serverport);f2.setVisible(true);/System.out.println(n);/while(!str.equals(ok);/socket.close();catch(IOExceptione1)2用戶登錄。在客戶端,用戶輸入其jicq號(hào)碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器

35、收到后,開(kāi)始通過(guò)JdbcOdbcw讀取數(shù)據(jù)庫(kù),然后與用戶輸入的信息比較,如果相同就向客戶返回成功消息并將其Status字段設(shè)為1表示上線了以及注冊(cè)其IP地址,否則返回錯(cuò)誤,如果客戶收到成功信息就打開(kāi)主窗口,否則提示出錯(cuò)。如果成功,便打開(kāi)主程序窗口,并同時(shí)開(kāi)始創(chuàng)建UDP以便在用戶之間建立聯(lián)系。然后客戶向服務(wù)器請(qǐng)求讀取好友名單,服務(wù)器收到該請(qǐng)求,開(kāi)始讀取數(shù)據(jù)庫(kù)中的friend表,得到好友的號(hào)碼后,再在icq表中讀取好友資料,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友,比如頭像,呢稱。并且建立幾個(gè)矢量(Vector)用以存儲(chǔ)好友的呢稱,jicq號(hào)碼,頭像編號(hào),ip地址等信息。部分程序如下

36、:voidlogin_mouseClicked(MouseEvente)trySocketsocket=newSocket(InetAddress.getByName(server),serport);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream(),true);out.println(login)

37、;out.println(jicq.getText();out.println(password.getPassword();Stringstr=;dostr=in.readLine().trim();if(str.equals(false)JOptionPane.showMessageDialog(this,對(duì)不起,出錯(cuò)了:-(,ok,JOptionPane.INFORMATION_MESSAGE);elsethis.dispose();intg=Integer.parseInt(jicq.getText();MainWinf2=newMainWin(g,server,serport);f2

38、.setVisible(true);/System.out.println(n);/while(!str.equals(ok);catch(IOExceptione1)3. 用戶添加好友。客戶登錄后,按查找按鈕后,開(kāi)始向服務(wù)器發(fā)出查找服務(wù)器讀取數(shù)據(jù)庫(kù)表icq并向客戶返回其結(jié)果,客戶收到后在查找窗口中顯示,如果用戶選擇了一個(gè)好友,就向服務(wù)器發(fā)送添加好友請(qǐng)求,服務(wù)器收到后就向數(shù)據(jù)庫(kù)表friend中添加自己的號(hào)碼以及好友的號(hào)碼,并從icq表中讀取其基本信息返回給客戶端,然后客戶收到并在主窗口顯示該好友。并且通過(guò)UDP通知該客戶,對(duì)方收到該消息后,可以選擇添加該用戶為好友或者不。4. 用戶刪除好友。用

39、戶在其好友列表中選擇要?jiǎng)h除的好友并按刪除,然后向服務(wù)器發(fā)送刪除請(qǐng)求,服務(wù)器收到請(qǐng)求后,連接數(shù)據(jù)庫(kù)表friend刪除用戶及該好友的記錄,如果成功就向客戶返回成功消息,客戶收到后在其好友列表中刪除該好友。5. 用記發(fā)送和接收消息。用戶通過(guò)在好友列表里的好友的ip地址,通過(guò)UDP與其他用戶進(jìn)行信息交流。5測(cè)試首先啟動(dòng)服務(wù)器,如下圖:圖5-1準(zhǔn)備啟動(dòng)服務(wù)器當(dāng)點(diǎn)擊停止退出時(shí),則服務(wù)器就斷開(kāi)與客戶端的連接,停止通信。當(dāng)服務(wù)器啟動(dòng)成功之后,如下圖:圖5-2月服務(wù)器準(zhǔn)備就緒然后從客戶機(jī)連接,在局域網(wǎng)內(nèi)固定一臺(tái)計(jì)算機(jī)為服務(wù)器,所以IP和端口號(hào)都是固定的。然后客戶從登錄窗口進(jìn)行登錄,因此登錄界面如下:圖5-3客戶

40、機(jī)連接服務(wù)器當(dāng)連接失敗時(shí)則出現(xiàn)如下界面:圖5-4客戶機(jī)連接失敗當(dāng)連接服務(wù)器成功之后,就可以進(jìn)行客戶機(jī)之間的交談,交談界面如下:C2011-5-2923:21:23)5興直采烈地對(duì)所有人說(shuō):丈家好C2011-5-2923:22:19)秘密興高采烈地對(duì)所有人說(shuō):你好C2011-5-2923:22:37)秘密做了平鬼臉對(duì)所有人說(shuō):你們?cè)谧鍪裁?2011-5-2923:28:40)徴殺依依不舍地對(duì)所有人說(shuō):你好啊,在聊天呢(2011-5-2923:28:54)微殺依依不舍地對(duì)所有人說(shuō):你的論文弄的怎么樣了C2011-5-2923:32:12)秘密依依不舍地對(duì)所有人說(shuō):正在倏改呢

41、,好多地方郡在試著重新調(diào)試C2011-5-2923:32:56)兩句張丈嘴巴,打了牛哈矢對(duì)所有人說(shuō):不聊了,我先下了龍晩了,88(2011-5-2923:34:24)秘密依依不舍地對(duì)所有人說(shuō):好的,旳,我們都要淮備下了C2011-5-2923:34:30)秘密依依不舍地對(duì)所有人說(shuō):下歡聊啊圖5-5聊天界面交談過(guò)程中如果發(fā)生意外與服務(wù)器中斷,則會(huì)彈出如下對(duì)話框:圖5-6錯(cuò)誤信息另外可以在客戶端界面中設(shè)置關(guān)于軟件設(shè)計(jì)的信息,如下圖:Q0;對(duì)4叨設(shè)計(jì)人:羅金聊天室-客戶端Email:274997076QQ.COI版權(quán)所有20107011圖5-7軟件信息6總結(jié)6.1畢業(yè)設(shè)計(jì)總結(jié)與展望本畢業(yè)設(shè)計(jì)實(shí)現(xiàn)了簡(jiǎn)

42、單位的實(shí)時(shí)聊天功能,經(jīng)過(guò)細(xì)心的調(diào)試和排錯(cuò)解決了絕大部分的問(wèn)題。但幾乎每一個(gè)計(jì)算機(jī)程序都會(huì)有這樣那樣的不足,尤其是未經(jīng)過(guò)精心維護(hù)的非商業(yè)軟件。本聊天系統(tǒng)程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計(jì)課題來(lái)說(shuō),尤其在開(kāi)始初期,感覺(jué)邏輯復(fù)雜,難以控制,因此至今還有許多未能解決的缺陷。目前本聊天系統(tǒng)還有待完善的功能如下:1. 聊天系統(tǒng)缺乏好友列表;2. 沒(méi)有實(shí)現(xiàn)文件發(fā)送功能;3. 也沒(méi)有詳細(xì)考慮聊天室管理功能。盡管畢業(yè)設(shè)計(jì)到現(xiàn)在已接近尾聲,但是對(duì)于上述的缺陷,本人還會(huì)不斷對(duì)聊天系統(tǒng)進(jìn)一步的完善它,期望在今后的日子里憑借自身的技術(shù)把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。6.2經(jīng)驗(yàn)和感想基本JAVA聊天室開(kāi)發(fā)與實(shí)現(xiàn)作為畢業(yè)設(shè)計(jì),是本人目前做過(guò)的最大的程序。平時(shí)自己也常到其

溫馨提示

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

評(píng)論

0/150

提交評(píng)論