版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一個簡單的即時通訊工具的設(shè)計與開發(fā)一個簡單的即時通訊工具的設(shè)計與開發(fā)一個簡單的即時通訊工具的設(shè)計與開發(fā)一個簡單的即時通訊工具的設(shè)計與開發(fā)摘摘 要要即時通訊(instant messaging)是目前 internet 上最為流行的通訊方式,各種各樣的即時通訊軟件也層出不窮;服務(wù)提供商也提供了越來越豐富的通訊服務(wù)功能。java 是當前比較流行的開發(fā)語言之一,它有著自己的易用特點與性能優(yōu)勢,比如跨平臺、安全性、多線程、網(wǎng)絡(luò) socket 編程、數(shù)據(jù)流概念等方面,因此通過對開源即時通訊 linuxqq 的研究和分析,基于 java 語言和 j2ee 規(guī)范設(shè)計了一個即時通訊工具 jicq (java
2、for i seek you),并對其體系結(jié)構(gòu)、構(gòu)成模塊及系統(tǒng)關(guān)鍵技術(shù)進行了分析與設(shè)計。在系統(tǒng)設(shè)計與建模過程中,使用了uml 和面向?qū)ο蟮姆治?、設(shè)計方法,并使用 rose 作為建模工具;本系統(tǒng)基于j2se1.5,j2ee1.4,使用 eclipse 等作為開發(fā)工具,在開發(fā)過程中用到了時下流行的重構(gòu)開發(fā)方法,優(yōu)化了系統(tǒng)的設(shè)計。力圖使系統(tǒng)具有安全、高效、實用、支持在不同系統(tǒng)平臺運行等特點。關(guān)鍵詞關(guān)鍵詞:即時通訊;多線程;socket 編程;jspdesign and development of a simple instant communication toolabstractinstant
3、message is currently the most popular way to communicate on the internet,so various instant messaging software are continuously appearing; service providers offer more and more communication service nowadays. java programming language (java 2 standard edition) is one of popular programming languages
4、. with its features of cross-platform, security, multi-threaded capability, socket programming, data flow concepts and so on, java has its own distinctive and functional advantages. therefore, based on the research and analysis of linuxqq, with the java language and j2ee, this paper designs an insta
5、nt messengerjicq (java for i seek you), and then analyzes its architecture, modules, as well as its key technologies. during the design and modeling process of instant messenger system, the uml and method of object-oriented analysis and design are used. furthermore, the modeling tool of rose is incl
6、uded. based on the system j2se1.5, j2ee1.4, the eclipse development tool in the development process, and refactoring development method, the system design is optimized. due to these factors, the system is safe, efficient and practical in different operating system platforms.key words: instant messag
7、e; multithreaded; socket program; jsp目目 錄錄論文總頁數(shù):30 頁1 引言.11.1 項目開發(fā)背景.11.1.1 項目背景.11.1.2 技術(shù)背景.11.2 該系統(tǒng)設(shè)計的意義.22 相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺.22.1 即時通訊應(yīng)用工作原理分析.22.2 所用技術(shù).32.3 工具及開發(fā)平臺.42.4 系統(tǒng)配置要求.53 系統(tǒng)體系結(jié)構(gòu)的設(shè)計.53.1 需求描述.53.2 系統(tǒng)架構(gòu)設(shè)計.63.3 系統(tǒng)的總體功能設(shè)計.73.3.1 總體功能設(shè)計.73.3.2 注冊模塊設(shè)計.83.3.3 登錄模塊設(shè)計.103.3.4 用戶間交互模塊設(shè)計.123.4 數(shù)據(jù)庫設(shè)計.
8、143.4.1 數(shù)據(jù)庫物理模型.143.4.2 數(shù)據(jù)字典.154 系統(tǒng)實現(xiàn).164.1 網(wǎng)絡(luò)通訊編碼實現(xiàn).164.1.1 聊天客戶端部分代碼.164.1.2 服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼.174.1.3 服務(wù)端單線程上線處理代碼.184.2 系統(tǒng)運行的效果圖.204.2.1 登錄界面.204.2.2 主界面.204.2.3 群聊天界面.214.2.4 好友聊天界面.224.2.5 好友查找界面.234.3 注冊模塊的實現(xiàn).244.3.1 數(shù)據(jù)庫連接.244.3.2 字符編碼過濾器的核心代碼.244.4 注冊模塊運行效果圖.254.4.1 主頁面.254.4.2 注冊頁面.255 系統(tǒng)測試與運行.
9、26結(jié) 論.27參考文獻.28致 謝.29聲 明.30第 30 頁 共 30 頁1 1 引言引言1.11.1 項目開發(fā)背景項目開發(fā)背景.1 項目背景項目背景“即時通信產(chǎn)品”最早的創(chuàng)始人是三個以色列青年,是他們在 1996 年做出來的,取名叫 icq( i seek you)。隨后,騰迅 qq 抓住 im 的大好機遇,在中國迅速崛起并壟斷即時通訊市場。自從騰迅的 qq 在中國即時通訊行業(yè)壟斷后,即時通訊的產(chǎn)品在 it 行業(yè)可謂雨后春筍,層出不窮,目前,windows 平臺方面的即時通訊已經(jīng)很多,但是其他系統(tǒng)比如 linux 平臺,雖然有類似 qq 方面的一些產(chǎn)品,比如 linux
10、qq,lunaqq,但數(shù)量畢竟不多且功能界面等都還不是很理想,鑒于此種情況,我們開發(fā)了基于 java 語言的即時通信系統(tǒng)(jicq),該系統(tǒng)是以j2se(java 2 standard edition)語言實現(xiàn)的網(wǎng)絡(luò)即時通信工具,包括服務(wù)器端和客戶端,可以在企業(yè)內(nèi)部網(wǎng)絡(luò)和互聯(lián)網(wǎng)上運行,同時具有 java 應(yīng)用的跨平臺特性,方便運行在各個系統(tǒng)之上。該系統(tǒng)具有相對比較漂亮的界面以及類似于qq 的很多功能,比如可以和好友進行交流以及離線發(fā)送與好友管理、可以加入不同的群,即時發(fā)送、即時回復等功能。 .2 技術(shù)背景技術(shù)背景技術(shù)上采用 sun 公司的 java 語言,該語言有很多有點,比如
11、多線程、網(wǎng)絡(luò)流概念、異常捕獲處理、安全性以及速度與性能等方面,并且具有可以一次編寫、到處運行的跨平臺優(yōu)點。多線程:多線程是這樣一種機制,它允許在程序中并發(fā)執(zhí)行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立,線程又稱為輕量級進程,多線程技術(shù)允許你在一個應(yīng)用程序中啟動多個執(zhí)行輕量程序,使多段程序同時競爭 cpu資源,從而提高系統(tǒng)效率。而對于網(wǎng)絡(luò)通訊工具來說,多線程的特性是必須的,不僅是為了效率,而且可以實現(xiàn)同時處理多個請求。網(wǎng)絡(luò)流:java 中的網(wǎng)絡(luò)通訊以及文件的讀取都是以一種流的概念來理解的,這樣,網(wǎng)絡(luò)上數(shù)據(jù)的傳輸其實就等同于看成一臺機器上文件的讀取,有利于理解與編寫運用程序,java 類
12、庫中提供了豐富的 io 流類資源以及網(wǎng)絡(luò)編程類資源,軟件開發(fā)人員可以很方便的編寫網(wǎng)絡(luò)應(yīng)用程序。例外處理:java 通過面向?qū)ο蟮姆椒▉硖幚砝?。在一個方法的運行過程中,如果發(fā)生了例外,則這個方法生成代表該例外的一個對象,并把它交給運行時系統(tǒng),運行時系統(tǒng)尋找相應(yīng)的代碼來處理這一例外。我們把生成例外對象并把它提交給運行時系統(tǒng)的過程稱為拋棄(throw)一個例外。運行時系統(tǒng)在方法的調(diào)用棧中查找,從生成例外的方法開始進行回朔,直到找到包含相應(yīng)例外處理的方法為止,這一個過程稱為捕獲(catch)一個例外。所以,java 的例外處第 30 頁 共 30 頁理使非常方便的??缙脚_:java 語言的一個非常重
13、要的特點就是與平臺的無關(guān)性。而使用java 虛擬機是實現(xiàn)這一特點的關(guān)鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引入 java 語言虛擬機后,java 語言在不同平臺上運行時不需要重新編譯。java 語言使用模式 java 虛擬機屏蔽了與具體平臺相關(guān)的信息,使得 java 語言編譯程序只需生成在 java 虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。java 虛擬機在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。1.21.2 該系統(tǒng)設(shè)計的意義該系統(tǒng)設(shè)計的意義伴隨著當今互聯(lián)網(wǎng)迅速發(fā)展,網(wǎng)上通訊成為一種必不可少的通訊習慣,該系統(tǒng)的設(shè)計
14、就是為了實現(xiàn)在互聯(lián)網(wǎng)上的即時通訊,它是利用當今最為流行的java 編程語言來實現(xiàn)即時通訊工具的雛形,同時在系統(tǒng)開發(fā)過程中所用的都是java 常用的技術(shù)或者難點,比如用 java 的 swing 怎么去做一個界面美觀的應(yīng)用程序、java 的網(wǎng)絡(luò)編程技術(shù)的原理與應(yīng)用、以及如何根據(jù) j2ee 規(guī)范去開發(fā)一個基于 jsp 和 servlet 的 web 應(yīng)用等關(guān)鍵技術(shù)。通過設(shè)計和開發(fā)該系統(tǒng),使自己所學的理論知識得到實踐應(yīng)用,也對即時通訊軟件的通訊原理有了比較深刻的認識,大大的提高了自己的動手能力和解決問題的能力,為今后工作打下堅實的基礎(chǔ)。2 2 相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺
15、2.12.1 即時通訊應(yīng)用工作原理分析即時通訊應(yīng)用工作原理分析我們經(jīng)常聽到tcp/ip和udp(用戶數(shù)據(jù)報協(xié)議)這兩個術(shù)語,它們都是建立在更低層的ip協(xié)議上的兩種通訊傳輸協(xié)議。前者是以數(shù)據(jù)流的形式,將傳輸數(shù)據(jù)經(jīng)分割、打包后,通過兩臺機器之間建立起的虛電路,進行連續(xù)的、雙向的、嚴格保證數(shù)據(jù)正確性的文件傳輸協(xié)議。而后者是以數(shù)據(jù)報的形式,對拆分后的數(shù)據(jù)的先后到達順序不做要求的文件傳輸協(xié)議。qq就是使用udp協(xié)議進行發(fā)送和接收“消息”的。當你的機器安裝了oicq以后,實際上,你既是服務(wù)端(server) ,又是客戶端(client) 。當你登錄oicq時,你的oicq作為client連接到騰訊公司的主
16、服務(wù)器上,當你“看誰在線”時,你的oicq又一次作為client從qq server上讀取在線網(wǎng)友名單。當你和你的oicq伙伴進行聊天時,如果你和對方的連接比較穩(wěn)定,你和他的聊天內(nèi)容都是以udp的形式,在計算機之間傳送。如果你和對方的連接不是很穩(wěn)定,qq服務(wù)器將為你們的聊天內(nèi)容進行“中轉(zhuǎn)”。其他的即時通信軟件原理與此大同小異。 oicq的通訊原理:第 30 頁 共 30 頁 1.用戶首先從qq服務(wù)器上獲取好友列表,以建立點對點的聯(lián)系。2.用戶( clientl)和好友(client2)之間采用udp方式發(fā)送信息。 3.如果無法直接點對點聯(lián)系,則用服務(wù)器中轉(zhuǎn)的方式完成。我們看到兩個oicq用戶如
17、果是在兩個不同的內(nèi)網(wǎng)上,它們經(jīng)過登錄后可以不同過服務(wù)器來直接通訊。那這是為什么呢。其根本原因是oicq使用了udp協(xié)議,這樣用戶之間的通訊自己完成就減少了服務(wù)器的負擔。那么到底原理是什么樣的,為什么tcp應(yīng)用就不能達到這一要求。這就涉及到nat ( network addresstranslator)技術(shù)。nat技術(shù)使得一個私有網(wǎng)絡(luò)可以通過internet注冊ip連接到外部世界,位于inside網(wǎng)絡(luò)和outside網(wǎng)絡(luò)中的nat路由器在發(fā)送數(shù)據(jù)包之前,負責把內(nèi)部ip翻譯成外部合法地址。內(nèi)部網(wǎng)絡(luò)的主機不可能同時與外部網(wǎng)絡(luò)通信,所以只有一部分內(nèi)部地址需要翻譯。nat的翻譯可以采取靜態(tài)翻譯和動態(tài)翻譯
18、兩種。靜態(tài)翻譯將內(nèi)部地址和外部地址一對一對應(yīng)。當使用了動態(tài)翻譯時就采用port multiplexing技術(shù),通過改變外出數(shù)據(jù)的源port技術(shù)可以將多個內(nèi)部ip地址影射到同一個外部地址,這就是pat (port address translator)。在這種情況下,一個tcp連接只能和固定的連接方通訊,而udp應(yīng)用本身就可以接受不同數(shù)據(jù)來源的數(shù)據(jù)包,所以在nat轉(zhuǎn)換的時候能夠完成兩個客戶端之間的通訊,從而達到了客戶端直接通訊的目的??偟膩碚f,oicq 的應(yīng)用在客戶端方面符合即時通訊系統(tǒng)的模型??蛻舳酥g的通訊中,采用了 udp 的通訊方式,當客戶端之間無法直接通訊時,采用通過服務(wù)器轉(zhuǎn)發(fā)的方式來
19、實現(xiàn)即時信息的傳送。2.22.2 所用技術(shù)所用技術(shù)java 多線程技術(shù):多線程的各個線程看上去像是并行地獨自完成各自的工作,就像一臺一臺計算機上運行著多個處理機一樣。在多處理機計算機上實現(xiàn)多線程時,它們確實可以并行工作,而且采用適當?shù)姆謺r策略可以大大提高程序運行的效率。而作為接受客戶端請求的服務(wù)器來說,必須使用多線程技術(shù)來接受不同時刻的請求,接收一個處理一個,將其放入線程隊列,然后繼續(xù)監(jiān)聽其他的請求。網(wǎng)絡(luò)通訊與 socket 編程:java 網(wǎng)絡(luò)編程中有兩種不同的通訊協(xié)議,分別是 tcp(面向連接)與 udp(面向無連接) ,兩種協(xié)議各有優(yōu)缺點。tcp:是 tranfer control pr
20、otocol 的簡稱,是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過 tcp 協(xié)議傳輸,得到的是一個順序的無差錯的數(shù)據(jù)流。發(fā)送方和接收方的成對的兩個 socket 之間必須建立連接,以便在 tcp 協(xié)議的基礎(chǔ)上進行通信,當一個 socket(通常都是 server socket)等待建立連接時,另一第 30 頁 共 30 頁個 socket 可以要求進行連接,一旦這兩個 socket 連接起來,它們就可以進行雙向數(shù)據(jù)傳輸,雙方都可以進行發(fā)送或接收操作。 udp:是 user datagram protocol 的簡稱,是一種無連接的協(xié)議,每個數(shù)據(jù)報都是一個獨立的信息,包括完整的源地址或目的地址,它在
21、網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內(nèi)容的正確性都是不能被保證的。jdbc 數(shù)據(jù)庫技術(shù):jdbc, 全稱為 java database connectivity standard, 它是一個面向?qū)ο蟮膽?yīng)用程序接口(api), 通過它可訪問各類關(guān)系數(shù)據(jù)庫。jdbc 也是 java 核心類庫的一部分。jdbc 的最大特點是它獨立于具體的關(guān)系數(shù)據(jù)庫。與 odbc (open database connectivity)類似, jdbc api 中定義了一些java 類分別用來表示與數(shù)據(jù)庫的連接(connections), sql 語句(sql statement
22、s), 結(jié)果集(result sets)以及其它的數(shù)據(jù)庫對象, 使得 java 程序能方便地與數(shù)據(jù)庫交互并處理所得的結(jié)果。使用 jdbc, 所有 java 程序(包括 java applications , applets 和 servlet)都能通過 sql 語句或存儲在數(shù)據(jù)庫中的過程(stored procedures)來存取數(shù)據(jù)庫。swing 界面設(shè)計:java 的擴展包,其中包括眾多的控件以及豐富的控件操作功能,使用戶可以簡單的利用它畫出應(yīng)用程序的界面,結(jié)合 jbuilder9.0 帶的絕對定位類包,可以設(shè)計出非常好看的用戶界面。jsp與servlet技術(shù):jsp和servlet是在j
23、2ee平臺下開發(fā)web應(yīng)用的基礎(chǔ), jsp是由sun公司倡導 眾多公司參與一起建立的一個動態(tài)網(wǎng)頁標準技術(shù),jsp技術(shù)為建立具有動態(tài)生成內(nèi)容的web應(yīng)用提供了一種簡便而且功能強大的途徑,它可以快速開發(fā)出與平臺無關(guān)的基于web的應(yīng)用,jsp是更高級的servlet,在運行的時候jsp先被轉(zhuǎn)化為servlet。uml:uml是一個統(tǒng)一建模語言, 是當今世界上面向?qū)ο笙到y(tǒng)開發(fā)領(lǐng)域中的工具之一,它是一種可視化的建模語言,能夠讓系統(tǒng)構(gòu)造者用標準的、易于理解的方式建立起能夠表達出他們想像力的系統(tǒng)藍圖,并且提供了便于不同的人之間有效地共享和交流設(shè)計結(jié)果的機制。它包含了9種圖形還有其他一些特征,很方便用戶進行建
24、模。2.32.3 工具及開發(fā)平臺工具及開發(fā)平臺borland jbuilder 是全球第一的跨平臺 java 開發(fā)環(huán)境,可以用于構(gòu)建符合工業(yè)標準的 java 應(yīng)用系統(tǒng),不僅可以開發(fā)桌面級程序,并且可以開發(fā)ejb、web、xml 以及數(shù)據(jù)庫等各類應(yīng)用程序。雙向、可視化設(shè)計工具使得我們可以快速的構(gòu)建各種應(yīng)用程序,并部署至多種應(yīng)用程序服務(wù)器,利用jbuilder,我們可以快速、方便的構(gòu)建出 java 應(yīng)用程序,并且其中提供了一個第 30 頁 共 30 頁類似于 vs.net 中的界面編輯器功能,它具有絕對的定位功能,我們不用再手工粗糙的排列 java 的 layoutmanager,這一切完全可以用
25、 jbuilder 開快速完成。eclipse 是一個開放源代碼的、基于 java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,eclipse 附帶了一個標準的插件集,包括 java 開發(fā)工具(java development tools,jdt) 。 雖然大多數(shù)用戶很樂于將 eclipse 當作 java ide 來使用,但 eclipse 的目標不僅限于此。eclipse 還包括插件開發(fā)環(huán)境(plug-in development environment,pde) ,這個組件主要針對希望擴展 eclipse 的軟件開發(fā)人員,因為它允許他
26、們構(gòu)建與 eclipse 環(huán)境無縫集成的工具。更舒服的是,利用 eclipse 中的 myeclipse 插件來搭建一個動態(tài) jsp 程序,快速,簡單、方便。rose 一套非常有使用價值的系統(tǒng)建模工具,其中提供了非常方便的系統(tǒng)建模功能,比如用例圖、行為圖、活動圖、時序圖等。利用它可以加快系統(tǒng)設(shè)計開發(fā)效率,同時可以給用戶和開發(fā)者提供清晰的圖,使他們之間的交流變得更加的方便有效。sql server2000 數(shù)據(jù)庫是微軟的功能強大的數(shù)據(jù)庫管理系統(tǒng),具備很多數(shù)據(jù)庫管理常用的功能,例如存儲過程、數(shù)據(jù)查詢與更新等,是一個非常理想的后臺數(shù)據(jù)庫系統(tǒng)。tomcat 是 sun 的 jswdk(javaserv
27、er web development kit)中 servlet 的運行環(huán)境(servlet 容器), 是一個免費的開源的 serlvet 容器,它是 apache 基金會的 jakarta 項目中的一個核心項目,由 apache,sun 和其它一些公司及個人共同開發(fā)而成。2.42.4 系統(tǒng)配置要求系統(tǒng)配置要求 推薦配置如下:cpu2g 以上, 內(nèi)存 512 以上,運行平臺基于 windows 平臺。 客戶端需要安裝 java 虛擬機,同時還要有 jicq 的客戶端程序。服務(wù)器端需要安裝 sql server2000 數(shù)據(jù)庫, 服務(wù)器端如果是 windowsxp 系統(tǒng)要打上 sql serve
28、r 2000 的 sp3 或者 sp4 補丁包,同時服務(wù)器端需要安裝 web 服務(wù)器tomcat,還有 jicq 的服務(wù)器端程序。3 3 系統(tǒng)體系結(jié)構(gòu)的設(shè)計系統(tǒng)體系結(jié)構(gòu)的設(shè)計3.13.1 需求描述需求描述伴隨著當今互聯(lián)網(wǎng)的迅速發(fā)展,人們之間的信息交互的實時性能變得越來越重要,傳統(tǒng)的電子郵件交互已經(jīng)不能夠滿足人們的即時通訊要求,鑒于此種情況打算開發(fā)出一款類似于騰訊 qq 的即時通訊軟件,只要經(jīng)過注冊你便可以獲第 30 頁 共 30 頁取一個帳號,通過該帳號你可以在客戶端登陸,成功登錄后便可以在互聯(lián)網(wǎng)上與你的親朋好友進行暢談,由于技術(shù)和時間問題,該軟件主要提供私聊、群聊、好友管理、群管理等常用功能
29、,其它一些功能比如文件傳輸、語音聊天和視頻聊天等功能,由于技術(shù)問題暫時沒有實現(xiàn),可以在該系統(tǒng)的基礎(chǔ)上實現(xiàn)這些功能,也可以在此基礎(chǔ)上進行更多功能的擴展。3.23.2 系統(tǒng)架構(gòu)設(shè)計系統(tǒng)架構(gòu)設(shè)計該系統(tǒng)主要包括三層,客戶端,服務(wù)器端,以及數(shù)據(jù)庫服務(wù)器,客戶端用來提供用戶的登錄,服務(wù)器端用來對登錄的用戶進行管理以及用來處理信息之間的轉(zhuǎn)發(fā),數(shù)據(jù)庫服務(wù)器主要存放一些重要的信息。它們之間的關(guān)系如下圖所示:客戶端服務(wù)器數(shù)據(jù)庫服務(wù)器圖 1 三層模型中間層又分成四個部分:圖 2 中間層的構(gòu)成本系統(tǒng)采用的設(shè)計模型為平時所說的 c/s 架構(gòu),client/server,系統(tǒng)總體第 30 頁 共 30 頁模型圖如下:圖
30、3 客戶端/服務(wù)器端模型圖3.33.3 系統(tǒng)的總體功能設(shè)計系統(tǒng)的總體功能設(shè)計.1 總體功能設(shè)計總體功能設(shè)計根據(jù)上述需求的描述,對該系統(tǒng)按照功能進行了模塊的細化,主要包括注冊登錄、好友聊天、好友組管理、群聊天 4 個模塊,還有很多其它小模塊,這4 個模塊是實現(xiàn)該系統(tǒng)的核心模塊,模塊之間的耦合程度非常低,其中注冊模塊是通過 b/s 結(jié)構(gòu)來實現(xiàn),不需要安裝客戶端。下圖是上述的 4 個重要模塊的用例交互圖。第 30 頁 共 30 頁與 與 與 與與 與 與 與與 與 與 與 與jicq與 與與 與 與 與 與 與圖 4 總功能用例圖.2 注冊模塊設(shè)計注冊模塊設(shè)計注冊模塊
31、是整個系統(tǒng)的最基礎(chǔ)模塊,該模塊主要通過b/s模式來實現(xiàn),技術(shù)上采用j2ee的三(n)層結(jié)構(gòu),它有以下特點: 1.能有效降低建設(shè)和維護成本,簡化管理;2.適應(yīng)大規(guī)模和復雜的應(yīng)用需求;3.可適應(yīng)不斷的變化和新的業(yè)務(wù)需求:4.訪問異構(gòu)數(shù)據(jù)庫; 5.能有效提高系統(tǒng)并發(fā)處理能力;6.能有效提高系統(tǒng)安全性該模塊表現(xiàn)層主要用的技術(shù)是 jsp 和 servlet,后臺數(shù)據(jù)庫用的是 sql 2000數(shù)據(jù)庫。該模塊主要包括以下功能:帳號注冊、密碼的找回、密碼的修改以及個人信息的查詢。通過該模塊,用戶可以與 web 服務(wù)器交互進行號碼的注冊、密碼找回等功能。下圖是一張簡單的 j2ee 的結(jié)構(gòu)圖,該系統(tǒng)只是用到了其中
32、的一部分技術(shù)。第 30 頁 共 30 頁圖5 j2ee結(jié)構(gòu)圖下邊是用戶注冊與web服務(wù)器之間的用例交互圖。與 與 與 與 與 與與 與 與 與 與與 與 與 與jicq與 與 與與 與 jicq與 與 與 與圖 6 注冊用例交互圖 下邊是用戶注冊的活動圖。第 30 頁 共 30 頁圖 7 用戶注冊活動圖.3 登錄模塊設(shè)計登錄模塊設(shè)計該模塊主要給注冊成功的用戶提供一個登錄界面,用戶根據(jù)自己注冊的帳號信息可以與服務(wù)器交互,如果提供的信息通過服務(wù)器的驗證便可以成功的登錄系統(tǒng),成功登錄系統(tǒng)之后,可以進行一些操作,比如和好友聊天等,使用該模塊之前必須安裝一個客戶端。登錄模塊只是一個簡單的
33、頁面,主要填寫用戶名、密碼之類的信息,登錄成功后的主界面包含了系統(tǒng)的大部分功能,比如添加和刪除好友、添加和刪除好友分組、和朋友聊天等功能。下圖是登錄模塊的用例圖。合法合法?合法合法?是否否是第 30 頁 共 30 頁與 與 jicq與 與 與 與與 與 與 與jicq與 與與 與 與 與與 與 與 與 與與 與 與 與與 與 與 與圖 8 登錄用例圖 下邊的登錄模塊的活動圖,主要是對用戶提供的用戶名和密碼提供驗證。圖 9 登錄活動圖下邊是用戶之間交互信息的時序圖,主要包括從用戶登錄到通過驗證然后進行信息的發(fā)送,給好友發(fā)送信息包含兩種情況,第一,如果好友在線的話消第 30 頁 共 30 頁息直接
34、通過服務(wù)器中轉(zhuǎn)發(fā)送給好友,如果對應(yīng)的好友不在線,則講發(fā)送的信息保存到數(shù)據(jù)庫中,當該好友上線的時候從數(shù)據(jù)庫中讀出相應(yīng)的信息進行發(fā)送。圖 10 用戶信息交互圖.4 用戶間交互模塊設(shè)計用戶間交互模塊設(shè)計該模塊主要實現(xiàn)已用戶之間的信息交流,用戶交流的前提是先要添加好友,可以通過查找功能進行好友的查找,找到要添加的好友后,通過發(fā)送好友申請消息來添加好友,當對方通過添加好友的驗證消息后,便可以成功的添加好友。只有成功的添加好友之后,才可以進行用戶之間的信息的相互交互。下邊是用戶交互的用例圖。jicq與 與 與與 與 與 與 與與 與 與 與與 與 與 與 與 與jicq與 與 a與 與 與
35、 與jicq與 與 b證 證圖 11 用戶交互用例圖第 30 頁 共 30 頁用戶之間聊天的信息主要通過聊天服務(wù)器進行中轉(zhuǎn),用戶之間聊天內(nèi)容主要存儲在客戶端的一些文件中,可以通過查看聊天功能來進行對這些聊天信息的讀取。下圖是用戶交互的活動圖:圖 12 用戶交互活動圖下邊是好友添加的時序圖在線?yn第 30 頁 共 30 頁圖 13 好友添加時序圖3.43.4 數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計.1 數(shù)據(jù)庫物理模型數(shù)據(jù)庫物理模型通過對系統(tǒng)需求的分析,在關(guān)系數(shù)據(jù)庫中建立相應(yīng)的表,并建立了表之間的相互關(guān)系,下邊的圖是在 sql 2000 下這些表之間的對應(yīng)關(guān)系圖。圖 14 數(shù)據(jù)庫物理模型第 30
36、頁 共 30 頁.2 數(shù)據(jù)字典數(shù)據(jù)字典下邊是關(guān)系數(shù)據(jù)庫中每個表所對應(yīng)的字段的詳細信息表 1 jusers(用戶表)用來存放用戶注冊時的基本信息簡稱字段名類型長度允許空備注jicq號碼bigint8not nullpkjpassword密碼varchar50not nulljshowname昵稱varchar100not nulljtruename真實名稱varchar100jage年齡int4jsex性別char4jcountry國家varchar50jprovince省varchar50jcity市varchar50jstatus狀態(tài)smallint2not nulljuse
37、ripipvarchar50not nulljpicid圖片 idint4not nulljicqshowidint4jemail電子郵件varchar100junderwrite個人簽名varchar500jprofession專業(yè)varchar50jstar星座varchar50jxuexing血型varchar50jgradute學歷varchar50jaddress住址varchar200jpostalcode郵編char6jpersonalpage個人主頁varchar500joption個人愛好int4jidcardtype證件類型char20jusermoblie手機號碼varc
38、har11juseridcard用戶卡號varchar30jprotectpwdquestion密保提問varchar50jprotectpwdanswer密保答案varchar50表 2 jmessages(消息表)用來存放用戶發(fā)送的離線消息簡稱字段名類型長度允許空備注messageid自增主鍵bigint8not nullmyjicq自己號bigint8not nullfriendjicq朋友號bigint8not nullmessagehead消息標題varchar200not nullflag消息狀態(tài)smallintmessagecontent消息內(nèi)容varchar500not nul
39、l第 30 頁 共 30 頁表 3 jfriends(朋友表)用來存放用戶的好友信息簡稱字段名類型長度允許空備注jicq_friend_id自增主鍵bigint8not nullpkjicq自己 icq 號bigint8not nulljfriendid朋友 icq 號bigint8not nulljfriendtypeid朋友類別int4not nullfk表 4 jfriendtype(朋友類別表)用來存放用戶的好友組信息簡稱字段名類型長度允許空備注jfriendtypeid主鍵自增int4not nullpkjfriendtypename好友組名稱varchar100not nullji
40、cqicq 號碼bigint8not null表 5 jgroups(用戶組表)用來存放用戶的群組信息簡稱字段名類型長度允許空備注jgroupid群號碼int4not nullpkjgroupjicq群名稱bigint8jgroupname群名稱varchar100not nulljgrouppicid群圖片 idint4not nulljgrouptype群類別varchar100jgroupbcast群公告varchar500jgroupinfo群信息varchar500表 6 jgroup_users(用戶和組關(guān)聯(lián)表)用戶和組之間的關(guān)聯(lián)表簡稱字段名類型長度允許空備注jgroupid_ji
41、cq主鍵bigint8not nullpkjgroupid組 idint4not nullfkjicqicq 號碼bigint8not nullfkjgroupname群名稱varchar200not nulljmessagestatus群消息狀態(tài)smallint2not null4 4 系統(tǒng)實現(xiàn)系統(tǒng)實現(xiàn)4.14.1 網(wǎng)絡(luò)通訊編碼實現(xiàn)網(wǎng)絡(luò)通訊編碼實現(xiàn).1 聊天客戶端部分代碼聊天客戶端部分代碼下邊是聊天客戶端的核心代碼,它用來判定消息的來源以及針對該消息所進行的相應(yīng)的操作。for(int i=0;imypersontree.alist.size();i+)/判斷是哪個好友發(fā)來的信
42、息 p=(person)mypersontree.alist.get(i); if(p.getid().equals(hisjicq) break; else p=null; if(p!=null)/隊列中有該好友 jicqchatframe jchatexist=null;第 30 頁 共 30 頁 int isexistframe=0;/判定聊天窗口是否已經(jīng)打開 for(int i=0;imypersontree.vector.size();i+)/遍歷向量 jchatexist=(jicqchatframe)mypersontree.vector.get(i); if(jchatexis
43、t.jicq.equals(hisjicq) isexistframe=1;/聊天窗口已經(jīng)打開 break; if(isexistframe=0)/聊天窗口沒有打開,新建一個窗口 jicqchatframe jchat=new jicqchatframe(p,this); mypersontree.vector.addelement(jchat); jchat.setmessage(headmsg,msg); else /在聊天窗口中顯示該信息 jchatexist.setmessage(headmsg,msg); else jicqchatframe jchatexist=null; int
44、 isexistframe=0; for(int i=0;imypersontree.unkonwvector.size();i+) /陌生人的信息 jchatexist=(jicqchatframe)mypersontree.unkonwvector.get(i); if (jchatexist.jicq.equals(hisjicq) isexistframe=1; break; .2 服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼下邊是服務(wù)器端的監(jiān)聽程序,如果發(fā)現(xiàn)有 socket 連接,就創(chuàng)建一個與該連接所對應(yīng)的一個線程,該線程主要用來處理用戶之間的信息交互。pub
45、lic void run() try while(true) /始終監(jiān)聽狀態(tài)第 30 頁 共 30 頁 socket client=listen.accept(); /創(chuàng)建用戶線程 personthread f=new personthread(client); f.setpriority(thread.min_priority); f.start(); catch(ioexception e) system.err.println(erro:+e); system.exit(1); /服務(wù)器端的消息轉(zhuǎn)發(fā)函數(shù) public static void broadcast(string msg,st
46、ring hisjicq) int i; personthread you; for(i=0;iconnections.size();i+) you=(personthread)chatserverthree.connections.elementat(i); if(you.jicq.equals(hisjicq) you.send(msg); .3 服務(wù)端單線程上線處理代碼服務(wù)端單線程上線處理代碼下邊是服務(wù)器端上的單線程的處理代碼,主要通過網(wǎng)絡(luò)流來讀取客戶端發(fā)送的消息,然后將消息分解,用來區(qū)分消息的類型,譬如是群消息還是個人消息等。 while(true) line=in.r
47、eadutf(); system.out.println(line); /將讀取的信息按照特定格式進行拆分 stringtokenizer stk=new stringtokenizer(line,#); /people+#+jicq if(stk.hasmoreelements() key=(string)stk.nextelement(); /用戶上線提示 if(key.equals(people)第 30 頁 共 30 頁 try string jnum=(string)stk.nextelement(); this.jicq=jnum; for(int i=0;ichatservert
48、hree.connections.size();i+) personthread tt=(personthread)chatserverthree.connections.get(i); if(tt.jicq.equals(this.jicq) chatserverthree.broadcast(relog#yes,tt.jicq); chatserverthree.connections.remove(i); tt.stopthread(); break; /將該線程加入到線程向量中 chatserverthree.connections.addelement(this); friends
49、f=new friends(); resultset rs=f.selectaddmeperson(jnum); arraylist flist=new arraylist(50); while(rs.next() flist.add(rs.getstring(1); for(int i=0; ichatserverthree.connections.size();i+) personthread pt=(personthread)(chatserverthree.connections.elementat(i); if(flist.contains(string)pt.jicq) chats
50、erverthree.broadcast(line,pt.jicq); s_mydetails smy=new s_mydetails(); /從信息表中讀取離線信息,然后將之刪除 resultset rsmessage=smy.ishavemessage(jnum); if(rsmessage!=null) while(rsmessage.next() int friendjicq=rsmessage.getint(friendjicq); int myjicq=rsmessage.getint(myjicq); string msghead=rsmessage.getstring(mess
51、agehead); string msgbody=rsmessage.getstring(messagecontent); int flag=rsmessage.getint(flag); string allmsg=; if(flag=1)allmsg=msgone#+friendjicq+#+myjicq+#+msghead+#+msgbody; else 第 30 頁 共 30 頁allmsg=addfriend#+friendjicq+#+myjicq+#+msghead+#+msgbody; chatserverthree.broadcast(allmsg,jnum); smy.de
52、loldmessage(jnum); 4.24.2 系統(tǒng)運行的效果圖系統(tǒng)運行的效果圖 .1 登錄界面登錄界面該界面提供用戶輸入自己注冊號碼和相應(yīng)的密碼,然后登錄系統(tǒng),如果還沒有注冊帳號,可以點“申請”進行帳號的申請。如下圖所示:圖 15 登錄界面.2 主界面主界面登錄成功后的主界面,主要是一些好友的信息,以及一些好友分組的信息,在此界面上可以進行好友的添加、查找、刪除,以及好友組的添加、刪除,同時還可以查看最近聯(lián)系人等功能。第 30 頁 共 30 頁圖 16 主界面.3 群聊天界面群聊天界面如果你已經(jīng)成功的加入該群,你就可以在群中和其他群成員進行
53、一些信息的交互。第 30 頁 共 30 頁圖 17 群聊天界面.4 好友聊天界面好友聊天界面 該界面主要是用戶聊天的主要界面,主要提供了發(fā)送和接受聊天信息功能,以及查看聊天記錄,同時還可以查看好友的一些基本信息。第 30 頁 共 30 頁圖 18 好友聊天界面.5 好友查找界面好友查找界面好友添加和查找的界面,你可以根據(jù)不同的條件來進行好友查找的篩選,比如只查找在線的用戶或者可以查看所有用戶,還可以根據(jù)一些信息講查找范圍縮小,比如根據(jù)用戶的性別 年齡等信息進行查詢,以滿足自己的查找需要。圖 19 添加好友界面第 30 頁 共 30 頁4.34.3 注冊模塊的實現(xiàn)
54、注冊模塊的實現(xiàn).1 數(shù)據(jù)庫連接數(shù)據(jù)庫連接jdbc 數(shù)據(jù)庫連接的核心代碼,ip 地址設(shè)定為本機的 ip:connection conn = null;statement st = null;try /加載驅(qū)動程序class.forname(com.microsoft.jdbc.sqlserver.sqlserverdriver); /創(chuàng)建數(shù)據(jù)庫的連接conn=drivermanager.getconnection(jdbc:sqlserver:/;databasename=jicq,sa, sa);.2 字符編碼過濾器的核心代碼字符編碼過濾器的核
55、心代碼該過濾器實現(xiàn) servlet 的過濾器接口,設(shè)置字符編碼為 gb2312,主要用來解決在表單提交工程中所出現(xiàn)的中文亂碼問題,主要用來解決以 post 方式提交的表單所出現(xiàn)的中文亂碼問題。 public class characterencodingfilter implements filterprotected filterconfig filterconfig; protected string encoding=null;protected boolean ignore=true;/初始化字符過濾器 public void init(filterconfig filterconfi
56、g) throws servletexception this.filterconfig = filterconfig; /設(shè)定編碼方式,從 web.xml 配置文件中獲取該參數(shù) this.encoding = filterconfig.getinitparameter(encoding); string value = filterconfig.getinitparameter(ignore); if(value=null)this.ignore=true; else if(value.equalsignorecase(true)this.ignore=true; else if(value
57、.equalsignorecase(yes)this.ignore=true; else this.ignore=false; /重寫 filter 的過濾方法 public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception 第 30 頁 共 30 頁 if(ignore|request.getcharacterencoding()=null) string encoding =this.selectencoding(request); if(encoding!=null) system.out.print
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大米專用冰箱產(chǎn)品供應(yīng)鏈分析
- 帶有時鐘的收音機產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 醫(yī)療影像技術(shù)行業(yè)相關(guān)項目經(jīng)營管理報告
- 樂器修理或維護行業(yè)營銷策略方案
- 美容霜項目營銷計劃書
- 幼兒園行業(yè)經(jīng)營分析報告
- 不動產(chǎn)出租服務(wù)行業(yè)營銷策略方案
- 含藥物的護膚液產(chǎn)品供應(yīng)鏈分析
- 礦物絕緣電纜產(chǎn)品供應(yīng)鏈分析
- 云計算法務(wù)服務(wù)行業(yè)營銷策略方案
- 電信網(wǎng)和互聯(lián)網(wǎng)安全防護安全風險評估報告模板
- 全員消防安全責任制
- 新聞稿件編輯出錯檢討書范文
- 垂直綠化養(yǎng)護要點及病蟲害防治
- 火災(zāi)和地震的應(yīng)急處置
- 高等職業(yè)院校有關(guān)說課的解析-王津 陜西工業(yè)職業(yè)技術(shù)學院(2021)講解
- 2024新交管12123學法減分考試題庫含答案
- 中國電信新一代智算數(shù)據(jù)中心基礎(chǔ)設(shè)施技術(shù)方案白皮書
- 國家高新技術(shù)企業(yè)評定打分表
- 成語故事鉆木取火
- MOOC 自然地理學-西北大學 中國大學慕課答案
評論
0/150
提交評論