基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文_第1頁
基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文_第2頁
基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文_第3頁
基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文_第4頁
基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目 錄1 前言31.1 課題選題背景31.2即時(shí)通信的概念和特點(diǎn)31.3即時(shí)聊天系統(tǒng)的發(fā)展42 涉與的相關(guān)技術(shù)與協(xié)議42.1 Java語言42.2 C/S模式介紹52.3 Hibernate框架簡介63 系統(tǒng)需求分析63.1即時(shí)聊天消息的一般需求63.2 即時(shí)消息的協(xié)議需求73.3 即時(shí)消息的安全需求73.4 即時(shí)信息加密和鑒別73.5 即時(shí)通訊系統(tǒng)需求74 系統(tǒng)設(shè)計(jì)74.1即時(shí)聊天系統(tǒng)的實(shí)施原理84.2軟件設(shè)計(jì)流程94.3功能模塊劃分104.4 數(shù)據(jù)庫概要設(shè)計(jì)105 詳細(xì)設(shè)計(jì)115.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)115.1.2 主服務(wù)器類的設(shè)計(jì)115.1.2 登錄驗(yàn)證模塊135.1.3 注冊處理模

2、塊135.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)145.2.1 用戶注冊模塊145.2.2 用戶登錄155.2.3 在線用戶顯示設(shè)計(jì)165.2.4 聊天信息發(fā)送與接收175.3 數(shù)據(jù)庫設(shè)計(jì)186 結(jié)論19致謝21參考文獻(xiàn)22附錄23基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要:計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時(shí)通訊方式日益受到人們的青睞。即時(shí)聊天工具在實(shí)現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠(yuǎn)距離進(jìn)行直觀、真實(shí)的視音交流的同時(shí),利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進(jìn)行處理。本課題研究的是支持內(nèi)部網(wǎng)絡(luò)交流的系統(tǒng)網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)。該系統(tǒng)使用Java語言進(jìn)行編程。系統(tǒng)采用C/S結(jié)構(gòu)模式,支持局域網(wǎng)和Int

3、ernet。該系統(tǒng)采用軟件工程的瀑布模型進(jìn)行開發(fā),分別討論了系統(tǒng)的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)和編碼、以與整個(gè)系統(tǒng)的運(yùn)行和測試。關(guān)鍵詞:即時(shí)聊天;系統(tǒng);Java;C/S Abstract:The rapid development of computer network technology today, more immediate means of communication by people of all ages. Real-time chat tool in achieving the transmission of video and audio information, so

4、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 exchange of internal network systems - network instant mes

5、saging 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 design, detailed design and coding, and run and test

6、 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; System; JAVA; C/S1 前言交流對于人類社會(huì)與其每個(gè)成員都至關(guān)重要。直接交流的方式包括語言

7、、文字等,而遠(yuǎn)程交流還需借助于一些先進(jìn)的工具如、網(wǎng)絡(luò)等。本課題研究的是支持內(nèi)部網(wǎng)絡(luò)交流的系統(tǒng)網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)。該課題在實(shí)施的過程中需要使用Java語言。1.1課題選題背景計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時(shí)通訊方式日益受到人們的青睞。即時(shí)通訊工具在實(shí)現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠(yuǎn)距離進(jìn)行直觀、真實(shí)的視音交流的同時(shí),利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進(jìn)行處理。大家都知道,網(wǎng)絡(luò)上常用的即時(shí)通訊工具之一有ICQ。其實(shí),ICQ是英文“I seek you”的簡稱,中文意思是“我找你”。ICQ最大的功能便是即時(shí)信息交流,只要記得對方的號碼,上網(wǎng)時(shí)可以呼他,無論他在哪里,只要

8、他上網(wǎng)打開ICQ,人們就可以隨時(shí)交流。目前即時(shí)聊天系統(tǒng)種類眾多,功能也較為齊全。該課題現(xiàn)在所研究的即時(shí)通訊系統(tǒng),其目標(biāo)是定位于企業(yè)內(nèi)部網(wǎng)絡(luò),解決企業(yè)或單位的溝通與協(xié)同的問題,提高工作效率。企業(yè)內(nèi)部員工可以利用該通訊系統(tǒng)隨時(shí)隨地發(fā)送文字消息、進(jìn)行多人群聊、消息群發(fā)、傳送文件、音頻視頻對話等。系統(tǒng)包括客戶端程序和服務(wù)器端程序,支持局域網(wǎng)和Internet。企業(yè)內(nèi)部員工之間可以在內(nèi)部網(wǎng)覆蓋的任何地點(diǎn)、任何時(shí)間進(jìn)行即時(shí)交流,真正實(shí)現(xiàn)企業(yè)內(nèi)部協(xié)同工作。使您不必花費(fèi)大量的時(shí)間、金錢聚集到一個(gè)地方,通過網(wǎng)絡(luò),就能實(shí)現(xiàn)面對面的溝通,提高了效率。MSN、等公共消息系統(tǒng),由于聊天對象與內(nèi)容的不可控,若在企業(yè)內(nèi)部使

