即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
即時聊天系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 前言 41.1 課題選題背景4.1.2 即時通信的概念和特點4.1.3 即時聊天系統(tǒng)的發(fā)展5.2 涉及的相關(guān)技術(shù)及協(xié)議 52.1 Java 語言5.2.2 C/S模式介紹6.2.3 Hibernate 框架簡介7.3 系統(tǒng)需求分析 73.1 即時聊天消息的一般需求 7.3.2 即時消息的協(xié)議需求8.3.3 即時消息的安全需求8.3.4 即時信息加密和鑒別8.3.5 即時通訊系統(tǒng)需求8.4 系統(tǒng)設(shè)計84.1 即時聊天系統(tǒng)的實施原理 9.4.2 軟件設(shè)計流程 功能模塊劃分 數(shù)據(jù)庫概要設(shè)計115 詳細設(shè)計125.1 服務(wù)器端的設(shè)計與實現(xiàn) 主服務(wù)器類的設(shè)

2、計 登錄驗證模塊.4 注冊處理模塊145.2 客戶端的設(shè)計與實現(xiàn).2 用戶注冊模塊.3 用戶登錄.4 在線用戶顯示設(shè)計 聊天信息發(fā)送與接收 數(shù)據(jù)庫設(shè)計1.9.6 結(jié)論 20致謝 22參考文獻23附錄24基于Java即時聊天系統(tǒng)的設(shè)計與實現(xiàn)摘要:計算機網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時通訊方式日益受到人們的青睞。即時聊天工具在實現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠距離進行直觀、真實的視音交流 的同時,利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進行處理。本課題研究的是支持內(nèi)部網(wǎng)絡(luò)交流的系統(tǒng)一

3、一網(wǎng)絡(luò)即時通訊系統(tǒng)。該系統(tǒng)使用 Java語言進行編程。系統(tǒng)采用C/S結(jié)構(gòu)模式,支持局域網(wǎng)和Internet 。該系統(tǒng)采用軟 件工程的瀑布模型進行開發(fā),分別討論了系統(tǒng)的需求分析、概要設(shè)計、詳細設(shè)計和編 碼、以及整個系統(tǒng)的運行和測試。關(guān)鍵詞:即時聊天;系統(tǒng);Java; C/SAbstract: The rapid development of computer network technology today, more immediate means of communication by people of all ages. Real-time chat tool in achieving

4、the transmission of video and audio information, so that members can collaborate remotely intuitive, real audio and visual communication at the same time, use of multimedia technology, it can also help users to work in all kinds of information processing.Study of this issue is to support the exchang

5、e of internal network systems - network instant messaging system. The system uses Java programming language. System uses the C / S structure mode, support for LAN and Internet. The system uses the waterfall model of software development projects were discussed system requirements analysis, outline d

6、esign, detailed design and coding, and run and test the whole system. Finally, the paper concluded.Of course, the system there are some imperfections, and seek to study and work in the future be amended so that the system actually used in a variety of network efficiency.Keywords : Instant Messager;

7、System; JAA; C/S1前言交流對于人類社會及其每個成員都至關(guān)重要。直接交流的方式包括語言、文字等, 而遠程交流還需借助于一些先進的工具如電話、網(wǎng)絡(luò)等。本課題研究的是支持內(nèi)部網(wǎng) 絡(luò)交流的系統(tǒng)一一網(wǎng)絡(luò)即時通訊系統(tǒng)。該課題在實施的過程中需要使用Java語言。1.1 課題選題背景計算機技術(shù)、網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時通訊方式日益受到人們的青睞。即 時通訊工具在實現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠距離進行直觀、真實的視 音交流的同時,利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進行處理。大家都知道,網(wǎng)絡(luò)上常用的即時通訊工具之一有ICQ。其實,ICQ是英文“Iseekyou”的簡

8、稱,中文意思是 我找你”。ICQ最大的功能便是即時信息交流,只要記得對 方的號碼,上網(wǎng)時可以呼他,無論他在哪里,只要他上網(wǎng)打開 ICQ,人們就可以隨時 交流。目前即時聊天系統(tǒng)種類眾多,功能也較為齊全。該課題現(xiàn)在所研究的即時通訊系 統(tǒng),其目標(biāo)是定位于企業(yè)內(nèi)部網(wǎng)絡(luò),解決企業(yè)或單位的溝通及協(xié)同的問題,提高工作 效率。企業(yè)內(nèi)部員工可以利用該通訊系統(tǒng)隨時隨地發(fā)送文字消息、進行多人群聊、消 息群發(fā)、傳送文件、音頻視頻對話等。系統(tǒng)包括客戶端程序和服務(wù)器端程序,支持局 域網(wǎng)和Internet。企業(yè)內(nèi)部員工之間可以在內(nèi)部網(wǎng)覆蓋的任何地點、任何時間進行即時交流,真正實現(xiàn)企業(yè)內(nèi)部協(xié)同工作。使您不必花費大量的時間、金

