已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本科畢業(yè)論文(畢業(yè)設計)題目局域網(wǎng)聊天軟件系院學生姓名學號專業(yè)年級完成日期指導教師摘要在網(wǎng)絡越來越發(fā)達的今天,人們對網(wǎng)絡的依賴越來越多,越來越離不開網(wǎng)絡,由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ?;贘AVA網(wǎng)絡編程的強大功能,本次畢業(yè)設計使用JAVA編寫一個聊天系統(tǒng)。一般來說,聊天工具大多數(shù)由客戶端程序和服務器程序外加服務器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機/服務器架構(gòu)模式通過JAVA提供的SOCKET類來連接客戶機和服務器并使客戶機和服務器之間相互通信,由于聊天是多點對多點的而JAVA提供的多線程功能用多線程可完成多點對多點的聊天,數(shù)據(jù)庫管理系統(tǒng)用SQLSERVER2000完成并通過JDBCODBC橋訪問數(shù)據(jù)庫。本系統(tǒng)建立在JAVA平臺上,系統(tǒng)的設計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務器端之間通過SOCKET傳送消息。使用JAVA語言編寫,開發(fā)工具采用ECLIPSE。服務器端設計與實現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當中同時運行多個不同的線程,執(zhí)行不同的任務。大大增強了程序?qū)Ψ掌髻Y源的利用。聊天系統(tǒng)完成后將可進行多人對多人的聊天,對好友進行添加、刪除,對新用戶的注冊,發(fā)送消息、接受消息等等功能。關(guān)鍵字多線程;客戶機/服務器;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的特點3123JAVA與INTERNET413SOCKET編程4131關(guān)于TCP/IP協(xié)議4132服務器和客戶機514本文內(nèi)容安排62需求分析721可行性研究7211可行性分析7212系統(tǒng)功能需求7213系統(tǒng)性能需求8214系統(tǒng)運行需求822數(shù)據(jù)流圖8221頂層數(shù)據(jù)流圖8222一層數(shù)據(jù)流圖9223二層數(shù)據(jù)流圖93概要設計1131系統(tǒng)實現(xiàn)原理1132系統(tǒng)實現(xiàn)層次圖1233各模塊詳細功能12332服務器端結(jié)構(gòu)12332客戶端結(jié)構(gòu)144詳細設計1941系統(tǒng)流程圖19411系統(tǒng)總體流程圖19412系統(tǒng)客戶端流程圖2042編寫服務器端程序20421問題陳述20422解決方案2143客戶端程序編寫28433聊天室38參考文獻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進行了一些研究,作為我開發(fā)聊天系統(tǒng)的準備。騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是分不開的。參考了許多網(wǎng)絡上的資料,以及自己通過觀察騰訊QQ運行時的各種細節(jié)??梢源_定騰訊QQ是以多服務器提供服務、服務器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務器進行中轉(zhuǎn)通信。其模型如圖11圖11騰訊QQ服務器客戶端模型1與騰訊QQ不同,微軟的MSNMESSENGER只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務器進行連接,然后通過與服務器的TCP連接進行中轉(zhuǎn)通信。其模型如圖12圖12MSN服務器客戶端模型2騰訊使用的模型中,服務器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務器的處理壓力,但其內(nèi)部協(xié)議和實現(xiàn)復雜度都較高。而MSNMESSENGER所有數(shù)據(jù)都要經(jīng)過服務器,服務器壓力可想而知(難怪平時很少見到使用MSN進行語音視頻聊天的)。綜合騰訊QQ和微軟MSNMESSENGER的特點,我打算在我的系統(tǒng)中嘗試建立其類似騰訊QQ的服務器客戶端模型,但以單服務器提供服務。12JAVA語言121JAVA的發(fā)展歷史JAVA的發(fā)展歷史,可以追朔到1990年。當時SUNMICROSYSTEM公司為了發(fā)展消費類電子產(chǎn)品進行了一個名為GREEN的項目計劃。這個計劃的負責任是JAMESGOSLING。起初他用具有面向?qū)ο筇卣鞯腃語言編寫嵌入式軟件,可以放在面包機或PDA(PERSONALDIGITALASSISTANT,個人數(shù)字主力)等小型電子消費這杯里,以使設備變得更為“聰明”,更具備人工只能。但后來發(fā)現(xiàn)C并不適合這類任務;因為C常會使系統(tǒng)失效。尤其在內(nèi)存管理方面,C采用直接地址訪問方式。需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負擔,并可能產(chǎn)生多個BUGS。面包機上的程序錯誤可能使面包機燒壞甚至爆炸。為了解決此類問題,GOSLING決定開發(fā)一種新的語言,并取名為OAK。它采用了大部分與C類似的語法對可能具備危險性的功能加以改進,例如將內(nèi)存管理改為由語言自己進行管理,以減少程序員的負擔及可能發(fā)生的錯誤。OAK是一種可移置的語言,它是一種平臺獨立的語言,能夠在各種芯片上執(zhí)行,可以降低設備的研發(fā)成本。122JAVA的特點JAVA是一種簡單、安全、容易適用、面向?qū)ο?、可移置、高性能、多線程的語言。1簡單性JAVA語言簡單高校,基本JAVA系統(tǒng)(編譯器和解釋器)所占空間不足250KB由于JAVA最初是為了對家用電器進行集成控制而設計的,因而具備簡單命了的特征。2面向?qū)ο竺嫦驅(qū)ο蠹夹g(shù)是現(xiàn)代工業(yè)的一次革新,提高了軟件的模塊化程度和重復適用率,縮短了軟件開發(fā)時間,減低了卡發(fā)成本。在JAVA之前雖然已經(jīng)有面向?qū)ο蟮某绦蛟O計語言問問世,但有些如C并不是完全的面向?qū)ο螅敲嫦蜻^程和面向?qū)ο蟮幕旌象w。JAVA則是完全面向?qū)ο蟮某绦蛟O計語言。3安全性JAVA是可以用在網(wǎng)路及分布環(huán)境下的網(wǎng)路程序設計語言。在網(wǎng)路環(huán)境下,語言的安全性變得更為重要。JAVA提供了許多安全機制來保證其適用上的安全性。4平臺獨立平臺獨立指程序不受操作平臺的限制,可以應用在各種平臺上。JAVA源程序經(jīng)過編譯后生成字節(jié)碼文件,而字節(jié)碼與具體的計算機無關(guān)。只要計算機安裝了能解釋執(zhí)行字節(jié)碼的JAVA虛擬機JVM,就可以執(zhí)行字節(jié)碼文件,從而實現(xiàn)JAVA的平臺獨立性。5多線程JAVA具備內(nèi)建的多線程功能,可以將一個程序的不同程序段設置為不同的線程,使各線程并發(fā)、獨立執(zhí)行,提高系統(tǒng)的運行效率。6網(wǎng)絡功能JAVA能從全球網(wǎng)絡資源獲取所需信息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對所得信息進行處理,所以說JAVA是一種網(wǎng)絡語言。7執(zhí)行效率JAVA的字節(jié)碼需要經(jīng)過JAVA虛擬機JVM解釋成機器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進步,使得其執(zhí)行速度直逼C與C。123JAVA與INTERNETJAVA語言取得成功的領(lǐng)域之一就是網(wǎng)絡其他語言數(shù)頁代碼JAVA一條語句TCP/IP傳輸控制協(xié)議/網(wǎng)間協(xié)議是INTERNET的主要協(xié)議,定義了計算機和外設進行通信所使用的規(guī)則應用層,傳輸層,網(wǎng)絡層,鏈路層大多數(shù)基于INTERNET的應用程序被看作TCP/IP協(xié)議的上一層如FTP,HTTP,SMTP,POP3,TELNET,NNTP等。IP地址TCP/IP網(wǎng)絡中的每臺計算機都有唯一的地址IP地址在JAVA中,有一個用來存儲INTERNET地址的類叫INTERADDRESSJAVA提供的網(wǎng)絡功能有三大類URL,SOCKET,DATAGRAM1、URL是三大功能中最高級的一種,通過URLJAVA程序可以直接送出或讀入網(wǎng)絡上的數(shù)據(jù)2、SOCKET是傳統(tǒng)網(wǎng)絡程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡的通信信道3、DATAGRAM是更低級的網(wǎng)絡傳輸方式,它把數(shù)據(jù)的目的紀錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡上13SOCKET編程131關(guān)于TCP/IP協(xié)議TCP協(xié)議是網(wǎng)絡通信的基石,對此,JAVA專門提供了SOCKET的類庫,在其中抽象出TCP協(xié)議通信的常用方法TCP協(xié)議與三次握手在講述TCP協(xié)議流程前,先來聲明兩個重要的概念(1)客戶端,首先發(fā)送TCP請求的是客戶端,客戶端一般是服務(比如數(shù)據(jù)查詢服務)的請求者。(2)服務器,在接收到客戶端的請求后(確保同客戶端的通信信道建立)服務器會向客戶端提供服務。服務器一般是服務的執(zhí)行者,會向客戶端返回服務執(zhí)行的結(jié)果。為了實現(xiàn)客戶端同服務器端的通信,客戶端首先發(fā)送一個“SYN”數(shù)據(jù)包。如果服務器收到SYN標記,它將發(fā)回一個“SYNACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個SYNACK信息,會向服務器發(fā)送一個最終確認信息(ACK包)。這種SYN,SYNACK,ACK的步驟被稱為TCP連接建立時的“三次握手”,在這之后,連接就建立起來了,這個連接將一直保持活動狀態(tài),直到超時或者任何一方發(fā)出一個FIN(結(jié)束)信號。這種通信模式也叫客戶端/服務器(C/S)模式。ACK1第一次握手,主機A向主機B發(fā)送連接請求第二次握手,主機B收到主機A的請求,向主機A回發(fā)一個確認,同時向主機A發(fā)送一個連接請求第三次握手,主機A收到主機B發(fā)送的數(shù)據(jù)包在向主機B發(fā)送一個確認連接主機A主機B圖13三次握手協(xié)議由此可見,通過客戶端和服務器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。132服務器和客戶機網(wǎng)絡最基本的目的就是讓兩臺機器連接到一起,并相互“交談”或者“溝通”。一旦兩臺機器都發(fā)現(xiàn)了對方,就可以展開一次令人愉快的雙向?qū)υ?。但它們怎樣才能“發(fā)現(xiàn)”對方呢這就像在游樂園里那樣一臺機器不得不停留在一個地方,偵聽其他機器說“嘿,你在哪里呢”“停留在一個地方”的機器叫做“服務器”(SERVER);到處“找人”的機器則叫做“客戶機”(CLIENT)或者“客戶”。它們之間的區(qū)別只有在客戶機試圖同服務器連接的時候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰來扮演服務器或者客戶機便顯得不那么重要了。所以服務器的主要任務是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務器對象完成的。而客戶機的任務是試著與一臺服務器建立連接,這是由我們創(chuàng)建的特定客戶機對象完成的。一旦連接建好,那么無論在服務器端還是客戶機端,連接只是魔術(shù)般地變成了一個IO數(shù)據(jù)流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是JAVA聯(lián)網(wǎng)最方便的一個地方。圖14服務器和客戶機的連接SYN1,SEQACK1,SYN1,SEQAAAAAAAAAA14本文內(nèi)容安排本論文內(nèi)容安排如下第二章為聊天系統(tǒng)的需求分析,主要介紹系統(tǒng)的可行性研究,需求分析流程圖等。第三章為概要設計,分模塊介紹系統(tǒng)的具體實現(xiàn)過程。第四章為詳細設計。2需求分析211可行性分析經(jīng)濟可行性由于本系統(tǒng)的主要背景是畢業(yè)課程設計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行JAVA軟件的電腦便可,所以不用考慮到經(jīng)濟問題。技術(shù)可行性本系統(tǒng)的開發(fā)利用MICROSOFTSQLSERVER2000作為本系統(tǒng)的數(shù)據(jù)庫,它是一個支持多用戶的新型數(shù)據(jù)庫,適用于大中規(guī)模的數(shù)據(jù)量需求。學校校園網(wǎng)的建設也為新系統(tǒng)服務器/客戶端的結(jié)構(gòu)提供了硬件的支持。使用JAVA作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。運行可行性本系統(tǒng)為一個小型的局域網(wǎng)聊天系統(tǒng),所耗費的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。綜上所述,本系統(tǒng)的設計與開發(fā)在技術(shù)上和硬件設備上的條件都是滿足的,因此,它在技術(shù)上是可行的。212系統(tǒng)功能需求本系統(tǒng)主要通過客戶端,服務器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務器端1處理用戶注冊2處理用戶登錄3處理用戶發(fā)送信息,服務器監(jiān)控聊天內(nèi)容,服務器過濾非法內(nèi)容4處理用戶得到信息5處理用戶退出8服務器踢人。9保存服務器日志。10保存用戶聊天信息。(2)客戶端1用戶注冊界面及結(jié)果2用戶登錄界面及結(jié)果3用戶發(fā)送信息界面及結(jié)果4用戶得到信息界面及結(jié)果5用戶退出界面及結(jié)果213系統(tǒng)性能需求實用性為局域網(wǎng)聊天提供方便,有效進行作業(yè)管理。操作簡單本系統(tǒng)應該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時系統(tǒng)不應太復雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡單易行。技術(shù)先進產(chǎn)品的系統(tǒng)設計和開發(fā)應緊跟著整個計算機發(fā)展潮流,采用當時最先進的設計思想,利用最新的開發(fā)技術(shù)和開發(fā)工具。使系統(tǒng)能夠無論在功能設計上,還是在技術(shù)實現(xiàn)上,都處于同行業(yè)的領(lǐng)先地位。安裝使用簡便服務器端的安裝簡潔明了,客戶機無需再裝任何軟件就可以直接注冊登陸聊天。適應性應該能廣泛應用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設計,用戶可以根據(jù)自己的實際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應用。代碼可讀性好文中的代碼將盡可能簡潔,易懂。214系統(tǒng)運行需求運行環(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ù)流圖聊天用戶聊天用戶客戶端服務器端寫聊天信息返回讀取返回提交反饋存儲圖22一層數(shù)據(jù)流圖223二層數(shù)據(jù)流圖用戶客戶端服務器端用戶注冊用戶登錄用戶發(fā)送信息聊天內(nèi)容非法內(nèi)容用戶得到的信息處理用戶退出服務器日志數(shù)據(jù)聊天信息保存保存處理監(jiān)控屏蔽圖23系統(tǒng)二層數(shù)據(jù)流圖3概要設計31系統(tǒng)實現(xiàn)原理聊天系統(tǒng)的設計跟普通網(wǎng)站設計有著許多不同的地方,普通網(wǎng)站設計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設計等等,而聊天室只要提供滿足訪客雙方直接實時聊天即可。因此,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點在INTERNET上的聊天程序一般都是以服務器提供服務端連接響應,使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實現(xiàn)服務器端和客戶端兩部分程序。圖31系統(tǒng)實現(xiàn)原理圖32系統(tǒng)實現(xiàn)層次圖局域網(wǎng)多人聊天系統(tǒng)客戶端服務器端與聊天室成員私聊可以改變聊天內(nèi)容風格用戶注冊(含頭像)、登錄服務器發(fā)送通知服務器踢人保存服務器日志保存用戶聊天信息服務器過濾非法內(nèi)容服務器監(jiān)控聊天內(nèi)容聊天室成員一起聊天時鐘功能圖32系統(tǒng)實現(xiàn)層次圖33各模塊詳細功能331服務器端結(jié)構(gòu)圖33服務器端結(jié)構(gòu)圖SERVEFRAMEJAVA為服務器端程序界面,負責為服務器的啟動提供界面服務。APPSERVERJAVA為服務器端啟動界面,負責監(jiān)聽服務器的狀態(tài),在線人數(shù),最多在線人數(shù),服務器名稱,訪問協(xié)議,服務器IP,服務器端口以及用戶信息的管理,日志的保存。CONNECTIONJAVA是連接服務器和客戶端的橋梁,主要負責將客戶端的信息傳送給服務器,并將服務器端的信息反饋給客戶端,即所謂的“三次握手”。也是SOCKET編程的重要部分。WORDFILTERJAVA負責將聊天過程中不合法的話語文件等過濾掉,返回合法內(nèi)容。332客戶端結(jié)構(gòu)圖34客戶端結(jié)構(gòu)圖CHATCLIENTJAVA為客戶端程序啟動類,負責客戶端的啟動和退出。LOGINJAVA為客戶端程序登錄界面,負責用戶帳號信息的驗證與反饋。REGISTERJAVA為客戶端程序注冊界面,負責用戶帳號信息的注冊驗證與反饋。CHATROOMJAVA為客戶端程序聊天室主界面,負責接收、發(fā)送聊天內(nèi)容與服務器端的CONNECTIONJAVA親密合作。WINDOWCLOSE為CHATROOMJAVA的內(nèi)部類,負責監(jiān)聽聊天室界面的操作,當用戶退出時返回給服務器信息。CLOCKJAVA為客戶端程序的一個小程序,實現(xiàn)的一個石英鐘功能。4詳細設計41系統(tǒng)流程圖411系統(tǒng)總體流程圖開始啟動服務器判斷啟動信息啟動客戶端判斷登錄信息登錄聊天室退出聊天室結(jié)束是是注冊用戶退出服務器否是否圖41系統(tǒng)總體流程圖412系統(tǒng)客戶端流程圖開始客戶端登錄界面聊天室界面清屏聊天內(nèi)容時鐘保存聊天對象字體顏色表情退出結(jié)束圖42客戶端流程圖42編寫服務器端程序421問題陳述1接受用戶注冊信息并保存在一個基于文件的對象型數(shù)據(jù)庫。2能夠允許注冊過的用戶登錄聊天界面并可以聊天。3能夠接受私聊信息并發(fā)送給特定的用戶。4服務器運行在自定義的端口上10015服務器監(jiān)控用戶列表和用戶聊天信息(除私聊外)。6服務器踢人,發(fā)送通知。7服務器保存日志。422解決方案4221后臺數(shù)據(jù)庫設計基于服務器跨平臺運行的構(gòu)想,服務器的后臺數(shù)據(jù)庫使用了SQLSERVER2000。(1)LOGIN表LOGIN表(2)REGISTER表REGISTER表此表主要包含了用戶帳戶基本信息。聊天系統(tǒng)采用用戶名作為用戶帳號,并給每個用戶生成一個唯一ID來做系統(tǒng)內(nèi)部的用戶標識。4222用戶注冊1去數(shù)據(jù)庫讀數(shù)據(jù)首先創(chuàng)建一個FILE文件類,載入“USERTXT”,再用對象輸入流OBJECTINPUTSTREAM將用戶信息導入到系統(tǒng)中。2客戶端請求注冊客戶端通過REGISTERJAVA請求注冊,填寫注冊信息,并驗證密碼是否符合規(guī)定,是否兩次輸入一致,如不一致會提示重新輸入,最后將請求信息發(fā)送給服務器端。INTFLAG0/是否重名判斷標志REGISTER_CUSTOMERCLIENTMESSAGEREGISTER_CUSTOMEROBJFILEFLISTNEWFILE“USERTXT“IFFLISTLENGTH0/判斷是否是第一個注冊用戶OBJECTINPUTSTREAMOBJINPUTNEWOBJECTINPUTSTREAMNEWFILEINPUTSTREAMFLISTVLISTVECTOROBJINPUTREADOBJECT/判斷是否有重名FORINTI0I50TOCLIENTPRINTLN“登錄人數(shù)過多,請稍候再試“BREAK4224用戶退出1接收退出信息當用戶退出時,客戶端將會用基于SOCKET的對象輸出流發(fā)送給服務器退出對象。2在線列表中刪除用戶用戶退出后應該把用戶從在線列表中刪除,否則用戶退出用戶還在在線列表中,那么該用戶下次將會無法登錄。3更新在線列表用戶退出后將服務器端監(jiān)控界面的用戶列表更新。否則用戶數(shù)據(jù)將會不同步。用戶退出模塊程序PUBLICVOIDSERVEREXITEXITEXITNEWEXITEXITEXITOBJREMOVEUSEREXIT/CHENMINIFSFRAMETIEQUALSEXITEXITNAMESFRAMETI“DATETNEWDATELOG“用戶“EXITEXITNAME“已經(jīng)退出,“退出時間“TTOLOCALESTRINGFRESHSERVERUSERLIST4225接收用戶聊天信息1接收用戶聊天信息當用戶發(fā)送聊天信息時,服務端將會收到客戶端用SOCKET傳輸過來的聊天信息對象,然后將其強制轉(zhuǎn)換為CHAT對象。2過濾用戶聊天內(nèi)容的非法信息分析聊天信息對象的聊天內(nèi)容,用語言過濾類將非法字符過濾掉。語言過濾的時候?qū)蜷_“BADWORDTXT”文件,不允許出現(xiàn)的關(guān)鍵詞將會存儲在文件中,關(guān)鍵字之間以逗號分割。當聊天內(nèi)容中出現(xiàn)要過渡的關(guān)鍵字是將會被系統(tǒng)屏蔽,而聊天內(nèi)容3接收服務器端的系統(tǒng)消息當有其他用戶登陸時,系統(tǒng)會給在線的所有用戶發(fā)送用戶登陸信息,并且通過服務器可以給各用戶發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。4返回給客戶端當以上信息都封裝成功后,打開與客戶端連接的SOCKET的輸出流,然后再用OBJECTOUTPUTSTREAM對象輸出流包裝后輸出給客戶端。PUBLICVOIDSERVERCHAT/將接收到的對象值賦給聊天信息的序列化對象CHATCOBJNEWCHATCOBJCHATOBJ/CHENMINCOBJCHATMESSAGEWORDFILTERFILTERCOBJCHATMESSAGECHATLOGCOBJ/將聊天信息的序列化對象填加到保存聊天信息的矢量中USERCHATADDELEMENTCHATCOBJRETURN43客戶端程序編寫431程序?qū)⑼ㄟ^REGISTERJAVA用戶注冊界面收集用戶的用戶名、密碼、年齡、電子郵箱。如圖47客戶端用戶注冊信息模塊程序/連接到服務器SOCKETTOSERVERTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMSTREAMTOSERVERNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAM/寫客戶詳細資料到服務器SOCKETSTREAMTOSERVERWRITEOBJECTREGISTER_CUSTOMERDATA/讀來自服務器SOCKET的登陸狀態(tài)BUFFEREDREADERFROMSERVERNEWBUFFEREDREADERNEWINPUTSTREAMREADERTOSERVERGETINPUTSTREAMSTRINGSTATUSFROMSERVERREADLINE/顯示成功消息JOPTIONPANEOPNEWJOPTIONPANEOPSHOWMESSAGEDIALOGNULL,STATUSIFSTATUSEQUALSDATACUSTNAME“注冊成功“TXTUSERNAMESETTEXT“PWDUSERPASSWORDSETTEXT“PWDCONFIRMPASSSETTEXT“TXTAGESETTEXT“TXTEMAILSETTEXT“432用戶登錄4321收集用戶登錄信息程序?qū)⑼ㄟ^LOGINJAVA用戶登錄界面收集用戶的用戶名、密碼,如圖圖415收集用戶登錄信息圖/接受客戶的詳細資料TRY/連接到服務器SOCKETTOSERVERTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMSTREAMTOSERVERNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAM/寫客戶詳細資料到服務器SOCKETSTREAMTOSERVERWRITEOBJECTCUSTOMERDATA/讀來自服務器SOCKET的登錄狀態(tài)BUFFEREDREADERFROMSERVERNEWBUFFEREDREADERNEWINPUTSTREAMREADERTOSERVERGETINPUTSTREAMSTRINGSTATUSFROMSERVERREADLINEIFSTATUSEQUALS“登錄成功“NEWCHATROOMSTRINGDATACUSTNAME,STRSERVERIPTHISDISPOSE/關(guān)閉流對象STREAMTOSERVERCLOSEFROMSERVERCLOSETOSERVERCLOSEELSEJOPTIONPANESHOWMESSAGEDIALOGNULL,STATUSSTREAMTOSERVERCLOSEFROMSERVERCLOSETOSERVERCLOSE/LOGIN結(jié)束433聊天室當用戶登錄成功后,用戶的登錄界面將會隱藏,然后創(chuàng)建用戶聊天室窗口,在界面的標題欄將會顯示當前登錄用戶的用戶名,以防止一個機器上的用戶開多個賬號進入聊天室后分不清哪個窗口是哪個用戶登錄的,界面第一行將顯示當前在線人數(shù)。位于界面正中的兩個控件分別是LIST和TEXTBOX用來顯示當前服務器上的在線會員名單列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個性化配置控件。包括聊天對象,聊天語氣,聊天內(nèi)容,聊天字體,風格,大小,顏色4331用戶發(fā)送信息用戶需要發(fā)送信息時,在聊天內(nèi)容里寫下要發(fā)送的信息,然后點擊發(fā)送就可以發(fā)送到其他客戶端,也可以選擇私聊,聊天表情,聊天信息通過服務器發(fā)送到其他客戶端。如圖當多個用戶同時在線時可以對某個人私聊,而第三個人的聊天界面會被屏蔽掉。/“發(fā)送“按鈕PUBLICVOIDSENDMESSAGECHATCHATOBJNEWCHATCHATOBJCHATUSERSTRLOGINNAMECHATOBJCHATMESSAGETXTMESSAGEGETTEXTCHATOBJCHATTOUSERSTRINGVALUEOFCMBUSERGETSELECTEDITEMCHATOBJWHISPERCHPRIVATECHATISSELECTEDTRUEFALSECHATOBJEMOTEEMOTEGETSELECTEDITEMTOSTRING/向服務器發(fā)送信息TRYSOCKETTOSERVERNEWSOCKETSTRSERVERIP,1001OBJECTOUTPUTSTREAMOUTOBJNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAMOUTOBJWRITEOBJECTCHATOBJTXTMESSAGESETTEXT“/清空文本框OUTOBJCLOSETOSERVERCLOSECATCHEXCEPTIONE/SENDMESSAGE結(jié)束4333保存聊天記錄當用戶需要保存聊天記錄時可以直接點擊“保存”按鈕,為了防止多用戶聊天記錄文件沖突問題,聊天記錄將會以“用戶名_MESSAGETXT”為文件名,將信息保存在當前應用程序目錄下。如圖保持模塊程序/“保存“按鈕PUBLICVOIDSAVEMESSAGETRYFILEOUTPUTSTREAMFILEOUTPUTNEWFILEOUTPUTSTREAMTHISSTRLOGINNAME“_MESSAGETXT“,TRUESTRINGTEMPTAUSERMESSAGEGETTEXT/SYSTEMOUTPRINTLNTEMPFILEOUTPUTWRITETEMPGETBYTESFILEOUTPUTCLOSEJOPTIONPANESHOWMESSAGEDIALOGNULL,“聊天記錄保存在“THISSTRLOGINNAME“_MESSAGETXT“CATCHEXCEPTIONESYSTEMOUTPRINTLNE4334顯示系統(tǒng)時間當用戶需要查看當前時間時,可以直接點擊“時鐘”按鈕,將會啟動一個漂亮的電子時鐘,時鐘模塊程序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)當前用戶點擊“退出”按鈕或者關(guān)閉窗口時,系統(tǒng)將會把用戶退出的信息打包成對象發(fā)送給服務器,并退出客戶端程序。/“退出“按鈕PUBLICVOIDEXITEXITEXITNEWEXITEXITEXITNAMESTRLOGINNAME/發(fā)送退出信息TRYSOCKETTOSERVERNEWSOCKETSTRSERVERIP,1001/向服務器發(fā)送信息OBJECTOUTPUTSTREAMOUTOBJNEWOBJECTOUTPUTSTREAMTOSERVERGETOUTPUTSTREAMOUTOBJWRITEOBJECTEXITOUTOBJCLOSETOSERVERCLOSEFRMCHATDISPOSE/THISDESTROYCATCHEXCEPTIONEPRIVATEVOIDEXITCHATROOMEXIT4337出現(xiàn)異常信息在用戶聊天時,當服務器關(guān)閉或者與服務器無法連接時,客戶端將會給出“不能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣東科貿(mào)職業(yè)學院高職單招職業(yè)適應性測試參考題庫帶答案解析
- 2026年廣東碧桂園職業(yè)學院高職單招職業(yè)適應性測試模擬試題有答案解析
- 2026年邯鄲科技職業(yè)學院高職單招職業(yè)適應性考試參考題庫帶答案解析
- 2026年湖南工業(yè)職業(yè)技術(shù)學院單招職業(yè)技能考試參考題庫帶答案解析
- 投資協(xié)議2025年年度補充
- 投資合作協(xié)議2025年服務
- 2026年安慶職業(yè)技術(shù)學院單招職業(yè)技能筆試模擬試題帶答案解析
- 2026年湖南化工職業(yè)技術(shù)學院高職單招職業(yè)適應性測試備考題庫有答案解析
- 碳排放權(quán)期貨合約協(xié)議(2025年)
- 2026年河南工業(yè)和信息化職業(yè)學院高職單招職業(yè)適應性測試模擬試題有答案解析
- 第五單元生物與環(huán)境檢測卷 2025-2026學年人教版八年級生物上冊(含解析)
- 2026年河南實達國際人力資源合作有限公司招聘宋城產(chǎn)投勞務派遣人員備考題庫及一套答案詳解
- GB/T 26110-2025鋅鋁涂層技術(shù)規(guī)范
- 北京市朝陽區(qū)2024-2025學年七年級上學期期末英語試題(含答案)
- 2025年秋國家開放大學《毛概》終考大作業(yè)試題三附答案(供參考)范文
- 稅局查合作協(xié)議書
- 生活老師面試試題及答案
- 2024年國網(wǎng)35條嚴重違章及其釋義解讀-知識培訓
- 部編版八年級語文上冊課外文言文閱讀訓練5篇()【含答案及譯文】
- 高三英語一輪復習人教版(2019)全七冊單元寫作主題匯 總目錄清單
- 大學基礎(chǔ)課《大學物理(一)》期末考試試題-含答案
評論
0/150
提交評論