9、用,可能會(huì)降低工作效率。而該即時(shí)通訊系統(tǒng)將自己的服務(wù)器端安裝在企業(yè)內(nèi),并且人員的創(chuàng)建是由系統(tǒng)管理員來完成,因此很好的解決了這個(gè)問題。即時(shí)通訊帶給了更大的互動(dòng)性,人們在交流彼此的看法、意見時(shí),發(fā)現(xiàn)采用你來我往的方式達(dá)到的效果最為明顯。這就體現(xiàn)了互動(dòng)性。通過使用與時(shí)通訊系統(tǒng),大家不需要離開電腦,不需要借助其它額外的工具,就可以在線實(shí)時(shí)地交流工作。1.2即時(shí)通信的概念和特點(diǎn)即時(shí)通訊(IM)是一個(gè)允許兩人或多人使用網(wǎng)絡(luò)即時(shí)地傳遞文字信息、檔案、語音與視頻交流的終端服務(wù)。即時(shí)通訊不同于e-mail在于它的交談是即時(shí)的。1大部分的即時(shí)通訊服務(wù)提供了presence awareness的特性顯示聯(lián)絡(luò)人名單,

10、聯(lián)絡(luò)人是否在在線與能否與聯(lián)絡(luò)人交談。在早期的即時(shí)通訊程序中,使用者輸入的每一個(gè)字符都會(huì)即時(shí)顯示在雙方的銀幕,且每一個(gè)字符的刪除與修改都會(huì)即時(shí)的反應(yīng)在銀幕上。這種模式比起使用e-mail更像是交談,充分體現(xiàn)了其實(shí)時(shí)特性。在現(xiàn)在的即時(shí)通訊程序中,為了畫面的完整美觀和交流方便,交談中的另一方通常只會(huì)在本地端按下送出鍵(Enter或是Ctrl+Enter)后才會(huì)看到信息。1.3即時(shí)聊天系統(tǒng)的發(fā)展二十世紀(jì)七十年代早期,一種較早的即時(shí)通訊形式是柏拉圖系統(tǒng)(PLATO system)。八十年代,UNIX/Linux的交談即時(shí)信息被廣泛的使用于工程師與學(xué)術(shù)界,九十年代即時(shí)通訊更可跨越了操作系統(tǒng)平臺(tái)交流,199

11、6年11月,首個(gè)廣泛被非UNIX/Linux使用者用于因特網(wǎng)的即時(shí)通訊軟件ICQ出現(xiàn)。通常認(rèn)為ICQ是現(xiàn)在流行使用的即時(shí)通訊軟件的開山之作。ICQ源于以色列特拉維夫的Mirabils公司。該公司成立于1996年月,也就是在這個(gè)時(shí)候,四個(gè)月后的1996年11月,互聯(lián)網(wǎng)上最出名,下載使用人數(shù)最多的免費(fèi)軟件ICQ誕生了,她是由幾個(gè)以色列的年輕人制作的,在無人投資的情況下,他們向全球互聯(lián)網(wǎng)用戶提供免費(fèi)下載使用,到了1998年,Mirabilis公司的ICQ用戶已經(jīng)發(fā)展到1200萬人,并以每月100萬用戶的速度增加。這時(shí)候,ICQ公司由于其潛在的巨大商業(yè)廣告價(jià)值,已經(jīng)成為許多大公司爭相購買的對象,199

12、8年ICQ公司將自己開發(fā)的軟件連同用戶一起“賣”給了美國在線(AOL),售價(jià)2.87億美元。據(jù)美國在線1999年底稱,ICQ使用者已達(dá)5000萬,其中超過三分之二的使用者居住在美國本土以外的世界各地。ICQ造就的實(shí)時(shí)通信成了互聯(lián)網(wǎng)世界中發(fā)展最快的一個(gè)領(lǐng)域。2 涉與的相關(guān)技術(shù)與協(xié)議為了保證課題能正常實(shí)施,先來分析一下課題所需要的相關(guān)技術(shù)和協(xié)議。2.1 Java語言經(jīng)過認(rèn)真的討論分析,綜合各種計(jì)算機(jī)高級語言的特征和適應(yīng)范圍,最終決定選擇純面向?qū)ο蟮腏ava語言來完成畢業(yè)論文的設(shè)計(jì),下面就技術(shù)可行性方面,對Java語言作一簡要介紹。Sun公司的口號就是“網(wǎng)絡(luò)就是計(jì)算機(jī)”,Java能使所有東西從桌面計(jì)

13、算平穩(wěn)的轉(zhuǎn)變?yōu)榛诰W(wǎng)絡(luò)的計(jì)算,它是專門為此而建立的,并顯然是為了完成這個(gè)任務(wù)而來的。使用Java語言,可以相對輕松的一天編寫一個(gè)有條理的網(wǎng)絡(luò)程序。今天,Java的網(wǎng)絡(luò)功能正在飛躍發(fā)展,不斷有新的特性增加到這個(gè)有價(jià)值的基礎(chǔ)上,JavaSoft實(shí)驗(yàn)室正在不斷努力使Java更加完善。就Java語言的主要特點(diǎn),本人歸納如下:Java程序設(shè)計(jì)的開發(fā)過程與運(yùn)行環(huán)境Java是解釋型的高級編程語言,所以Java程序的開發(fā)通常需要經(jīng)過編寫源程序、編譯生成字節(jié)碼和運(yùn)行三個(gè)過程。這里要提到,Java應(yīng)用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個(gè)部分。Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼字節(jié)碼。這