9、錢聚集到一個地方, 通過網(wǎng)絡(luò),就能實現(xiàn)面對面的溝通,提高了效率。MSN、QQ等公共消息系統(tǒng),由于聊天對象及內(nèi)容的不可控,若在企業(yè)內(nèi)部使用,可能會降低工作效率。而該即時通訊 系統(tǒng)將自己的服務(wù)器端安裝在企業(yè)內(nèi),并且人員的創(chuàng)建是由系統(tǒng)管理員來完成,因此 很好的解決了這個問題。即時通訊帶給了更大的互動性,人們在交流彼此的看法、意見時,發(fā)現(xiàn)采用你來 我往的方式達到的效果最為明顯。這就體現(xiàn)了互動性。通過使用及時通訊系統(tǒng),大家 不需要離開電腦,不需要借助其它額外的工具,就可以在線實時地交流工作。1.2 即時通信的概念和特點即時通訊(IM)是一個允許兩人或多人使用網(wǎng)絡(luò)即時地傳遞文字信息、檔案、語音 與視頻交流

10、的終端服務(wù)。即時通訊不同于e-mail在于它的交談是即時的。印大部分的即時通訊服務(wù)提供了 presence awareness的特性顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在在 線與能否與聯(lián)絡(luò)人交談。在早期的即時通訊程序中,使用者輸入的每一個字符都會即 時顯示在雙方的銀幕,且每一個字符的刪除與修改都會即時的反應(yīng)在銀幕上。這種模 式比起使用e-mail更像是電話交談,充分體現(xiàn)了其實時特性。在現(xiàn)在的即時通訊程序 中,為了畫面的完整美觀和交流方便,交談中的另一方通常只會在本地端按下送出鍵 (Enter或是Ctrl+Enter)后才會看到信息。1.3 即時聊天系統(tǒng)的發(fā)展二十世紀七十年代早期,一種較早的即時通訊形式是

11、柏拉圖系統(tǒng)(PLATO system)。 八十年代,UNIX/Linux的交談即時信息被廣泛的使用于工程師與學(xué)術(shù)界,九十年代即時通訊更可跨越了操作系統(tǒng)平臺交流,1996年11月,首個廣泛被非UNIX/Linux使用 者用于因特網(wǎng)的即時通訊軟件ICQ出現(xiàn)。通常認為ICQ是現(xiàn)在流行使用的即時通訊軟 件的開山之作。ICQ源于以色列特拉維夫的 Mirabils公司。該公司成立于1996年7月, 也就是在這個時候,四個月后的1996年11月,互聯(lián)網(wǎng)上最出名,下載使用人數(shù)最多 的免費軟件ICQ誕生了,她是由幾個以色列的年輕人制作的,在無人投資的情況下, 他們向全球互聯(lián)網(wǎng)用戶提供免費下載使用,到了1998年

12、,Mirabilis公司的ICQ用戶已經(jīng)發(fā)展到1200萬人,并以每月100萬用戶的速度增加。這時候,ICQ公司由于其潛 在的巨大商業(yè)廣告價值,已經(jīng)成為許多大公司爭相購買的對象,1998年ICQ公司將自 己開發(fā)的軟件連同用戶一起 賣”給了美國在線(AOL),售價2.87億美元。據(jù)美國在 線1999年底稱,ICQ使用者已達5000萬,其中超過三分之二的使用者居住在美國本 土以外的世界各地。ICQ造就的實時通信成了互聯(lián)網(wǎng)世界中發(fā)展最快的一個領(lǐng)域。2涉及的相關(guān)技術(shù)及協(xié)議為了保證課題能正常實施,先來分析一下課題所需要的相關(guān)技術(shù)和協(xié)議。2.1 Java 語言經(jīng)過認真的討論分析,綜合各種計算機高級語言的特征

13、和適應(yīng)范圍,最終決定選 擇純面向?qū)ο蟮腏ava語言來完成畢業(yè)論文的設(shè)計,下面就技術(shù)可行性方面,對 Java 語言作一簡要介紹。Sun公司的口號就是“網(wǎng)絡(luò)就是計算機” ,Java能使所有東西從桌面計算平穩(wěn)的轉(zhuǎn) 變?yōu)榛诰W(wǎng)絡(luò)的計算,它是專門為此而建立的,并顯然是為了完成這個任務(wù)而來的。 使用Java語言,可以相對輕松的一天編寫一個有條理的網(wǎng)絡(luò)程序。今天, Java的網(wǎng)絡(luò) 功能正在飛躍發(fā)展,不斷有新的特性增加到這個有價值的基礎(chǔ)上,JavaSoft實驗室正在不斷努力使Java更加完善。就Java語言的主要特點,本人歸納如下:Java程序設(shè)計的開發(fā)過程與運行環(huán)境 Java是解釋型的高級編程語言,所以 J

14、ava 程序的開發(fā)通常需要經(jīng)過編寫源程序、編譯生成字節(jié)碼和運行三個過程。這里要提到, Java應(yīng)用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個部分。Java編譯程序?qū)ava 源程序翻譯為JVM可執(zhí)行代碼一字節(jié)碼。這一編譯過程同C/C+的編譯有些不同。當(dāng) C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運行而產(chǎn)生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉(zhuǎn)換為特定的內(nèi)存偏移 量,以保證程序運行。Java編譯器卻不將對變量和方法的引用編譯為數(shù)值引用,也不 確定程序執(zhí)行過程中的內(nèi)存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋 器在運行過程中創(chuàng)立內(nèi)存布局,然后再通

