畢業(yè)論文_基于java局域網(wǎng)聊天軟件_畢業(yè)論文-(終稿)_第1頁
畢業(yè)論文_基于java局域網(wǎng)聊天軟件_畢業(yè)論文-(終稿)_第2頁
畢業(yè)論文_基于java局域網(wǎng)聊天軟件_畢業(yè)論文-(終稿)_第3頁
畢業(yè)論文_基于java局域網(wǎng)聊天軟件_畢業(yè)論文-(終稿)_第4頁
畢業(yè)論文_基于java局域網(wǎng)聊天軟件_畢業(yè)論文-(終稿)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本科畢業(yè)論文(畢業(yè)設(shè)計)題目局域網(wǎng)聊天軟件系院學(xué)生姓名學(xué)號專業(yè)年級完成日期指導(dǎo)教師摘要在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ。基于JAVA網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計使用JAVA編寫一個聊天系統(tǒng)。一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過JAVA提供的SOCKET類來連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對多點(diǎn)的而JAVA提供的多線程功能用多線程可完成多點(diǎn)對多點(diǎn)的聊天,數(shù)據(jù)庫管理系統(tǒng)用SQLSERVER2000完成并通過JDBCODBC橋訪問數(shù)據(jù)庫。本系統(tǒng)建立在JAVA平臺上,系統(tǒng)的設(shè)計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過SOCKET傳送消息。使用JAVA語言編寫,開發(fā)工具采用ECLIPSE。服務(wù)器端設(shè)計與實(shí)現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當(dāng)中同時運(yùn)行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。聊天系統(tǒng)完成后將可進(jìn)行多人對多人的聊天,對好友進(jìn)行添加、刪除,對新用戶的注冊,發(fā)送消息、接受消息等等功能。關(guān)鍵字多線程;客戶機(jī)/服務(wù)器;JAVA;SOCKET;ECLIPSE;TCP/IPABSTRACTASTHENETWORKBECOMEMOREANDMOREDEVELOPED,PEOPLEBECOMEMOREANDMORELEANTOTHENETWORK,ANDCANNOTLEAVEWITHOUTITTHISCAUSEDTHECHATMATERIALSBECOMEMORENUMEROUS,ASTHEOVERSEASICQSYSTEM,THEOICQSYSTEMTHATINVENTEDBYTENCENTCO,ANDSOONSOWECREATEANETWORKCHATMEDIUMJUSTLIKETHEQQJAVANETWORKPROGRAMMINGBASEDONTHEPOWER,THEUSEOFJAVADESIGNEDTOPREPAREGRADUATESACHATSYSTEMINGENERAL,THEMAJORITYOFTHECHATTOOLFORCLIENTANDSERVERPROGRAMINADDITIONTOSERVERSIDESTORAGEOFCUSTOMERDATAFORTHEDATABASE,THESYSTEMUSESACLIENT/SERVERARCHITECTUREMODELTHEADOPTIONOFJAVAPROVIDEDSOCKETCLASSCONNECTCLIENTANDSERVERANDBETWEENTHECLIENTANDSERVERCOMMUNICATEWITHEACHOTHER,ASTHECHATISTOPROVIDEPOINTTOMULTIPOINTANDMULTITHREADEDJAVAFUNCTIONTOBECOMPLETEDBYUSINGMULTITHREADEDCHATANDMOREPOINTTOMULTIPOINT,DATABASEMANAGEMENTSYSTEMWITHSQLSERVER2000THECOMPLETIONANDADOPTIONOFJDBCODBCBRIDGEACCESSTHEDATABASETHESYSTEMBUILTONTHEJAVAPLATFORM,THESYSTEMDESIGNUSINGOBJECTORIENTEDTECHNOLOGYANDOBJECTORIENTEDDESIGNPRINCIPLESSYSTEMUSESTHEC/SSTRUCTURE,CLIENTANDCLIENTSIDEANDSERVERSIDECLIENTANDSENDMESSAGESTHROUGHSOCKETTHEUSEOFJAVALANGUAGE,DEVELOPMENTTOOLSUSINGECLIPSEDESIGNANDIMPLEMENTATIONOFSERVERSIDEPROCESS,THEUSEOFMULTITHREADINGTECHNOLOGY,WHICHCANPROCESSINASINGLERUNATTHESAMETIMEANUMBEROFDIFFERENTTHREADS,THEIMPLEMENTATIONOFDIFFERENTTASKSPROCEDURESGREATLYENHANCEDTHEUSEOFSERVERRESOURCESCHATSYSTEMWILLALLOWPEOPLETOCOMPLETECHATTOMOREFRIENDS,ANDTHESYSTEMCANADD,DELETESOMEBODY,CANDEALWITHNEWUSERREGISTRATION,SENDMESSAGES,RECEIVEMESSAGESANDSOONKEYWORDSMULTITHREADINGCLIENT/SERVERJAVASOCKETECLIPSETCP/IP目錄1緒論111國內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀112JAVA語言2121JAVA的發(fā)展歷史2122JAVA的特點(diǎn)3123JAVA與INTERNET413SOCKET編程4131關(guān)于TCP/IP協(xié)議4132服務(wù)器和客戶機(jī)514本文內(nèi)容安排62需求分析721可行性研究7211可行性分析7212系統(tǒng)功能需求7213系統(tǒng)性能需求8214系統(tǒng)運(yùn)行需求822數(shù)據(jù)流圖8221頂層數(shù)據(jù)流圖8222一層數(shù)據(jù)流圖9223二層數(shù)據(jù)流圖93概要設(shè)計1131系統(tǒng)實(shí)現(xiàn)原理1132系統(tǒng)實(shí)現(xiàn)層次圖1233各模塊詳細(xì)功能12332服務(wù)器端結(jié)構(gòu)12332客戶端結(jié)構(gòu)144詳細(xì)設(shè)計1941系統(tǒng)流程圖19411系統(tǒng)總體流程圖19412系統(tǒng)客戶端流程圖2042編寫服務(wù)器端程序20421問題陳述20422解決方案2143客戶端程序編寫28433聊天室38參考文獻(xiàn)46致謝451緒論11國內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為LIVEMESSENGER)以及跨平臺GAIM等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進(jìn)入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強(qiáng)大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是分不開的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊QQ運(yùn)行時的各種細(xì)節(jié)。可以確定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。其模型如圖11圖11騰訊QQ服務(wù)器客戶端模型1與騰訊QQ不同,微軟的MSNMESSENGER只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過與服務(wù)器的TCP連接進(jìn)行中轉(zhuǎn)通信。其模型如圖12圖12MSN服務(wù)器客戶端模型2騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實(shí)現(xiàn)復(fù)雜度都較高。而MSNMESSENGER所有數(shù)據(jù)都要經(jīng)過服務(wù)器,服務(wù)器壓力可想而知(難怪平時很少見到使用MSN進(jìn)行語音視頻聊天的)。綜合騰訊QQ和微軟MSNMESSENGER的特點(diǎn),我打算在我的系統(tǒng)中嘗試建立其類似騰訊QQ的服務(wù)器客戶端模型,但以單服務(wù)器提供服務(wù)。12JAVA語言121JAVA的發(fā)展歷史JAVA的發(fā)展歷史,可以追朔到1990年。當(dāng)時SUNMICROSYSTEM公司為了發(fā)展消費(fèi)類電子產(chǎn)品進(jìn)行了一個名為GREEN的項(xiàng)目計劃。這個計劃的負(fù)責(zé)任是JAMESGOSLING。起初他用具有面向?qū)ο筇卣鞯腃語言編寫嵌入式軟件,可以放在面包機(jī)或PDA(PERSONALDIGITALASSISTANT,個人數(shù)字主力)等小型電子消費(fèi)這杯里,以使設(shè)備變得更為“聰明”,更具備人工只能。但后來發(fā)現(xiàn)C并不適合這類任務(wù);因?yàn)镃常會使系統(tǒng)失效。尤其在內(nèi)存管理方面,C采用直接地址訪問方式。需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負(fù)擔(dān),并可能產(chǎn)生多個BUGS。面包機(jī)上的程序錯誤可能使面包機(jī)燒壞甚至爆炸。為了解決此類問題,GOSLING決定開發(fā)一種新的語言,并取名為OAK。它采用了大部分與C類似的語法對可能具備危險性的功能加以改進(jìn),例如將內(nèi)存管理改為由語言自己進(jìn)行管理,以減少程序員的負(fù)擔(dān)及可能發(fā)生的錯誤。OAK是一種可移置的語言,它是一種平臺獨(dú)立的語言,能夠在各種芯片上執(zhí)行,可以降低設(shè)備的研發(fā)成本。122JAVA的特點(diǎn)JAVA是一種簡單、安全、容易適用、面向?qū)ο蟆⒖梢浦谩⒏咝阅堋⒍嗑€程的語言。1簡單性JAVA語言簡單高校,基本JAVA系統(tǒng)(編譯器和解釋器)所占空間不足250KB由于JAVA最初是為了對家用電器進(jìn)行集成控制而設(shè)計的,因而具備簡單命了的特征。2面向?qū)ο竺嫦驅(qū)ο蠹夹g(shù)是現(xiàn)代工業(yè)的一次革新,提高了軟件的模塊化程度和重復(fù)適用率,縮短了軟件開發(fā)時間,減低了卡發(fā)成本。在JAVA之前雖然已經(jīng)有面向?qū)ο蟮某绦蛟O(shè)計語言問問世,但有些如C并不是完全的面向?qū)ο螅敲嫦蜻^程和面向?qū)ο蟮幕旌象w。JAVA則是完全面向?qū)ο蟮某绦蛟O(shè)計語言。3安全性JAVA是可以用在網(wǎng)路及分布環(huán)境下的網(wǎng)路程序設(shè)計語言。在網(wǎng)路環(huán)境下,語言的安全性變得更為重要。JAVA提供了許多安全機(jī)制來保證其適用上的安全性。4平臺獨(dú)立平臺獨(dú)立指程序不受操作平臺的限制,可以應(yīng)用在各種平臺上。JAVA源程序經(jīng)過編譯后生成字節(jié)碼文件,而字節(jié)碼與具體的計算機(jī)無關(guān)。只要計算機(jī)安裝了能解釋執(zhí)行字節(jié)碼的JAVA虛擬機(jī)JVM,就可以執(zhí)行字節(jié)碼文件,從而實(shí)現(xiàn)JAVA的平臺獨(dú)立性。5多線程JAVA具備內(nèi)建的多線程功能,可以將一個程序的不同程序段設(shè)置為不同的線程,使各線程并發(fā)、獨(dú)立執(zhí)行,提高系統(tǒng)的運(yùn)行效率。6網(wǎng)絡(luò)功能JAVA能從全球網(wǎng)絡(luò)資源獲取所需信息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對所得信息進(jìn)行處理,所以說JAVA是一種網(wǎng)絡(luò)語言。7執(zhí)行效率JAVA的字節(jié)碼需要經(jīng)過JAVA虛擬機(jī)JVM解釋成機(jī)器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進(jìn)步,使得其執(zhí)行速度直逼C與C。123JAVA與INTERNETJAVA語言取得成功的領(lǐng)域之一就是網(wǎng)絡(luò)其他語言數(shù)頁代碼JAVA一條語句TCP/IP傳輸控制協(xié)議/網(wǎng)間協(xié)議是INTERNET的主要協(xié)議,定義了計算機(jī)和外設(shè)進(jìn)行通信所使用的規(guī)則應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層大多數(shù)基于INTERNET的應(yīng)用程序被看作TCP/IP協(xié)議的上一層如FTP,HTTP,SMTP,POP3,TELNET,NNTP等。IP地址TCP/IP網(wǎng)絡(luò)中的每臺計算機(jī)都有唯一的地址IP地址在JAVA中,有一個用來存儲INTERNET地址的類叫INTERADDRESSJAVA提供的網(wǎng)絡(luò)功能有三大類URL,SOCKET,DATAGRAM1、URL是三大功能中最高級的一種,通過URLJAVA程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)2、SOCKET是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道3、DATAGRAM是更低級的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上13SOCKET編程131關(guān)于TCP/IP協(xié)議TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對此,JAVA專門提供了SOCKET的類庫,在其中抽象出TCP協(xié)議通信的常用方法TCP協(xié)議與三次握手在講述TCP協(xié)議流程前,先來聲明兩個重要的概念(1)客戶端,首先發(fā)送TCP請求的是客戶端,客戶端一般是服務(wù)(比如數(shù)據(jù)查詢服務(wù))的請求者。(2)服務(wù)器,在接收到客戶端的請求后(確保同客戶端的通信信道建立)服務(wù)器會向客戶端提供服務(wù)。服務(wù)器一般是服務(wù)的執(zhí)行者,會向客戶端返回服務(wù)執(zhí)行的結(jié)果。為了實(shí)現(xiàn)客戶端同服務(wù)器端的通信,客戶端首先發(fā)送一個“SYN”數(shù)據(jù)包。如果服務(wù)器收到SYN標(biāo)記,它將發(fā)回一個“SYNACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個SYNACK信息,會向服務(wù)器發(fā)送一個最終確認(rèn)信息(ACK包)。這種SYN,SYNACK,ACK的步驟被稱為TCP連接建立時的“三次握手”,在這之后,連接就建立起來了,這個連接將一直保持活動狀態(tài),直到超時或者任何一方發(fā)出一個FIN(結(jié)束)信號。這種通信模式也叫客戶端/服務(wù)器(C/S)模式。ACK1第一次握手,主機(jī)A向主機(jī)B發(fā)送連接請求第二次握手,主機(jī)B收到主機(jī)A的請求,向主機(jī)A回發(fā)一個確認(rèn),同時向主機(jī)A發(fā)送一個連接請求第三次握手,主機(jī)A收到主機(jī)B發(fā)送的數(shù)據(jù)包在向主機(jī)B發(fā)送一個確認(rèn)連接主機(jī)A主機(jī)B圖13三次握手協(xié)議由此可見,通過客戶端和服務(wù)器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。132服務(wù)器和客戶機(jī)網(wǎng)絡(luò)最基本的目的就是讓兩臺機(jī)器連接到一起,并相互“交談”或者“溝通”。一旦兩臺機(jī)器都發(fā)現(xiàn)了對方,就可以展開一次令人愉快的雙向?qū)υ挕5鼈冊鯓硬拍堋鞍l(fā)現(xiàn)”對方呢這就像在游樂園里那樣一臺機(jī)器不得不停留在一個地方,偵聽其他機(jī)器說“嘿,你在哪里呢”“停留在一個地方”的機(jī)器叫做“服務(wù)器”(SERVER);到處“找人”的機(jī)器則叫做“客戶機(jī)”(CLIENT)或者“客戶”。它們之間的區(qū)別只有在客戶機(jī)試圖同服務(wù)器連接的時候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰來扮演服務(wù)器或者客戶機(jī)便顯得不那么重要了。所以服務(wù)器的主要任務(wù)是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務(wù)器對象完成的。而客戶機(jī)的任務(wù)是試著與一臺服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶機(jī)對象完成的。一旦連接建好,那么無論在服務(wù)器端還是客戶機(jī)端,連接只是魔術(shù)般地變成了一個IO數(shù)據(jù)流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是JAVA聯(lián)網(wǎng)最方便的一個地方。圖14服務(wù)器和客戶機(jī)的連接SYN1,SEQACK1,SYN1,SEQAAAAAAAAAA14本文內(nèi)容安排本論文內(nèi)容安排如下第二章為聊天系統(tǒng)的需求分析,主要介紹系統(tǒng)的可行性研究,需求分析流程圖等。第三章為概要設(shè)計,分模塊介紹系統(tǒng)的具體實(shí)現(xiàn)過程。第四章為詳細(xì)設(shè)計。2需求分析211可行性分析經(jīng)濟(jì)可行性由于本系統(tǒng)的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟(jì)要求也不高,只要有一臺能運(yùn)行JAVA軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問題。技術(shù)可行性本系統(tǒng)的開發(fā)利用MICROSOFTSQLSERVER2000作為本系統(tǒng)的數(shù)據(jù)庫,它是一個支持多用戶的新型數(shù)據(jù)庫,適用于大中規(guī)模的數(shù)據(jù)量需求。學(xué)校校園網(wǎng)的建設(shè)也為新系統(tǒng)服務(wù)器/客戶端的結(jié)構(gòu)提供了硬件的支持。使用JAVA作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴(kuò)展與修改。運(yùn)行可行性本系統(tǒng)為一個小型的局域網(wǎng)聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。綜上所述,本系統(tǒng)的設(shè)計與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。212系統(tǒng)功能需求本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端1處理用戶注冊2處理用戶登錄3處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(nèi)容4處理用戶得到信息5處理用戶退出8服務(wù)器踢人。9保存服務(wù)器日志。10保存用戶聊天信息。(2)客戶端1用戶注冊界面及結(jié)果2用戶登錄界面及結(jié)果3用戶發(fā)送信息界面及結(jié)果4用戶得到信息界面及結(jié)果5用戶退出界面及結(jié)果213系統(tǒng)性能需求實(shí)用性為局域網(wǎng)聊天提供方便,有效進(jìn)行作業(yè)管理。操作簡單本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡單易行。技術(shù)先進(jìn)產(chǎn)品的系統(tǒng)設(shè)計和開發(fā)應(yīng)緊跟著整個計算機(jī)發(fā)展潮流,采用當(dāng)時最先進(jìn)的設(shè)計思想,利用最新的開發(fā)技術(shù)和開發(fā)工具。使系統(tǒng)能夠無論在功能設(shè)計上,還是在技術(shù)實(shí)現(xiàn)上,都處于同行業(yè)的領(lǐng)先地位。安裝使用簡便服務(wù)器端的安裝簡潔明了,客戶機(jī)無需再裝任何軟件就可以直接注冊登陸聊天。適應(yīng)性應(yīng)該能廣泛應(yīng)用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設(shè)計,用戶可以根據(jù)自己的實(shí)際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應(yīng)用。代碼可讀性好文中的代碼將盡可能簡潔,易懂。214系統(tǒng)運(yùn)行需求運(yùn)行環(huán)境WINDOWS9X、2000、XP、2003,LINUX必要環(huán)境JDK15以上硬件環(huán)境CPU400MHZ以上,內(nèi)存64MB以上22數(shù)據(jù)流圖221頂層數(shù)據(jù)流圖聊天用戶局域網(wǎng)多人聊天系統(tǒng)聊天用戶圖21頂層數(shù)據(jù)流圖222一層數(shù)據(jù)流圖聊天用戶聊天用戶客戶端服務(wù)器端寫聊天信息返回讀取返回提交反饋存儲圖22一層數(shù)據(jù)流圖223二層數(shù)據(jù)流圖用戶客戶端服務(wù)器端用戶注冊用戶登錄用戶發(fā)送信息聊天內(nèi)容非法內(nèi)容用戶得到的信息處理用戶退出服務(wù)器日志數(shù)據(jù)聊天信息保存保存處理監(jiān)控屏蔽圖23系統(tǒng)二層數(shù)據(jù)流圖3概要設(shè)計31系統(tǒng)實(shí)現(xiàn)原理聊天系統(tǒng)的設(shè)計跟普通網(wǎng)站設(shè)計有著許多不同的地方,普通網(wǎng)站設(shè)計所考慮的因素,例如,普通網(wǎng)站需要對布局進(jìn)入大量美化以及動畫設(shè)計等等,而聊天室只要提供滿足訪客雙方直接實(shí)時聊天即可。因此,在設(shè)計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設(shè)計要點(diǎn)在INTERNET上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。圖31系統(tǒng)實(shí)現(xiàn)原理圖32系統(tǒng)實(shí)現(xiàn)層次圖局域網(wǎng)多人聊天系統(tǒng)客戶端服務(wù)器端與聊天室成員私聊可以改變聊天內(nèi)容風(fēng)格用戶注冊(含頭像)、登錄服務(wù)器發(fā)送通知服務(wù)器踢人保存服務(wù)器日志保存用戶聊天信息服務(wù)器過濾非法內(nèi)容服務(wù)器監(jiān)控聊天內(nèi)容聊天室成員一起聊天時鐘功能圖32系統(tǒng)實(shí)現(xiàn)層次圖33各模塊詳細(xì)功能331服務(wù)器端結(jié)構(gòu)圖33服務(wù)器端結(jié)構(gòu)圖SERVEFRAMEJAVA為服務(wù)器端程序界面,負(fù)責(zé)為服務(wù)器的啟動提供界面服務(wù)。APPSERVERJAVA為服務(wù)器端啟動界面,負(fù)責(zé)監(jiān)聽服務(wù)器的狀態(tài),在線人數(shù),最多在線人數(shù),服務(wù)器名稱,訪問協(xié)議,服務(wù)器IP,服務(wù)器端口以及用戶信息的管理,日志的保存。CONNECTIONJAVA是連接服務(wù)器和客戶端的橋梁,主要負(fù)責(zé)將客戶端的信息傳送給服務(wù)器,并將服務(wù)器端的信息反饋給客戶端,即所謂的“三次握手”。也是SOCKET編程的重要部分。WORDFILTERJAVA負(fù)責(zé)將聊天過程中不合法的話語文件等過濾掉,返回合法內(nèi)容。332客戶端結(jié)構(gòu)圖34客戶端結(jié)構(gòu)圖CHATCLIENTJAVA為客戶端程序啟動類,負(fù)責(zé)客戶端的啟動和退出。LOGINJAVA為客戶端程序登錄界面,負(fù)責(zé)用戶帳號信息的驗(yàn)證與反饋。REGISTERJAVA為客戶端程序注冊界面,負(fù)責(zé)用戶帳號信息的注冊驗(yàn)證與反饋。CHATROOMJAVA為客戶端程序聊天室主界面,負(fù)責(zé)接收、發(fā)送聊天內(nèi)容與服務(wù)器端的CONNECTIONJAVA親密合作。WINDOWCLOSE為CHATROOMJAVA的內(nèi)部類,負(fù)責(zé)監(jiān)聽聊天室界面的操作,當(dāng)用戶退出時返回給服務(wù)器信息。CLOCKJAVA為客戶端程序的一個小程序,實(shí)現(xiàn)的一個石英鐘功能。4詳細(xì)設(shè)計41系統(tǒng)流程圖411系統(tǒng)總體流程圖開始啟動服務(wù)器判斷啟動信息啟動客戶端判斷登錄信息登錄聊天室退出聊天室結(jié)束是是注冊用戶退出服務(wù)器否是否圖41系統(tǒng)總體流程圖412系統(tǒng)客戶端流程圖開始客戶端登錄界面聊天室界面清屏聊天內(nèi)容時鐘保存聊天對象字體顏色表情退出結(jié)束圖42客戶端流程圖42編寫服務(wù)器端程序421問題陳述1接受用戶注冊信息并保存在一個基于文件的對象型數(shù)據(jù)庫。2能夠允許注冊過的用戶登錄聊天界面并可以聊天。3能夠接受私聊信息并發(fā)送給特定的用戶。4服務(wù)器運(yùn)行在自定義的端口上10015服務(wù)器監(jiān)控用戶列表和用戶聊天信息(除私聊外)。6服務(wù)器踢人,發(fā)送通知。7服務(wù)器保存日志。422解決方案4221后臺數(shù)據(jù)庫設(shè)計基于服務(wù)器跨平臺運(yùn)行的構(gòu)想,服務(wù)器的后臺數(shù)據(jù)庫使用了SQLSERVER2000。(1)LOGIN表LOGIN表(2)REGISTER表REGISTER表此表主要包含了用戶帳戶基本信息。聊天系統(tǒng)采用用戶名作為用戶帳號,并給每個用戶生成一個唯一ID來做系統(tǒng)內(nèi)部的用戶標(biāo)識。4222用戶注冊1去數(shù)據(jù)庫讀數(shù)據(jù)首先創(chuàng)建一個FILE文件類,載入“USERTXT”,再用對象輸入流OBJECTINPUTSTREAM將用戶信息導(dǎo)入到系統(tǒng)中。2客戶端請求注冊客戶端通過REGISTERJAVA請求注冊,填寫注冊信息,并驗(yàn)證密碼是否符合規(guī)定,是否兩次輸入一致,如不一致會提示重新輸入,最后將請求信息發(fā)送給服務(wù)器端。INTFLAG0/是否重名判斷標(biāo)志REGISTER_CUSTOMERCLIENTMESSAGEREGISTER_CUSTOMEROBJFILEFLISTNEWFILE“USERTXT“IFFLISTLENGTH0/判斷是否是第一個注冊用戶OBJECTINPUTSTREAMOBJINPUTNEWOBJECTINPUTSTREAMNEWFILEINPUTSTREAMFLISTVLISTVECTOROBJINPUTREADOBJECT/判斷是否有重名FORINTI0I50TOCLIENTPRINTLN“登錄人數(shù)過多,請稍候再試“BREAK4224用戶退出1接收退出信息當(dāng)用戶退出時,客戶端將會用基于SOCKET的對象輸出流發(fā)送給服務(wù)器退出對象。2在線列表中刪除用戶用戶退出后應(yīng)該把用戶從在線列表中刪除,否則用戶退出用戶還在在線列表中,那么該用戶下次將會無法登錄。3更新在線列表用戶退出后將服務(wù)器端監(jiān)控界面的用戶列表更新。否則用戶數(shù)據(jù)將會不同步。用戶退出模塊程序PUBLICVOIDSERVEREXITEXITEXITNEWEXITEXITEXITOBJREMOVEUSEREXIT/CHENMINIFSFRAMETIEQUALSEXITEXITNAMESFRAMETI“DATETNEWDATELOG“用戶“EXITEXITNAME“已經(jīng)退出,“退出時間“TTOLOCALESTRINGFRESHSERVERUSERLIST4225接收用戶聊天信息1接收用戶聊天信息當(dāng)用戶發(fā)送聊天信息時,服務(wù)端將會收到客戶端用SOCKET傳輸過來的聊天信息對象,然后將其強(qiáng)制轉(zhuǎn)換為CHAT對象。2過濾用戶聊天內(nèi)容的非法信息分析聊天信息對象的聊天內(nèi)容,用語言過濾類將非法字符過濾掉。語言過濾的時候?qū)蜷_“BADWORDTXT”文件,不允許出現(xiàn)的關(guān)鍵詞將會存儲在文件中,關(guān)鍵字之間以逗號分割。當(dāng)聊天內(nèi)容中出現(xiàn)要過渡的關(guān)鍵字是將會被系統(tǒng)屏蔽,而聊天內(nèi)容3接收服務(wù)器端的系統(tǒng)消息當(dāng)有其他用戶登陸時,系統(tǒng)會給在線的所有用戶發(fā)送用戶登陸信息,并且通過服務(wù)器可以給各用戶發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。4返回給客戶端當(dāng)以上信息都封裝成功后,打開與客戶端連接的SOCKET的輸出流,然后再用OBJECTOUTPUTSTREAM對象輸出流包裝后輸出給客戶端。PUBLICVOIDSERVERCHAT/將接收到的對象值賦給聊天信息的序列化對象CHATCOBJNEWCHATCOBJCHATOBJ/CHENMINCOBJCHATMESSAGEWORDFILTERFILTERCOBJCHATMESSAGECHATLOGCOBJ/將聊天信息的序列化對象填加到保存聊天信息的矢量中USERCHATADDELEMENTCHATCOBJRETURN43客戶端程序編寫431程序?qū)⑼ㄟ^REGISTERJAVA用戶注冊界面收集用戶的用戶名、密碼、年齡、電子郵箱。如圖47客戶端用戶注冊信息模塊程序/連接到服務(wù)器SOCKETTOSERVERTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMSTREAMTOSERVERNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAM/寫客戶詳細(xì)資料到服務(wù)器SOCKETSTREAMTOSERVERWRITEOBJECTREGISTER_CUSTOMERDATA/讀來自服務(wù)器SOCKET的登陸狀態(tài)BUFFEREDREADERFROMSERVERNEWBUFFEREDREADERNEWINPUTSTREAMREADERTOSERVERGETINPUTSTREAMSTRINGSTATUSFROMSERVERREADLINE/顯示成功消息JOPTIONPANEOPNEWJOPTIONPANEOPSHOWMESSAGEDIALOGNULL,STATUSIFSTATUSEQUALSDATACUSTNAME“注冊成功“TXTUSERNAMESETTEXT“PWDUSERPASSWORDSETTEXT“PWDCONFIRMPASSSETTEXT“TXTAGESETTEXT“TXTEMAILSETTEXT“432用戶登錄4321收集用戶登錄信息程序?qū)⑼ㄟ^LOGINJAVA用戶登錄界面收集用戶的用戶名、密碼,如圖圖415收集用戶登錄信息圖/接受客戶的詳細(xì)資料TRY/連接到服務(wù)器SOCKETTOSERVERTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMSTREAMTOSERVERNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAM/寫客戶詳細(xì)資料到服務(wù)器SOCKETSTREAMTOSERVERWRITEOBJECTCUSTOMERDATA/讀來自服務(wù)器SOCKET的登錄狀態(tài)BUFFEREDREADERFROMSERVERNEWBUFFEREDREADERNEWINPUTSTREAMREADERTOSERVERGETINPUTSTREAMSTRINGSTATUSFROMSERVERREADLINEIFSTATUSEQUALS“登錄成功“NEWCHATROOMSTRINGDATACUSTNAME,STRSERVERIPTHISDISPOSE/關(guān)閉流對象STREAMTOSERVERCLOSEFROMSERVERCLOSETOSERVERCLOSEELSEJOPTIONPANESHOWMESSAGEDIALOGNULL,STATUSSTREAMTOSERVERCLOSEFROMSERVERCLOSETOSERVERCLOSE/LOGIN結(jié)束433聊天室當(dāng)用戶登錄成功后,用戶的登錄界面將會隱藏,然后創(chuàng)建用戶聊天室窗口,在界面的標(biāo)題欄將會顯示當(dāng)前登錄用戶的用戶名,以防止一個機(jī)器上的用戶開多個賬號進(jìn)入聊天室后分不清哪個窗口是哪個用戶登錄的,界面第一行將顯示當(dāng)前在線人數(shù)。位于界面正中的兩個控件分別是LIST和TEXTBOX用來顯示當(dāng)前服務(wù)器上的在線會員名單列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個性化配置控件。包括聊天對象,聊天語氣,聊天內(nèi)容,聊天字體,風(fēng)格,大小,顏色4331用戶發(fā)送信息用戶需要發(fā)送信息時,在聊天內(nèi)容里寫下要發(fā)送的信息,然后點(diǎn)擊發(fā)送就可以發(fā)送到其他客戶端,也可以選擇私聊,聊天表情,聊天信息通過服務(wù)器發(fā)送到其他客戶端。如圖當(dāng)多個用戶同時在線時可以對某個人私聊,而第三個人的聊天界面會被屏蔽掉。/“發(fā)送“按鈕PUBLICVOIDSENDMESSAGECHATCHATOBJNEWCHATCHATOBJCHATUSERSTRLOGINNAMECHATOBJCHATMESSAGETXTMESSAGEGETTEXTCHATOBJCHATTOUSERSTRINGVALUEOFCMBUSERGETSELECTEDITEMCHATOBJWHISPERCHPRIVATECHATISSELECTEDTRUEFALSECHATOBJEMOTEEMOTEGETSELECTEDITEMTOSTRING/向服務(wù)器發(fā)送信息TRYSOCKETTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMOUTOBJNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAMOUTOBJWRITEOBJECTCHATOBJTXTMESSAGESETTEXT“/清空文本框OUTOBJCLOSETOSERVERCLOSECATCHEXCEPTIONE/SENDMESSAGE結(jié)束4333保存聊天記錄當(dāng)用戶需要保存聊天記錄時可以直接點(diǎn)擊“保存”按鈕,為了防止多用戶聊天記錄文件沖突問題,聊天記錄將會以“用戶名_MESSAGETXT”為文件名,將信息保存在當(dāng)前應(yīng)用程序目錄下。如圖保持模塊程序/“保存“按鈕PUBLICVOIDSAVEMESSAGETRYFILEOUTPUTSTREAMFILEOUTPUTNEWFILEOUTPUTSTREAMTHISSTRLOGINNAME“_MESSAGETXT“,TRUESTRINGTEMPTAUSERMESSAGEGETTEXT/SYSTEMOUTPRINTLNTEMPFILEOUTPUTWRITETEMPGETBYTESFILEOUTPUTCLOSEJOPTIONPANESHOWMESSAGEDIALOGNULL,“聊天記錄保存在“THISSTRLOGINNAME“_MESSAGETXT“CATCHEXCEPTIONESYSTEMOUTPRINTLNE4334顯示系統(tǒng)時間當(dāng)用戶需要查看當(dāng)前時間時,可以直接點(diǎn)擊“時鐘”按鈕,將會啟動一個漂亮的電子時鐘,時鐘模塊程序PUBLICVOIDACTIONPERFORMEDACTIONEVENTETIMERRESTARTPUBLICVOIDPAINTGRAPHICSGINSETSINSETSGETINSETSINTL0INSETSLEFT/2,T0INSETSTOP/2INTHH,MM,SSSTRINGSTHGETSIZEHEIGHT/繪制圓形/獲取時間CALENDARNOWCALENDARGETINSTANCEHHNOWGETCALENDARHOUR_OF_DAY/小時MMNOWGETCALENDARMINUTE/分鐘SSNOWGETCALENDARSECOND/秒GSETCOLORCOLORPINKGFILLRECTL0,T0,60,28/填充的矩形GSETCOLORCOLORBLUEIFHH10ST“0“HHELSEST“HHIFMM10STST“0“MMELSESTST“MMIFSS10STST“0“SSELSESTST“SSGDRAWSTRINGST,L0,T025/計算時間和圖形的關(guān)系SDO90SS6MDO90MM6HDO90HH30MM/2/擦除秒針/繪制秒針GSETCOLORCOLORYELLOWXINTR8MATHCOSRADSDOX0YINTR8MATHSINRADSDOY02T0GDRAWLINEX0,Y0,X,HYOLD_XXOLD_YY/繪制分針LINEG,MDO,INTR07,COLORGREEN/繪制時針LINEG,HDO,INTR05,COLORRED/ENDPAINT圖422屏蔽聊天信息FILEREADERFILEREADERNEWFILEREADERFILESBUFFEREDREADERREADNEWBUFFEREDREADERFILEREADERWHILETRUESTRINGLINEREADREADLINEIFLINENULLBREAKFILESTRINGLINE/FILESTRINGLINE“N“READCLOSE/SYSTEMOUTPRINTLNFILESTRINGCATCHFILENOTFOUNDEXCEPTIONE/TODO自動生成CATCH塊EPRINTSTACKTRACECATCHIOEXCEPTIONE/TODO自動生成CATCH塊EPRINTSTACKTRACERETURNFILESTRING4336退出聊天系統(tǒng)當(dāng)前用戶點(diǎn)擊“退出”按鈕或者關(guān)閉窗口時,系統(tǒng)將會把用戶退出的信息打包成對象發(fā)送給服務(wù)器,并退出客戶端程序。/“退出“按鈕PUBLICVOIDEXITEXITEXITNEWEXITEXITEXITNAMESTRLOGINNAME/發(fā)送退出信息TRYSOCKETTOSERVERNEWSOCKETSTRSERVERIP,1001/向服務(wù)器發(fā)送信息OBJECTOUTPUTSTREAMOUTOBJNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAMOUTOBJWRITEOBJECTEXITOUTOBJCLOSETOSERVERCLOSEFRMCHATDISPOSE/THISDESTROYCATCHEXCEPTIONEPRIVATEVOIDEXITCHATROOMEXIT4337出現(xiàn)異常信息在用戶聊天時,當(dāng)服務(wù)器關(guān)閉或者與服務(wù)器無法連接時,客戶端將會給出“不能

溫馨提示

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

評論

0/150

提交評論