14、一編譯過程同C/C+的編譯有些不同。當(dāng)C編譯器編譯生成一個(gè)對象的代碼時(shí),該代碼是為在某一特定硬件平臺(tái)運(yùn)行而產(chǎn)生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。Java編譯器卻不將對變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個(gè)方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。22.2C/S模式介紹20世紀(jì)90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計(jì)算模式為客戶機(jī)/服務(wù)器模式,簡稱為C/S模式,它實(shí)際上就是把主機(jī)終端模式中原來

15、全部集中在主機(jī)部分的任務(wù)一分為二,保留在主機(jī)上的部分負(fù)責(zé)集中處理和匯總運(yùn)算,成為服務(wù)器;而下放到終端的部分負(fù)責(zé)為用戶提供友好的交互界面,稱為客戶機(jī)。3相對于以前的模式,C/S模式最大的改進(jìn)是不再把所有軟件都裝進(jìn)一臺(tái)計(jì)算機(jī),而是把應(yīng)用系統(tǒng)分成兩個(gè)不同的角色和兩個(gè)不同的地位:一般在運(yùn)算能力較強(qiáng)的計(jì)算機(jī)上安裝服務(wù)器端程序,而在一般的PC上安裝客戶機(jī)程序。正是由于個(gè)人PC機(jī)的出現(xiàn)使客戶機(jī)/服務(wù)器模式成為可能,因?yàn)镻C機(jī)具有一定的運(yùn)算能力,用它代替了上面第一種模式的啞終端后,就可以把主機(jī)端的一部分工作放在客戶機(jī)端完成,從而減輕了主機(jī)的負(fù)擔(dān),也增加了系統(tǒng)對用戶的響應(yīng)速度和響應(yīng)能力??蛻魴C(jī)和服務(wù)器之間通過相

16、應(yīng)的網(wǎng)絡(luò)協(xié)議來進(jìn)行通訊??蛻魴C(jī)向服務(wù)器發(fā)出數(shù)據(jù)請求,服務(wù)器將數(shù)據(jù)傳送給客戶機(jī)進(jìn)行計(jì)算,計(jì)算完畢,計(jì)算結(jié)果可返回給服務(wù)器。這種模式的優(yōu)點(diǎn)充分利用了客戶機(jī)的性能,使計(jì)算能力大大提高;另外,由于客戶機(jī)和服務(wù)器之間的通訊是通過網(wǎng)絡(luò)協(xié)議進(jìn)行的,是一種邏輯的聯(lián)系,因此物理上在客戶機(jī)和服務(wù)器兩端是易于擴(kuò)充的。C/S模式是目前占主流的網(wǎng)絡(luò)計(jì)算模式。該模式在操作過程中采取的是主動(dòng)請示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請示提供相應(yīng)服務(wù)(過程如下):(1)打開一個(gè)通信通道同時(shí)通知本地主機(jī),服務(wù)器愿意在某一個(gè)公認(rèn)地址上接收客戶請求。(2)等待某個(gè)客戶請求到達(dá)該端口。(3)接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。

17、(4)返回第二步,等待另一客戶請求。(5)關(guān)閉該服務(wù)器。客戶端:(1)打開一個(gè)通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。(2)向服務(wù)器發(fā)送服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求。(3)請求結(jié)束后關(guān)閉通信通道并終止。分布運(yùn)算和分布管理是客戶機(jī)/服務(wù)器模式的特點(diǎn)。最后選擇了C/S模式。2.3 Hibernate框架簡介Hibernate是一種Java語言下的對象關(guān)系映射解決方案。它是一種自由、開源的軟件。它用來把對象模型表示的對象映射到基于SQL 的關(guān)系模型結(jié)構(gòu)中去,為面向?qū)ο蟮念I(lǐng)域模型到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的映射,提供了一個(gè)使用方便的框架。 主要作用有:Hibernate 不僅管理Java