15、過查表來確定一個方法所在的地址。這樣就 有效的保證了 Java的可移植性和安全性。2.2 C/S模式介紹20世紀90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計算模式為客戶機 /服務(wù)器模式, 簡稱為C/S模式,它實際上就是把主機一終端模式中原來全部集中在主機部分的任務(wù) 一分為二,保留在主機上的部分負責(zé)集中處理和匯總運算,成為服務(wù)器;而下放到終 端的部分負責(zé)為用戶提供友好的交互界面,稱為客戶機。相對于以前的模式,C/S模式最大的改進是不再把所有軟件都裝進一臺計算機,而是把應(yīng)用系統(tǒng)分成兩個不同 的角色和兩個不同的地位:一般在運算能力較強的計算機上安裝服務(wù)器端程序,而在 一般的PC上安裝客戶機程序。正是由于個

16、人 PC機的出現(xiàn)使客戶機/服務(wù)器模式成為 可能,因為PC機具有一定的運算能力,用它代替了上面第一種模式的啞終端后,就 可以把主機端的一部分工作放在客戶機端完成,從而減輕了主機的負擔(dān),也增加了系 統(tǒng)對用戶的響應(yīng)速度和響應(yīng)能力??蛻魴C和服務(wù)器之間通過相應(yīng)的網(wǎng)絡(luò)協(xié)議來進行通訊。客戶機向服務(wù)器發(fā)出數(shù)據(jù) 請求,服務(wù)器將數(shù)據(jù)傳送給客戶機進行計算,計算完畢,計算結(jié)果可返回給服務(wù)器。 這種模式的優(yōu)點充分利用了客戶機的性能,使計算能力大大提高;另外,由于客戶機 和服務(wù)器之間的通訊是通過網(wǎng)絡(luò)協(xié)議進行的,是一種邏輯的聯(lián)系,因此物理上在客戶 機和服務(wù)器兩端是易于擴充的。C/S模式是目前占主流的網(wǎng)絡(luò)計算模式。該模式在操

17、作過程中采取的是主動請示方式:首先服務(wù)器方要先啟動,并根據(jù)請示提供相應(yīng)服務(wù)(過程如下):(1)打開一個通信通道同時通知本地主機,服務(wù)器愿意在某一個公認地址上接收客 戶請求。(2)等待某個客戶請求到達該端口。(3)接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。(4)返回第二步,等待另一客戶請求。(5)關(guān)閉該服務(wù)器??蛻舳耍?1)打開一個通信通道,并連接到服務(wù)器所在主機的特定端口。(2)向服務(wù)器發(fā)送服務(wù)請求報文,等待并接收應(yīng)答;繼續(xù)提出請求。(3)請求結(jié)束后關(guān)閉通信通道并終止。分布運算和分布管理是客戶機/服務(wù)器模式的特點。最后選擇了 C/S模式 2.3 Hibernate框架簡介Hibernate

18、是一種Java語言下的對象關(guān)系映射解決方案。它是一種自由、開源的軟 件。它用來把對象模型表示的對象映射到基于SQL的關(guān)系模型結(jié)構(gòu)中去,為面向?qū)ο蟮念I(lǐng)域模型到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的映射,提供了一個使用方便的框架。主要作用有:Hibernate不僅管理Java類到數(shù)據(jù)庫表的映射(包括從 Java數(shù)據(jù)類 型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開 發(fā)時人工使用SQL和JDBC處理數(shù)據(jù)的時間。它的設(shè)計目標(biāo)是將軟件開發(fā)人員從 大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來。無論是從設(shè)計草案還是從一個遺留 數(shù)據(jù)庫開始,開發(fā)人員都可以采用Hibernate在應(yīng)用方面,Hibern

19、ate又t JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,它既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用 中使用。最具革命意義的是, Hibernate可以在應(yīng)用EJB (Enterprise JavaBeansU Java 應(yīng)用于企業(yè)計算的框架)的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。3系統(tǒng)需求分析前面兩章介紹了課題的選題背景和相關(guān)的技術(shù)基礎(chǔ)和協(xié)議。在本章中將討論一下 即時通訊系統(tǒng)的需求分析。3.1 即時聊天消息的一般需求3.1.1 一般即時消息格

20、式需求(1)所有實體必須至少使用一種消息格式;(2) 一般即時消息格式必須定義發(fā)信者和即時收件箱的標(biāo)識;(3)一般即時消息格式必須包含一個讓接收者可以回消息的地址;(4)一般即時信息格式必須允許對信息有效負載的編碼和鑒別(非ASCII內(nèi)容);(5)必須提供擴展和注冊即時消息格式的模式的機制。3.1.2 可靠性需求協(xié)議必須存在機制,保證即時消息成功投遞或者投遞失敗的時候,發(fā)信者獲得足 夠的信息。3.1.3 性能需求(1)即時消息的傳輸必須足夠的迅速;(2)即時消息的內(nèi)容必須足夠豐富;(3)即時消息的長度盡量足夠的長。3.2 即時消息的協(xié)議需求協(xié)議是一系列的步驟,它包括雙方或者多方,設(shè)計它的目的是

21、要完成一項任務(wù)。即時通訊協(xié)議,參與的雙方或者多方是即時通訊的實體。協(xié)議必須是雙方或者多方參 與的,一方單獨完成的就不算協(xié)議。這樣在協(xié)議動作的過程中,雙方必須交換信息, 包括控制信息、狀態(tài)信息等等。這些信息的格式必須是協(xié)議參與方同意并且遵循的。好的協(xié)議要求清楚、完整,每一步都必須有明確的定義,并且不會引起誤解;對每種 可能的情況必須規(guī)定具體的動作。3.3 即時消息的安全需求A發(fā)送即時消息M給B,有以下幾種情況和相關(guān)需求:(1)如果無法發(fā)送,A必須接到確認;(2)如果M被投遞了,B只能接受M 一次;(3)協(xié)議必須為B提供方法檢查A發(fā)送了這條信息;(4)協(xié)議必須允許B使用另一條即時信息,回復(fù)信息;1

22、.1 協(xié)議必須為A提供方法保證沒有其他個體 C可以篡改M;3.4 即時信息加密和鑒別(1)協(xié)議必須提供方法保證通知和即時消息的置信度,未被監(jiān)聽或者破壞;(2)協(xié)議必須提供方法保證通知和即時消息的置信度,未被重排序或者回放;(3)協(xié)議必須提供方法保證通知和即時消息被正確的實體閱讀;(4)協(xié)議必須允許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時通訊系統(tǒng)需求3.5.1 注冊需求(1)即時通訊系統(tǒng)擁有多個賬戶,允許多個用戶注冊;(2) 一個用戶可以注冊多個ID;(3)注冊所使用的帳號類型為字母ID。3.5.2通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3

23、)用戶可以加密/解密消息等。4系統(tǒng)設(shè)計在這里我們將該即時通訊系統(tǒng)命名為CHAT,現(xiàn)在對該系統(tǒng)進行總體設(shè)計。采用客戶機/服務(wù)器(C/S)的模式來設(shè)計,是一個2層的C/S結(jié)構(gòu):應(yīng)用程序服務(wù)器一應(yīng) 用程序客戶端,其分層機構(gòu)如圖1所示??蛅nnrlR外尋IrtrHE也非內(nèi)部同事愀,7)|£ES <i l,?:匕一-rMniClk.lC 地mC'lkHtCIhrrH奔戶一戶機者戶一齊戶ei圖1 2層C/S結(jié)構(gòu)示意圖客戶層也叫做應(yīng)用表示層,也就是我們說的客戶端,這是應(yīng)用程序的用戶接口部 分。給即時通訊工具設(shè)計一個客戶層具有很多優(yōu)點,這是因為客戶層擔(dān)負著用戶與應(yīng) 用問的對話功能。它用