18、類到數(shù)據(jù)庫表的映射(包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時(shí)人工使用SQL 和JDBC 處理數(shù)據(jù)的時(shí)間。4它的設(shè)計(jì)目標(biāo)是將軟件開發(fā)人員從大量一樣的數(shù)據(jù)持久層相關(guān)編程工作中解放出來。無論是從設(shè)計(jì)草案還是從一個(gè)遺留數(shù)據(jù)庫開始,開發(fā)人員都可以采用Hibernate。在應(yīng)用方面,Hibernate對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,它既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。最具革命意

19、義的是,Hibernate可以在應(yīng)用E(Enterprise JavaBeans是Java應(yīng)用于企業(yè)計(jì)算的框架)的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。3 系統(tǒng)需求分析前面兩章介紹了課題的選題背景和相關(guān)的技術(shù)基礎(chǔ)和協(xié)議。在本章中將討論一下即時(shí)通訊系統(tǒng)的需求分析。3.1即時(shí)聊天消息的一般需求3.1.1一般即時(shí)消息格式需求(1)所有實(shí)體必須至少使用一種消息格式;(2)一般即時(shí)消息格式必須定義發(fā)信者和即時(shí)收件箱的標(biāo)識;(3)一般即時(shí)消息格式必須包含一個(gè)讓接收者可以回消息的地址;(4)一般即時(shí)信息格式必須允許對信息有效負(fù)載的編碼和鑒別(非ASCII內(nèi)容);(5)必須提供擴(kuò)展和注冊即時(shí)消息格式

20、的模式的機(jī)制。3.1.2可靠性需求協(xié)議必須存在機(jī)制,保證即時(shí)消息成功投遞或者投遞失敗的時(shí)候,發(fā)信者獲得足夠的信息。3.1.3性能需求(1)即時(shí)消息的傳輸必須足夠的迅速;(2)即時(shí)消息的內(nèi)容必須足夠豐富;(3)即時(shí)消息的長度盡量足夠的長。3.2 即時(shí)消息的協(xié)議需求協(xié)議是一系列的步驟,它包括雙方或者多方,設(shè)計(jì)它的目的是要完成一項(xiàng)任務(wù)。即時(shí)通訊協(xié)議,參與的雙方或者多方是即時(shí)通訊的實(shí)體。協(xié)議必須是雙方或者多方參與的,一方單獨(dú)完成的就不算協(xié)議。這樣在協(xié)議動(dòng)作的過程中,雙方必須交換信息,包括控制信息、狀態(tài)信息等等。這些信息的格式必須是協(xié)議參與方同意并且遵循的。好的協(xié)議要求清楚、完整,每一步都必須有明確的定

21、義,并且不會(huì)引起誤解;對每種可能的情況必須規(guī)定具體的動(dòng)作。3.3 即時(shí)消息的安全需求A發(fā)送即時(shí)消息M給B,有以下幾種情況和相關(guān)需求:(1)如果無法發(fā)送,A必須接到確認(rèn);(2)如果M被投遞了,B只能接受M一次;(3)協(xié)議必須為B提供方法檢查A發(fā)送了這條信息;(4)協(xié)議必須允許B使用另一條即時(shí)信息,回復(fù)信息;(5)協(xié)議必須為A提供方法保證沒有其他個(gè)體C可以篡改M;3.4 即時(shí)信息加密和鑒別(1)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被監(jiān)聽或者破壞;(2)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被重排序或者回放;(3)協(xié)議必須提供方法保證通知和即時(shí)消息被正確的實(shí)體閱讀;(4)協(xié)議必須允

22、許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時(shí)通訊系統(tǒng)需求3.5.1 注冊需求(1)即時(shí)通訊系統(tǒng)擁有多個(gè)賬戶,允許多個(gè)用戶注冊;(2)一個(gè)用戶可以注冊多個(gè)ID;(3)注冊所使用的XX類型為字母ID。3.5.2 通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3)用戶可以加密/解密消息等。4 系統(tǒng)設(shè)計(jì)在這里我們將該即時(shí)通訊系統(tǒng)命名為CHAT,現(xiàn)在對該系統(tǒng)進(jìn)行總體設(shè)計(jì)。采用客戶機(jī)/服務(wù)器(C/S)的模式來設(shè)計(jì),是一個(gè)2層的C/S結(jié)構(gòu):應(yīng)用程序服務(wù)器應(yīng)用程序客戶端,其分層機(jī)構(gòu)如圖1所示。圖1 2層C/S結(jié)構(gòu)示意圖客戶層也叫做應(yīng)用表示層,也就是我們說的客戶端

23、,這是應(yīng)用程序的用戶接口部分。給即時(shí)通訊工具設(shè)計(jì)一個(gè)客戶層具有很多優(yōu)點(diǎn),這是因?yàn)榭蛻魧訐?dān)負(fù)著用戶與應(yīng)用間的對話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直接地進(jìn)行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序就可以了,而不會(huì)影響其他兩層。服務(wù)層又叫做功能層,相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(jié)果數(shù)據(jù),它也是一次性傳送給表示層的。在應(yīng)用設(shè)計(jì)中,必須避免在表示層和功能層之間進(jìn)行多次的數(shù)據(jù)交換,這就

24、需要盡可能進(jìn)行一次性的業(yè)務(wù)處理,達(dá)到優(yōu)化整體設(shè)計(jì)的目的。4.1即時(shí)聊天系統(tǒng)的實(shí)施原理4.1.1 工作方式和技術(shù)原理典型的IM工作方式如下:登陸CHAT通訊服務(wù)器,獲取一個(gè)自建立的歷史的交流對象列表(同事列表),然后自身標(biāo)志為在線狀態(tài),當(dāng)好友列表中的某人在任何時(shí)候登錄上線并試圖通過你的計(jì)算機(jī)聯(lián)系你時(shí),IM系統(tǒng)會(huì)發(fā)一個(gè)消息提醒你,然后你能與他建立一個(gè)聊天會(huì)話通道進(jìn)行各種消息如鍵入文字、通過語音等的交流,從技術(shù)上來說,聊天系統(tǒng)的基本技術(shù)原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器,服務(wù)器通過讀取用戶數(shù)據(jù)庫來驗(yàn)證用戶身份,如果驗(yàn)證通過,登記用戶A的IP地址、IM客戶端軟件的版本號與使用

25、的TCP/UDP端口號,然后返回用戶A登錄成功的標(biāo)志,此時(shí)用戶A在IM系統(tǒng)中的狀態(tài)為在線(Online Presence)。第二步,根據(jù)用戶A存儲(chǔ)在IM服務(wù)器上的好友列表(Buddy List),服務(wù)器將用戶A在線的相關(guān)信息發(fā)送給也同時(shí)在線的IM好友的PC機(jī),這些信息包括在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務(wù)器把用戶A存儲(chǔ)在服務(wù)器上的好友列表與相關(guān)信息回送到他的客戶端機(jī),這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表與其在線狀態(tài)。4.

26、1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務(wù)器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機(jī)發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復(fù)到用戶A的PC機(jī),這樣雙方的即時(shí)文字消息就不再IM服務(wù)器中轉(zhuǎn),而是直接通過網(wǎng)絡(luò)進(jìn)行點(diǎn)對點(diǎn)的通訊,即對等通訊方式(Peer To Peer)。5(2)在線代理通訊用戶A與用戶B的點(diǎn)對點(diǎn)通訊由于防火墻、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢,IM服務(wù)器將會(huì)主動(dòng)提供消息中轉(zhuǎn)服務(wù),即用戶A和用戶B的即時(shí)消息全部先發(fā)送到IM服務(wù)器,再由服務(wù)器轉(zhuǎn)發(fā)給對方。4.2軟件設(shè)計(jì)流程因?yàn)樵?/p>

27、系統(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進(jìn)行設(shè)計(jì),分為幾大步驟:先進(jìn)行需求分析,再是系統(tǒng)設(shè)計(jì),然后是詳細(xì)設(shè)計(jì)與編碼,其次是軟件的測試,最后是軟件的運(yùn)行和維護(hù)。6在實(shí)際過程中這些步驟經(jīng)常是重疊和彼此間有信息交換,它不是一個(gè)簡單線性過程,而是包括開發(fā)步驟的多個(gè)反復(fù)。如圖2所示。需求分析系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)與編碼軟件測試軟件運(yùn)行與維護(hù)圖2 即時(shí)通訊系統(tǒng)開發(fā)流程圖4.3功能模塊劃分該即時(shí)聊天工具按如下過程完成通信:(1)客戶向服務(wù)器注冊,告知服務(wù)器該客戶監(jiān)聽某主題;(2)客戶注冊之后,向服務(wù)器發(fā)送消息;(3)服務(wù)器再把消息發(fā)送給所有監(jiān)聽此主題的客戶。根據(jù)以上描述,該系統(tǒng)功能模塊圖請見圖3。

28、即時(shí)聊天系統(tǒng)服務(wù)器端客戶端建立連接存儲(chǔ)數(shù)據(jù)監(jiān)聽用戶新建用戶登 錄通訊交流圖3 通訊系統(tǒng)的功能模塊4.3.1 服務(wù)器端由圖3可知服務(wù)器端完成至少3大功能:建立連接、存儲(chǔ)數(shù)據(jù)和監(jiān)聽客戶。這3大功能的具體含義如下:(1)建立一個(gè)ServerSocket連接,不斷偵聽是否有客戶端連接或者斷開連接。(2)服務(wù)器端是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,再由服務(wù)器根據(jù)要求分發(fā)出去。(3)數(shù)據(jù)庫數(shù)據(jù)操作包括將用戶信息存儲(chǔ)到數(shù)據(jù)庫等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送新建用戶的信

29、息,接收來自服務(wù)器的信息進(jìn)行注冊。(2)用戶登錄:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送信息,完成用戶登錄。(3)通信交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。4.4 數(shù)據(jù)庫概要設(shè)計(jì)因?yàn)楸鞠到y(tǒng)采用的是2級C/S結(jié)構(gòu)模式,所以,為了減少服務(wù)器的存儲(chǔ)量,方便程序設(shè)計(jì),本系統(tǒng)只對用戶信息進(jìn)行存儲(chǔ)。利用JAVA中的hibernate框架技術(shù)進(jìn)行存儲(chǔ)。在Hibernate中,各表的映射文件.hbm.xml可以通過工具生成,在本系統(tǒng)中,用戶表信息可以用Xml代碼實(shí)現(xiàn)。用戶表(user)表1 用戶信息表名稱字段名稱類別主鍵非空用戶編號id數(shù)字是是登錄名CustName文本否是登錄密碼CustP