24、于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能 直接地進行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫 顯示控制和數(shù)據(jù)檢查程序就可以了,而不會影響其他兩層。服務(wù)層又叫做功能層,相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序 中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能 層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(jié)果數(shù)據(jù),它也是一次性 傳送給表示層的。在應(yīng)用設(shè)計中,必須避免在表示層和功能層之間進行多次的數(shù)據(jù)交 換,這就需要盡可能進行一次性的業(yè)務(wù)處理,達到優(yōu)化整體設(shè)計的目的。4.1 即時聊天系統(tǒng)的實施原理4.1.1 工作方式和

25、技術(shù)原理典型的IM工作方式如下:登陸CHAT通訊服務(wù)器,獲取一個自建立的歷史的交 流對象列表(同事列表),然后自身標(biāo)志為在線狀態(tài),當(dāng)好友列表中的某人在任何時候 登錄上線并試圖通過你的計算機聯(lián)系你時,IM系統(tǒng)會發(fā)一個消息提醒你,然后你能與 他建立一個聊天會話通道進行各種消息如鍵入文字、通過語音等的交流,從技術(shù)上來 說,聊天系統(tǒng)的基本技術(shù)原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器,服務(wù)器通過讀取用戶 數(shù)據(jù)庫來驗證用戶身份,如果驗證通過,登記用戶A的IP地址、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標(biāo)志,此時用戶A在IM 系統(tǒng)中的狀態(tài)為在線(On

26、line Presence。第二步,根據(jù)用戶A存儲在IM服務(wù)器上的好友列表(Buddy List),服務(wù)器將用 戶A在線的相關(guān)信息發(fā)送給也同時在線的IM好友的PC機,這些信息包括在線狀態(tài)、 IP地址、IM客戶端使用的TCP端口(Port)號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務(wù)器把用戶A存儲在服務(wù)器上的好友列表及相關(guān)信息回送到他的 客戶端機,這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port) 號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)。4.1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務(wù)