30、assword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email文本否是5 詳細(xì)設(shè)計(jì)5.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)作為C/S模式下的系統(tǒng)開發(fā),很顯然服務(wù)器端程序的設(shè)計(jì)是非常重要的。下面就服務(wù)器端的相關(guān)程序模塊進(jìn)行設(shè)計(jì),并一定程度上實(shí)現(xiàn)了相關(guān)功能。5.1.2 主服務(wù)器類的設(shè)計(jì)設(shè)計(jì)服務(wù)器時(shí)需要考慮如下幾個(gè)因素:(1)服務(wù)器的運(yùn)行速度;(2)服務(wù)器的響應(yīng)速度,包括新建連接和發(fā)送數(shù)據(jù)的響應(yīng)速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。針對TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)服務(wù)器的程序結(jié)構(gòu)需要考慮以下的因素:(1)多線程;(2)多進(jìn)程;(3)單線程。主服務(wù)器類實(shí)現(xiàn)了服務(wù)器端的

31、多線程,使用SeverSocket s=newServerSocket(1001)語句在1001端口創(chuàng)建套接口;使用new ServerThread(socket)語句創(chuàng)建新的線程。主服務(wù)器類調(diào)用ServerThread類,而每個(gè)ServerThread實(shí)體就是一個(gè)獨(dú)立的線程,剛好對應(yīng)于客戶端的連接請求響應(yīng)線程。服務(wù)器端有一個(gè)(或多個(gè))進(jìn)程在指定的端口等待客戶的連接信息,一旦連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r(shí)候向服務(wù)器端發(fā)出連接請求。實(shí)現(xiàn)界面如圖4。圖4 服務(wù)器啟動(dòng)界面現(xiàn)就其中一些核心代碼進(jìn)行講解。public class AppServer exten

32、ds Thread其中public是JAVA的關(guān)鍵字,用來表示該類是共有,在整個(gè)程序里都可以訪問到它;Class表示類定義,它后面接著用戶定義的類的類名為AppServer;extends表示繼承的意思,他后面的類Thread是子類,能夠繼承父類AppServer所定義的一些變量。這條語言表示的意思就是聲明一個(gè)公共類AppServer,用子類Thread繼承父類AppServer中的一些變量。static boolean newMessage。其中,static是關(guān)鍵字,表示靜態(tài)變量,Boolean表示變量類型為布爾型,變量名為newMessage。這條語句的意思是定義一個(gè)靜態(tài)變量newMes

33、sage,它的類型為布爾型。值得強(qiáng)調(diào)的是布爾型數(shù)據(jù)只有兩個(gè)值true和false,并且它們不對應(yīng)人數(shù)整數(shù)值。if(start) sFrame.txtStatus.setText(已啟動(dòng).);log(null,服務(wù)器已啟動(dòng). );else sFrame.txtStatus.setText(關(guān)閉中.);這是一條if條件判斷語句,它表示變量start如果不為空,那么執(zhí)行語句第一個(gè)大括號中的語句,如果為空,則執(zhí)行else中的語句。其中,log為輸出語句,表示在窗口中輸出“服務(wù)器已啟動(dòng)”信息。public void run() try while (start) Socket client = serv

34、erSocket.accept();Connection con = new Connection(client, u, v, userInfo); catch (IOException e) log(e, 不能監(jiān)聽!);這個(gè)函數(shù)的作用是監(jiān)聽用戶信息,void表示定義的函數(shù)不需要返回值,while是循環(huán)語句關(guān)鍵字,在語句中的意思為直到start的值不為空,將循環(huán)執(zhí)行后面括號的語句,直到start值為空后,循環(huán)才結(jié)束。Connection con表示連接用戶信息。Catch是對java中的異常進(jìn)行捕獲,并且能夠拋出異常,便于程序能夠正常運(yùn)行。5.1.2 登錄驗(yàn)證模塊系統(tǒng)的登錄模塊是比較重要的,這

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

36、tUser()方法獲取數(shù)據(jù);在獲取注冊名時(shí),進(jìn)行判斷,查看用戶名是否重復(fù),如果重復(fù),則向客戶端彈出提示信息,見圖6;如果不重復(fù),服務(wù)器接收客戶端用戶發(fā)送的昵稱、密碼、用戶E-mail等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建;最后向用戶反饋?zhàn)猿晒π畔?。圖6 注冊名重復(fù)提示信息5.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)前一章介紹了服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn),對于C/S模式的系統(tǒng)而言,還必須對系統(tǒng)的客戶端進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。下面就來解決這樣一個(gè)問題。客戶端通過Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過構(gòu)造BufferedReader、PrintWriter來建立輸入流和輸出流,雙方通過該輸入流和輸出流來相互傳遞信息。

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

38、 toolkit=Toolkit.getDefaultToolkit();utton btnOk,btnCancel,btnClear;public Register(String ip)btnOk=new utton(確定(O); btnOk.setMnemonic(O); btnOk.setToolTipText(保存注冊信息);btnOk.setBounds(250,135,80,25);Implement繼承于接口類時(shí)用的關(guān)鍵詞7,在數(shù)據(jù)接口位置使用,在這里表示類ActionListen類繼承類Register。utton btnOk,btnCancel,btnClear。這條語句中,

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

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

41、d(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=txtServer.getText();login();該語句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如

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

43、ring User=(String)messobj.userOnLine.elementAt(i);lstUserList.addItem(User); 這里采用了for循環(huán),定義變量i,初值為0,只要i滿足;imessobj.userOnLine.size()這個(gè)條件,循環(huán)將執(zhí)行一次。執(zhí)行完一次循環(huán)后i的值自動(dòng)加1,這里的messobj.userOnLine.size()表示在線用戶的人數(shù),lstUserList.addItem(User)表示顯示用戶的昵稱。5.2.4 聊天信息發(fā)送與接收聊天信息的發(fā)送與接收都是通過Socket類實(shí)現(xiàn)的。使用Socket對網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連

44、接請求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket。也就是說,在服務(wù)端開啟socket服務(wù),客戶端每一次連接成功時(shí)也都會(huì)同時(shí)創(chuàng)建一個(gè)線程來處理這次連接的請求,而該連接會(huì)被保存在一個(gè)集合中,直到服務(wù)結(jié)束,連接關(guān)閉,該線程也會(huì)結(jié)束,同時(shí)從連接的集合中移除該連接。(1)信息發(fā)送用戶在每次發(fā)送信息時(shí),首先向服務(wù)器發(fā)送的是自己信息和發(fā)送對象信息,然后再通過Socket類向服務(wù)器發(fā)送信息。當(dāng)然,在每次輸入信息后,輸入信息框的內(nèi)容將會(huì)被清空。關(guān)鍵代碼如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMe

45、ssage=txtMessage.getText(); chatobj.chatToUser=String.valueOf(cmbUser.getSelectedItem(); chatobj.whisper=chPrivateChat.isSelected()?true:false;/向服務(wù)器發(fā)送信息 trySocket toServer=new Socket(strServerIp,1001); ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream(); outObj.writeObject(ch

46、atobj); txtMessage.setText(); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系統(tǒng)獲取發(fā)送信息者的昵稱,發(fā)送信息內(nèi)容以與發(fā)送對象的昵稱;chPrivateChat.isSelected()?true:false這是一個(gè)判斷語句,表示信息值是否為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則賦false。在上文中,我們講到了catch有拋出異常的作用,而trycatch也是具有一樣的功能,try 塊塊是需要捕獲異常的,因?yàn)槲募锌赡懿淮嬖?,?huì)導(dǎo)致程序崩潰,

47、所以直接捕獲,也可以直接throws 出去,讓調(diào)用該方法的方法去捕獲,從而使程序能夠正常進(jìn)行。此外,函數(shù)Socket(strServerIp,1001)用來創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。參數(shù)strServerIp為通信協(xié)議的協(xié)議族,1001則為服務(wù)器IP。而outObj.writeObject(chatobj)的作用則是把調(diào)用writeObject方法,將信息發(fā)送到服務(wù)器。(2)信息輸出本即時(shí)聊天系統(tǒng)的信息輸出原理是將所有輸入信息通過socket類向服務(wù)器發(fā)送,然后直接從服務(wù)器中突出信息。關(guān)鍵代碼如下:Socket toServer;toServer=new Socket(strServe

48、rIp,1001);/將信息發(fā)往服務(wù)器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStreamstreamtoserver=new ObjectOutputStream(toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收來自服務(wù)器的信息由于上文以對很多方法進(jìn)行講解,現(xiàn)主要對ObjectOutputStream進(jìn)行講解。ObjectOutputStream 將 Java 對象的基本數(shù)據(jù)類型和圖形寫入

49、 OutputStream??梢允褂?ObjectInputStream 讀?。ㄖ貥?gòu))對象。通過在流中使用文件可以實(shí)現(xiàn)對象的持久存儲(chǔ)。如果流是網(wǎng)絡(luò)套接字流,則可以在另一臺(tái)主機(jī)上或另一個(gè)進(jìn)程中重構(gòu)對象。也就是說通過ObjectOutputStream 將toServer.getOutputStream()進(jìn)行重構(gòu),從而將服務(wù)器接受的信息重構(gòu)到客戶機(jī)上,最后通過streamtoserver.writeObject()方法將信息寫在客戶端上。5.3 數(shù)據(jù)庫設(shè)計(jì)在前文我們已經(jīng)分析了數(shù)據(jù)庫的實(shí)現(xiàn)是采用了hibernate框架中的.XML映射。以下則為實(shí)現(xiàn)的關(guān)鍵代碼:- 其中,package=org.se