27、器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機發(fā)出聊天信息,用戶B的IM 客戶端軟件收到后顯示在屏幕上,然后用戶 B再直接回復(fù)到用戶A的PC機,這樣雙 方的即時文字消息就不再IM服務(wù)器中轉(zhuǎn),而是直接通過網(wǎng)絡(luò)進行點對點的通訊,即 對等通訊方式(Peer To Peer。(2)在線代理通訊用戶A與用戶B的點對點通訊由于防火墻、網(wǎng)絡(luò)速度等原因難以建立或者速度很 慢,IM服務(wù)器將會主動提供消息中轉(zhuǎn)服務(wù),即用戶 A和用戶B的即時消息全部先發(fā) 送到IM服務(wù)器,再由服務(wù)器轉(zhuǎn)發(fā)給對方。4.2 軟件設(shè)計流程因為該系統(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進行設(shè)計, 分為幾大

28、步驟:先進行需求分析,再是系統(tǒng)設(shè)計,然后是詳細設(shè)計與編碼,其次是軟 件的測試,最后是軟件的運行和維護。 在實際過程中這些步驟經(jīng)常是重疊和彼此問 有信息交換,它不是一個簡單線性過程,而是包括開發(fā)步驟的多個反復(fù)。如圖2所示。4.3 功能模塊劃分該即時聊天工具按如下過程完成通信:(1)客戶向服務(wù)器注冊,告知服務(wù)器該客戶監(jiān)聽某主題;(2)客戶注冊之后,向服務(wù)器發(fā)送消息;(3)服務(wù)器再把消息發(fā)送給所有監(jiān)聽此主題的客戶。根據(jù)以上描述,該系統(tǒng)功能模塊圖請見圖 3。.建立連接服務(wù)器端一一存儲數(shù)據(jù)_監(jiān)聽用戶 一即時聊天系-新建用戶* I客戶端登錄通訊交流圖3通訊系統(tǒng)的功能模塊4.3.1 服務(wù)器端由圖3可知服務(wù)器

29、端完成至少3大功能:建立連接、存儲數(shù)據(jù)和監(jiān)聽客戶。這 3 大功能的具體含義如下:(1)建立一個ServerSocke旌接,不斷偵聽是否有客戶端連接或者斷開連接。(2)服務(wù)器端是一個信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,再由服務(wù) 器根據(jù)要求分發(fā)出去。(3)數(shù)據(jù)庫數(shù)據(jù)操作包括將用戶信息存儲到數(shù)據(jù)庫等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送新建用戶的信 息,接收來自服務(wù)器的信息進行注冊。(2)用戶登錄:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送信息,完成用戶 登錄。(3)通信

30、交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。4.4 數(shù)據(jù)庫概要設(shè)計因為本系統(tǒng)采用的是2級C/S結(jié)構(gòu)模式,所以,為了減少服務(wù)器的存儲量,方便程序 設(shè)計,本系統(tǒng)只對用戶信息進行存儲。利用 JAVA中的hibernate框架技術(shù)進行存儲。 在Hibernate中,各表的映射文件 .hbm.xml可以通過工具生成,在本系統(tǒng)中,用戶表 信息可以用Xml代碼實現(xiàn)。用戶表(user)表1 用戶信息表名稱字段名稱類別主鍵非空用戶編號id數(shù)字是是登錄名CustName文本否是登錄密碼CustPassword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email否是5詳細設(shè)計5.1服務(wù)器端的設(shè)計與實

31、現(xiàn)作為C/S模式下的系統(tǒng)開發(fā),很顯然服務(wù)器端程序的設(shè)計是非常重要的。下面就 服務(wù)器端的相關(guān)程序模塊進行設(shè)計,并一定程度上實現(xiàn)了相關(guān)功能。5.1.2主服務(wù)器類的設(shè)計設(shè)計服務(wù)器時需要考慮如下幾個因素:(1)服務(wù)器的運行速度;(2)服務(wù)器的響應(yīng)速度,包括新建連接和發(fā)送數(shù)據(jù)的響應(yīng)速度;(3)1/0吞吐量;(4)其他:流量控制(QoS)、安全性。針對TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu),設(shè)計服務(wù)器的程序結(jié)構(gòu)需要考慮以下的因素:(1)多線程;(2)多進程;(3)單線程。主服務(wù)器類實現(xiàn)了服務(wù)器端的多線程,使用 SeverSocket s=newServerSocket(1001) 語句在1001端口創(chuàng)建套接口;使用n

32、ew ServerThread(socke晤句創(chuàng)建新的線程。主服 務(wù)器類調(diào)用ServerThread類,而每個ServerThread實體就是一個獨立的線程,剛好對 應(yīng)于客戶端的連接請求響應(yīng)線程。服務(wù)器端有一個(或多個)進程在指定的端口等待 客戶的連接信息,一旦連接成功,就可以按設(shè)計的數(shù)據(jù)交換方法和格式進行數(shù)據(jù)傳輸。客戶端只在需要的時候向服務(wù)器端發(fā)出連接請求。實現(xiàn)界面如圖4。圖4服務(wù)器啟動界面現(xiàn)就其中一些核心代碼進行講解。public class AppServer extends Thread。其中public是JAVA的關(guān)鍵字,用來表示該類是共有,在整個程序里都可以訪問 到它;Class表

33、示類定義,它后面接著用戶定義的類的類名為AppServer; extends表示繼承的意思,他后面的類Thread是子類,能夠繼承父類AppServer所定義的一些變量。 這條語言表示的意思就是聲明一個公共類AppServer,用子類Thread繼承父類AppServer中的一些變量。static boolean newMessags 其中,static是關(guān)鍵字,表示靜態(tài)變量,Boolean表示變量類型為布爾型,變量名為newMessags這條語句的意思是定義一個靜態(tài)變量newMessage它的類型為布爾型。值得強調(diào)的是布爾型數(shù)據(jù)只有兩個值true和false,并且它們不對應(yīng)人數(shù)整數(shù)值。if(

34、start) sFrame.txtStatus.setText(巴啟動) log(null,"服務(wù)器已啟動.");else sFrame.txtStatus.setText("閉中.”); 這是一條if條件判斷語句,它表示變量start如果不為空,那么執(zhí)行語句第一個大 括號中的語句,如果為空,則執(zhí)行else中的語句。其中,log為輸出語句,表示在窗口 中輸出服務(wù)器已啟動”信息。public void run() try while (start) Socket client = serverSocket.accept();Connection con = new

35、Connection(client, u, v, userInfo); catch (lOException e) log(e,"不能監(jiān)聽!)這個函數(shù)的作用是監(jiān)聽用戶信息,void表示定義的函數(shù)不需要返回值,while是循 環(huán)語句關(guān)鍵字,在語句中的意思為直到start的值不為空,將循環(huán)執(zhí)行后面括號的語句, 直到start值為空后,循環(huán)才結(jié)束。Connection con表示連接用戶信息。Catch是對java 中的異常進行捕獲,并且能夠拋出異常,便于程序能夠正常運行。1.1.2 登錄驗證模塊系統(tǒng)的登錄模塊是比較重要的,這是用戶的一個身份驗證,是通訊系統(tǒng)必須的一 個功能模塊。如果客戶端

36、輸入的字符串表方式需要登錄,那么服務(wù)器在接收到該信息 后連接數(shù)據(jù)庫,準備從數(shù)據(jù)庫選擇昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過來的號碼 和密碼信息后,設(shè)定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較輸入的用戶名和 密碼數(shù)據(jù)庫信息來卻請用戶的登錄是否成功。以下為登陸驗證的流程圖。圖5用戶登錄流程圖1.1.3 注冊處理模塊新建用戶是即時通訊工具的一個基本功能。用戶新建過程也在線程監(jiān)聽函數(shù) run()中。新建用戶的過程是這樣的:首先使用Register_Customer(方法加載數(shù)據(jù)庫驅(qū)動類;然后使用dao.getUser(方法獲取數(shù)據(jù);在獲取注冊名時,進行判斷,查看用戶名是否 重復(fù),如果重復(fù),則向客戶端彈

37、出提示信息,見圖 6;如果不重復(fù),服務(wù)器接收客戶 端用戶發(fā)送的昵稱、密碼、用戶E-mail等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建; 最后向用戶反饋注冊成功信息。清且(T) 注冊名重復(fù).諸務(wù)件選擇確定圖6注冊名重復(fù)提示信息5.2 客戶端的設(shè)計與實現(xiàn)前一章介紹了服務(wù)器端的設(shè)計與實現(xiàn),對于C/S模式的系統(tǒng)而言,還必須對系統(tǒng)的客戶端進行設(shè)計和實現(xiàn)。下面就來解決這樣一個問題。客戶端通過Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過構(gòu)造 BufferedReader、 PrintWriter來建立輸入流和輸出流,雙方通過該輸入流和輸出流來相互傳遞信息。只 要收到客戶端的連接請求,服務(wù)器利用accept

38、()函數(shù)返回一個新建的Socket對象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊、登錄和查找同事等請求,服務(wù)器收到請求后, 針對不同的消息處理請求。5.2.1 用戶注冊模塊當(dāng)用戶向服務(wù)器端發(fā)出注冊請求后,客戶端將向服務(wù)器發(fā)送客戶傳遞的信息,諸 如客戶的昵稱、性別、個人資料等信息。等服務(wù)器接收完畢后,服務(wù)器會通過hibernate 框架讀取數(shù)據(jù)庫信息,并進行判斷,最后在客戶端收到服務(wù)器的反饋信息?,F(xiàn)對部分關(guān)鍵語句進行講解。public class Register extends JFrame implements ActionListenerToolkit toolkit=Toolkit.getD

39、efaultToolkit();JButton btnOk,btnCancel,btnClear;public Register(String ip)btnOk=new JButton("確定(O)");btnOk.setMnemonic('O');btnOk.setToolTipText("保存注冊信息) btnOk.setBounds(250,135,80,25);Implement繼承于接口類時用的關(guān)鍵詞 ,在數(shù)據(jù)接口位置使用,在這里表示類ActionListen 類繼承類 Register。JButton btnOk,btnCancel,b

40、tnClear)這條語句中,JButton 其實是一個類,名為JButton按鈕類,它是JAVA中自帶的一種控件,當(dāng)鼠標(biāo)移入、移出、被點擊所定義的3個變量時,會觸發(fā)JButton類,從而執(zhí)行相應(yīng)的操作。如在類 Register中,當(dāng)鼠標(biāo)點 擊“確定”按鈕時,則會觸發(fā)類JButton定義的變量btnOk,并且為其賦值,進而調(diào)用setToolTipText方法,將注冊信息進行保存。而 setBounds類是JAVA自帶類,他能夠 設(shè)置組件位置 ,即確定注冊窗口位置。見圖7。圖7用戶注冊界面5.2.2 用戶登錄當(dāng)用戶點擊登錄時,客戶端發(fā)起請求與服務(wù)端建立連接, 登錄信息首先在客戶端 做驗證,然后通過

41、填寫的服務(wù)器IP地址申請與服務(wù)端建立連接。而在服務(wù)器端,有一 個主線程專門創(chuàng)建SOCKET服務(wù),等待客戶端的連接,每當(dāng)客戶端發(fā)起連接的申請時, 與之建立連接,并創(chuàng)建一個線程,將建立的連接交給這個線程處理,并將連接存入一 個集合中,用于后續(xù)業(yè)務(wù)的處理。然后服務(wù)器將反序列化客戶端傳輸過來的數(shù)據(jù),生 成一個用戶對象。從中獲取登錄填寫的信息,根據(jù)用戶名和密碼在數(shù)據(jù)庫中查找數(shù)據(jù), 如果能夠找到表示登錄成功,反之,登錄不成功。最后將登錄的結(jié)果通過文本發(fā)送給 客戶端發(fā)送給服務(wù)端。最后,如果通過驗證,得到一個標(biāo)志,進入聊天主窗體,否則 彈出登錄失敗的對話框,讓用戶重新登錄。登陸界面見圖8圖8用戶登陸界面現(xiàn)對部

42、分關(guān)鍵代碼進行講解:public void actionPerformed(ActionEvent ae) Object source=ae.getSource();if (source.equals(btnLogin) if(txtUserName.getText().equals("") | pwdPassword.getText().equals("") JOptionPane op1=new JOptionPane();op1.showMessageDialog(null,用戶名或密碼不能為空");else strServerIp=tx

43、tServer.getText();login();該語句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如果不為空,則調(diào)用login方法。這里equals表示接受變量的值;表示“或” 的意思,;showMessageDialog是JAVA的自帶控件,作用是在當(dāng)前界面彈出對話框; 關(guān)鍵字new,是一種調(diào)用方法,表示能夠直接調(diào)用類的構(gòu)造方法。5.2.3 在線用戶顯示設(shè)計用戶完成登錄后,客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器 請求讀取在線人員名單;服務(wù)器收到該請求,開始讀取數(shù)據(jù)庫中的user表并得到同事的號碼,向客戶端發(fā)送這些信息;客戶收到服務(wù)器信息后,在主窗

44、口顯示顯現(xiàn)成員的 昵稱。其實現(xiàn)代碼如下:for (int i=0;i<messobj.userOnLine.size();i+)String User=(String)messobj.userOnLine.elementAt(i);IstUserList.addltem(User); 這里采用了 for循環(huán),定義變量i,初值為0,只要i滿足;i<messobj.userOnLine.size() 這個條件,循環(huán)將執(zhí)行一次。執(zhí)行完一次循環(huán)后i的值自動加1,這里的 messobj.userOnLine.size(疾示在線用戶的人數(shù),IstUserList.addltem(User)表示

45、顯示用戶 的昵稱。5.2.4 聊天信息發(fā)送與接收聊天信息的發(fā)送與接收都是通過Socket類實現(xiàn)的。使用Socket對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉 Socket。也就是說,在服務(wù)端開啟 socket服務(wù),客戶端每一次連接成功時也都會同時 創(chuàng)建一個線程來處理這次連接的請求,而該連接會被保存在一個集合中,直到服務(wù)結(jié) 束,連接關(guān)閉,該線程也會結(jié)束,同時從連接的集合中移除該連接。(1)信息發(fā)送用戶在每次發(fā)送信息時,首先向服務(wù)器發(fā)送的是自己信息和發(fā)送對象信息,然后再通過Socket類向服務(wù)器發(fā)送信息。當(dāng)然,在每次輸入信息后,輸入信息框的內(nèi)容將 會被清

46、空。關(guān)鍵代碼如下:public void sendMessage() chatobj.chatUser=strLoginName;chatobj.chatMessage=txtMessage.getText();chatobj.chatToUser=String.valueOf(cmbUser.getSelectedItem();chatobj.whisper=chPrivateChat.isSelected()?true:false;隨服務(wù)器發(fā)送信息try Socket toServer=new Socket(strServerIp,1001);ObjectOutputStreamoutOb

47、j=new ObjectOutputStream(toServer.getOutputStream();outObj.writeObject(chatobj);txtMessage.setText("");/清空文本框outObj.close();catch(Exception e) 其中,方法中的前三句表示系統(tǒng)獲取發(fā)送信息者的昵稱,發(fā)送信息內(nèi)容以及發(fā)送 對象的昵稱;chPrivateChat.isSelected()?true:falseS是一個判斷語句,表示信息值是否 為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則

48、賦false。在上文中,我們講到了 catch有拋出異常的作用,而try-9212也是具有相同的 功能,try塊塊是需要捕獲異常的,因為文件有可能不存在,會導(dǎo)致程序崩潰,所以 直接捕獲,也可以直接throws出去,讓調(diào)用該方法的方法去捕獲,從而使程序能夠正 常進行。止匕外,函數(shù)Socket(strServerIp,1001)用來創(chuàng)建一個能夠進行網(wǎng)絡(luò)通信的套接字。 參數(shù)strServerIp為通信協(xié)議的協(xié)議族,1001則為服務(wù)器IP。而outObj.whteObject(chatobj)的作用WJ是把調(diào)用 writeObject方法,將信息發(fā)送到 服務(wù)器。(2)信息輸出本即時聊天系統(tǒng)的信息輸出原

49、理是將所有輸入信息通過socket類向服務(wù)器發(fā)送,然后直接從服務(wù)器中突出信息。關(guān)鍵代碼如下:Socket toServer;toServer=new Socket(strServerIp,1001); /將信息發(fā)往服務(wù)器Message messobj=new Message。; messobj.username = strLoginName;ObjectOutputStreamstreamtoserver=newObjectOutputStream(toServer.getOutputStream() streamtoserver.whteObject(Message)messobj); 收來

50、 自服務(wù)器的信息 由于上文以對很多方法進行講解,現(xiàn)主要對ObjectOutputStream進行講解。ObjectOutputStream將Java對象的基本數(shù)據(jù)類型和圖形寫入OutputStream=可以使用ObjectInputStream讀取(重構(gòu))對象。通過在流中使用文件可以實現(xiàn)對象的持久 存儲。如果流是網(wǎng)絡(luò)套接字流,則可以在另一臺主機上或另一個進程中重構(gòu)對象。也 就是說通過ObjectOutputStream將toServer.getOutputStream班行重構(gòu),從而將服務(wù)器 接受的信息重構(gòu)到客戶機上,最后通過streamtoserver.writeObject(方法將信息寫在客

51、戶端上。5.3 數(shù)據(jù)庫設(shè)計在前文我們已經(jīng)分析了數(shù)據(jù)庫的實現(xiàn)是采用了hibernate框架中的.XML映射。以下則為實現(xiàn)的關(guān)鍵代碼:-vhibernate-mapping package="org.seler.bean” auto-import="true">-<class name="Register_Customer" table="user"><id name="id" column="id"> <generator class="na

52、tive" /> </id><property name="custName" not-null="true" unique="true" optimistic-lock="true" lazy="false” /><property name="custPassword" not-null="true" unique="false" optimistic-lock="true"

53、lazy="false” /><propertyname="age"not-null="true"lazy="false” /><propertyname="sex"not-null="true"lazy="false” /><propertyname="email"not-null="truelazy="false” />unique="false" optimistic-lock=

54、"true"unique="false" optimistic-lock="true"unique="false”optimistic-lock="true"</class></hibernate-mapping>其中,package="org.seler.bean'表示調(diào)用該框架 bean中的數(shù)據(jù)包;auto-import="true"表示hibernate框架中的將映射文件實體;property表示元素定義,name表示字段名;not-nu

55、ll表示是否設(shè)置該字段為空;unique表示是否設(shè)置該字段為 唯一值;optimistic-lock指定此屬性做更新操作時是否需要樂觀鎖定;lazy指定是否采用延遲加載及加載策略,設(shè)置為false,表示此關(guān)聯(lián)對象不采用延遲加載。6結(jié)論眾所周知,互聯(lián)網(wǎng)從誕生以來,就開始影響著地球的每一個角落,給予了人類一 種全新的生活方式,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,新興的技術(shù)也層出不窮,即時通信 系統(tǒng)就是這么一種以聊天形式為主的廣受歡迎的互聯(lián)網(wǎng)技術(shù)。當(dāng)然,該課題討論的即 時通訊系統(tǒng)是定位于內(nèi)部局域網(wǎng),供班級內(nèi)部人員使用的通訊系統(tǒng)。即時通信中最基本的功能就是通過計算機之間的文本數(shù)據(jù)的互換的形式實現(xiàn)思 想的交流和溝

56、通,它的優(yōu)點是方便快捷,為人們之間創(chuàng)建了一種新型的、廉價的、快 速的、簡便的溝通方式。首先,本系統(tǒng)完全按照軟件工程的瀑布模型進行開發(fā),雖然缺少部分開發(fā)文檔, 但本論文則是按照需求分析,概要設(shè)計,詳細設(shè)計,軟件的運行和測試等的結(jié)構(gòu)進行 安排的。其次,本即時聊天系統(tǒng)采用了 C/S模型。服務(wù)器在C/S模型中處于一個中心地位。 服務(wù)器一般同時為多個客戶提供服務(wù),這就造成了服務(wù)器設(shè)計的復(fù)雜性。即時通訊服 務(wù)器是數(shù)據(jù)中心,它是客戶活動的中介,需要同時應(yīng)對眾多客戶的請求。再次,本文并沒有采用復(fù)雜的 SQL, ORICLE等數(shù)據(jù)庫,而是通過hibernate框 架對數(shù)據(jù)進行映射,然后利用*.hbm.xml將數(shù)

57、據(jù)進行存儲。最后,在編寫這個聊天程序時遇到許許多多的問題,比如JAVA的圖形化界面如何編寫,該怎中¥布局。這是java的一個弱項,不像 VB,DELPHI等語言可以使用已有 的控件。后來也在網(wǎng)上找到一些 setBounds類,雖然調(diào)用起來比較麻煩,但是熟悉后 也覺得不是那么難。經(jīng)過一段時間的學(xué)習(xí)和工作,該即時聊天系統(tǒng)已經(jīng)初具雛形,實現(xiàn)了網(wǎng)絡(luò)即時通 信工具的主要功能,為實現(xiàn)一個嶄新的可跨平臺的 Java即時聊天工具打下了基礎(chǔ)。目 前該即時聊天系統(tǒng)的1.0版本已經(jīng)投入試運行中。致謝為期一個學(xué)期的畢業(yè)論文(設(shè)計)已接近尾聲了,我的四年大學(xué)生涯也即將圈上 一個句號。此刻我的心中卻有些悵然若失

58、,因為那些熟悉的計科學(xué)院的恩師們和各位 可愛的同學(xué)們,我們也即將揮手告別了。值此論文完成之際,心中充滿了一片感激之情,在整個論文完成的過程中得到了 我的導(dǎo)師于永武于老師的精心指導(dǎo),在此要向他致以最崇敬的感謝。于老師總是在百 忙之中抽出時間來為我們解答論文設(shè)計過程中的疑惑。他循循善誘的教導(dǎo)和不拘一格 的思路給予我無盡的啟迪。再次向于老師獻上誠摯的謝意。感謝我的舍友廖鴻,方敏同學(xué),在論文完成的過程中是他們在生活上和學(xué)習(xí)上給 予我很大的幫助和支持,在我進行畢業(yè)設(shè)計的過程中是他們不斷給我自信,如今才能 順利完稿。感謝06級2班的全體成員,在這個大家庭中使我學(xué)會了寬容,忍讓,團結(jié) 與互助。大家在學(xué)習(xí)上互相交流,生活上相互幫助,再次衷心的向大家說一聲謝謝。最后我要誠摯地

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論