50、ler.bean表示調(diào)用該框架bean中的數(shù)據(jù)包;auto-import=true表示hibernate框架中的將映射文件實(shí)體;property表示元素定義,name表示字段名;not-null表示是否設(shè)置該字段為空;unique表示是否設(shè)置該字段為唯一值;optimistic-lock指定此屬性做更新操作時(shí)是否需要樂觀鎖定; lazy指定是否采用延遲加載與加載策略,設(shè)置為false,表示此關(guān)聯(lián)對象不采用延遲加載。6 結(jié)論眾所周知,互聯(lián)網(wǎng)從誕生以來,就開始影響著地球的每一個(gè)角落,給予了人類一種全新的生活方式,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,新興的技術(shù)也層出不窮,即時(shí)通信系統(tǒng)就是這么一種以聊天形式為主

51、的廣受歡迎的互聯(lián)網(wǎng)技術(shù)。當(dāng)然,該課題討論的即時(shí)通訊系統(tǒng)是定位于內(nèi)部局域網(wǎng),供班級內(nèi)部人員使用的通訊系統(tǒng)。即時(shí)通信中最基本的功能就是通過計(jì)算機(jī)之間的文本數(shù)據(jù)的互換的形式實(shí)現(xiàn)思想的交流和溝通,它的優(yōu)點(diǎn)是方便快捷,為人們之間創(chuàng)建了一種新型的、廉價(jià)的、快速的、簡便的溝通方式。首先,本系統(tǒng)完全按照軟件工程的瀑布模型進(jìn)行開發(fā),雖然缺少部分開發(fā)文檔,但本論文則是按照需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),軟件的運(yùn)行和測試等的結(jié)構(gòu)進(jìn)行安排的。其次,本即時(shí)聊天系統(tǒng)采用了C/S模型。服務(wù)器在C/S模型中處于一個(gè)中心地位。服務(wù)器一般同時(shí)為多個(gè)客戶提供服務(wù),這就造成了服務(wù)器設(shè)計(jì)的復(fù)雜性。即時(shí)通訊服務(wù)器是數(shù)據(jù)中心,它是客戶活動(dòng)的

52、中介,需要同時(shí)應(yīng)對眾多客戶的請求。再次,本文并沒有采用復(fù)雜的SQL,ORICLE等數(shù)據(jù)庫,而是通過hibernate框架對數(shù)據(jù)進(jìn)行映射,然后利用*.hbm.xml將數(shù)據(jù)進(jìn)行存儲(chǔ)。最后,在編寫這個(gè)聊天程序時(shí)遇到許許多多的問題,比如JAVA的圖形化界面如何編寫,該怎樣布局。這是java的一個(gè)弱項(xiàng),不像VB,DELPHI等語言可以使用已有的控件。后來也在網(wǎng)上找到一些setBounds類,雖然調(diào)用起來比較麻煩,但是熟悉后也覺得不是那么難。經(jīng)過一段時(shí)間的學(xué)習(xí)和工作,該即時(shí)聊天系統(tǒng)已經(jīng)初具雛形,實(shí)現(xiàn)了網(wǎng)絡(luò)即時(shí)通信工具的主要功能,為實(shí)現(xiàn)一個(gè)嶄新的可跨平臺(tái)的Java即時(shí)聊天工具打下了基礎(chǔ)。目前該即時(shí)聊天系統(tǒng)的

53、1.0版本已經(jīng)投入試運(yùn)行中。致謝為期一個(gè)學(xué)期的畢業(yè)論文(設(shè)計(jì))已接近尾聲了,我的四年大學(xué)生涯也即將圈上一個(gè)句號。此刻我的心中卻有些悵然若失,因?yàn)槟切┦煜さ挠?jì)科學(xué)院的恩師們和各位可愛的同學(xué)們,我們也即將揮手告別了。值此論文完成之際,心中充滿了一片感激之情,在整個(gè)論文完成的過程中得到了我的導(dǎo)師于永武于老師的精心指導(dǎo),在此要向他致以最崇敬的感謝。于老師總是在百忙之中抽出時(shí)間來為我們解答論文設(shè)計(jì)過程中的疑惑。他循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪。再次向于老師獻(xiàn)上誠摯的謝意。感謝我的舍友廖鴻,方敏同學(xué),在論文完成的過程中是他們在生活上和學(xué)習(xí)上給予我很大的幫助和支持,在我進(jìn)行畢業(yè)設(shè)計(jì)的過程中是他們不斷給我自信,如今才能順利完稿。感謝06級2班的全體成員,在這個(gè)大家庭中使我學(xué)會(huì)了寬容,忍讓,團(tuán)結(jié)與互助。大家在學(xué)習(xí)上互相交流,生活上相互幫助,再次衷心的向大家說一聲謝謝。最后我要誠摯地感謝我的家人,是他們無微不至的關(guān)懷、一貫的體諒與支持,使我能在工作和學(xué)習(xí)上不斷前進(jìn),他們是我努力工作和積極生活的精神支柱。向所有關(guān)心我的親人、同學(xué)和朋友們表示深深的謝意!參考文獻(xiàn)1 尹治本.計(jì)算機(jī)網(wǎng)絡(luò)與應(yīng)用教程M.成都:西南交通大學(xué).2002.8. 2熊曉敏,

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論