版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 編號(hào) </p><p> 畢 業(yè) 設(shè) 計(jì)(論文)</p><p> 題目 基于TCP/IP協(xié)議的聊天工具的 </p><p> 設(shè)計(jì)與開(kāi)發(fā) </p><p> 二級(jí)學(xué)院 計(jì)算機(jī)科學(xué)與工程 </p><p> 專(zhuān)
2、業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 班 級(jí) 10903XXXX </p><p> 學(xué)生姓名 學(xué)號(hào) 10903XXXXXX</p><p> 指導(dǎo)教師 職稱(chēng) </p><p> 時(shí) 間 2013.6
3、 </p><p> 目錄 </p><p><b> 摘 要I</b></p><p> ABSTRACTII</p><p><b> 前 言- 1 -</b></p><p> 第一章 概述- 2 -</p>
4、;<p> 1.1 課題背景及意義- 2 -</p><p> 1.1.1 課題背景- 2 -</p><p> 1.1.2 課題意義- 3 -</p><p> 1.2 課題現(xiàn)狀及發(fā)展- 3 -</p><p> 1.2.1 課題現(xiàn)狀- 3 -</p><p> 1.2.2 課題發(fā)
5、展- 4 -</p><p> 1.3 課題內(nèi)容、目的及目標(biāo)- 4 -</p><p> 1.3.1 課題內(nèi)容- 4 -</p><p> 1.3.2 課題目的和目標(biāo)- 4 -</p><p> 第二章 開(kāi)發(fā)技術(shù)和平臺(tái)- 6 -</p><p> 2.1 開(kāi)發(fā)技術(shù)- 6 -</p>
6、<p> 2.1.1 Java語(yǔ)言- 6 -</p><p> 2.1.1.1 Java發(fā)展歷程- 6 -</p><p> 2.1 1.2 Java特點(diǎn)- 6 -</p><p> 2.1.1.3 Java與Internet- 7 -</p><p> 2.1.2多線程- 8 -</p><
7、p> 2.1.3 TCP/UDP協(xié)議- 8 -</p><p> 2.1.4 C/S模式- 10 -</p><p> 2.1.5 Socket- 11 -</p><p> 2.2 開(kāi)發(fā)平臺(tái)- 11 -</p><p> 2.2.1 硬件環(huán)境- 11 -</p><p> 2.2.2 軟件
8、環(huán)境- 11 -</p><p> 2.2.2.1 Eclipse- 11 -</p><p> 2.2.2.2 JDK1.6- 12 -</p><p> 2.2.2.3 SQL Server 2005和JDBC- 12 -</p><p> 2.2.2.4 AWT組件- 12 -</p><p
9、> 第三章 系統(tǒng)分析與設(shè)計(jì)- 13 -</p><p> 3.1 系統(tǒng)分析- 13 -</p><p> 3.1.1 系統(tǒng)可行性分析- 13 -</p><p> 3.1.2 系統(tǒng)功能需求- 13 -</p><p> 3.1.3 系統(tǒng)實(shí)現(xiàn)原理- 14 -</p><p> 3.1.4 各個(gè)
10、模塊功能詳解- 15 -</p><p> 3.1.4.1 服務(wù)器端結(jié)構(gòu)- 15 -</p><p> 3.1.4.2 客戶端結(jié)構(gòu)- 16 -</p><p> 3.2 系統(tǒng)設(shè)計(jì)- 17 -</p><p> 3.2.1 設(shè)計(jì)原則- 17 -</p><p> 3.2.2 架構(gòu)設(shè)計(jì)- 17 -&l
11、t;/p><p> 3.2.3 功能設(shè)計(jì)- 18 -</p><p> 3.2.4 數(shù)據(jù)庫(kù)設(shè)計(jì)- 18 -</p><p> 第四章 系統(tǒng)的實(shí)現(xiàn)- 19 -</p><p> 4.1 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)- 19 -</p><p> 4.1.1 服務(wù)器工作流程圖- 19 -</p><
12、;p> 4.1.2 服務(wù)器主界面- 19 -</p><p> 4.1.3 服務(wù)器的開(kāi)啟- 21 -</p><p> 4.1.4 服務(wù)器的關(guān)閉- 21 -</p><p> 4.1.5 服務(wù)器管理用戶- 21 -</p><p> 4.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)- 27 -</p><p>
13、4.2.1 客戶端工作流程圖- 27 -</p><p> 4.2.2 客戶端登陸主界面- 27 -</p><p> 4.2.3 客戶端注冊(cè)主界面- 28 -</p><p> 4.2.4 客戶端聊天主界面- 32 -</p><p> 4.2.5 客戶端之間聊天- 33 -</p><p> 4
14、.2.6 用戶下線- 37 -</p><p> 4.3 系統(tǒng)功能特點(diǎn)及改進(jìn)- 38 -</p><p> 第五章 結(jié)論- 40 -</p><p> 致 謝- 41 -</p><p> 參考文獻(xiàn)- 42 -</p><p> 文獻(xiàn)綜述- 44 -</p><p><
15、;b> 摘 要</b></p><p> 隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)日益變得普及和大眾化。當(dāng)今社會(huì),互聯(lián)網(wǎng)幾乎覆蓋了所有行業(yè),由此可見(jiàn),其在我們的日常生活中所占的地位是顯而易見(jiàn)的。而網(wǎng)絡(luò)能帶給我們的是什么呢?當(dāng)然是時(shí)效性。通過(guò)網(wǎng)絡(luò),我們可以很輕松的和地球那端的人取得聯(lián)系。而這個(gè)“聯(lián)系方式”又有很多種了,比如郵件、文字會(huì)話、語(yǔ)音會(huì)話、視屏?xí)挼取?lt;/p><p> 眾所周
16、知的QQ,擁有上億的注冊(cè)用戶,在國(guó)內(nèi)即時(shí)通訊領(lǐng)域占據(jù)了第一的位置,因?yàn)槠渚哂袕?qiáng)大的功能,可以實(shí)現(xiàn)文字通訊、語(yǔ)音通訊甚至即時(shí)的視屏通訊。除此之外,還有諸如微軟的MSN、網(wǎng)易的POPO,新浪UC等等。本次畢業(yè)設(shè)計(jì)的內(nèi)容是基于Java的一款局域網(wǎng)即時(shí)通信軟件。</p><p> Java是一種跨平臺(tái)的編程語(yǔ)言,其具有的良好的網(wǎng)絡(luò)功能以及對(duì)數(shù)據(jù)庫(kù)的全面支持毫無(wú)疑問(wèn)能實(shí)現(xiàn)本次設(shè)計(jì)的所有內(nèi)容。本系統(tǒng)采用C/S模式,即客戶端
17、/服務(wù)器模式,客戶端與服務(wù)器通過(guò)Socket傳遞數(shù)據(jù),服務(wù)器采用多線程技術(shù)。利用Eclipse進(jìn)行開(kāi)發(fā)。</p><p> 該軟件完成后的主要功能有:點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多、多對(duì)多的聊天,服務(wù)器對(duì)聊天進(jìn)行統(tǒng)一管理,比如用戶注冊(cè),用戶登陸,踢出用戶等。 </p><p> 關(guān)鍵字:Java,Socket,多線程,TCP/UDP,C/S</p><p><b>
18、; ABSTRACT</b></p><p> With the progress of era, the Internet become increasingly popularization and popularization. In today's society, the Internet covers almost all industries, thus it can be
19、seen, it in our daily life of the position is obvious. What is the Internet can bring us? Of course is timeliness. Through the network, we can easily and that the connection to the side of earth. The "contact"
20、and there are many kinds, such as email, voice, video, text session , etc.</p><p> Known as QQ, with hundreds of millions of registered users, occupy the first position in the field of domestic instant comm
21、unication, because it has strong function, can achieve text communication, voice communication, even real-time video communications. Besides, there are such as Microsoft's MSN POPO, netease, sina UC, and so on. The c
22、ontent of this graduation design is a LAN instant communication software based on Java.</p><p> Java is a cross-platform programming language, it has good network function and the full support from database
23、 there is no doubt that can realize all the content of this design. This system adopts C/S mode, the client/server mode, client and server transfer data through a Socket to the server using multithreading technology. Usi
24、ng Eclipse for development.</p><p> After completion of the software of the main functions are: point to point and point to chat more, many-to-many, unified management was carried out on the chat server, su
25、ch as user registration, user login, kicked out users, etc.</p><p> Keywords: Java, Socket, multithreading, TCP/UDP, C/S</p><p><b> 前 言</b></p><p> 當(dāng)今人們每天依賴(lài)著的網(wǎng)絡(luò),主要是給廣
26、大用戶提供了即時(shí)性的信息。網(wǎng)絡(luò)通信則是實(shí)現(xiàn)人與人之間交互性溝通最好的方式,我們可以通過(guò)網(wǎng)絡(luò)通信實(shí)現(xiàn)異地文字傳輸、語(yǔ)音通話甚至遠(yuǎn)程視頻通話?,F(xiàn)在很多公司企業(yè)都進(jìn)行遠(yuǎn)程視頻會(huì)議。網(wǎng)絡(luò)通信無(wú)疑給當(dāng)今的人們帶來(lái)了極大的便利。諸如騰訊QQ、微軟的MSN、網(wǎng)易的POPO,新浪UC等眾多出類(lèi)拔萃的聊天系統(tǒng),給我們生活所帶來(lái)的時(shí)效性、便利性是有目共睹的。于是,本人懷著對(duì)網(wǎng)絡(luò)通信機(jī)制以及原理的極大興趣嘗試?yán)肑ava語(yǔ)言編寫(xiě)一個(gè)微型的局域網(wǎng)聊天軟件,可以
27、供多人在一個(gè)局域網(wǎng)中同時(shí)進(jìn)行聊天通信。</p><p> 本課題主要是基于Java這種跨平臺(tái)的編程語(yǔ)言,利用SQL Server 2005 數(shù)據(jù)庫(kù)進(jìn)行編寫(xiě)。通過(guò)JDBC將Java和數(shù)據(jù)庫(kù)連接起來(lái),從而,我們可以用Java來(lái)操作數(shù)據(jù)庫(kù)。本課題內(nèi)容主要是應(yīng)用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)用戶信息以及用戶聊天記錄,所以相對(duì)于其他大型的應(yīng)用,操作起來(lái)比較簡(jiǎn)單。</p><p> 本次畢業(yè)設(shè)計(jì)所設(shè)計(jì)的聊天系統(tǒng)應(yīng)用
28、了C/S(客戶端/服務(wù)器)模式,這也是軟件開(kāi)發(fā)中一種通用的開(kāi)發(fā)模式。利用Socket進(jìn)行通信,這也是該聊天系統(tǒng)的關(guān)鍵部分。利用Java中的多線程技術(shù)來(lái)實(shí)現(xiàn)分工明確的操作。最后實(shí)現(xiàn)局域網(wǎng)即時(shí)通訊功能。</p><p><b> 第一章 概述</b></p><p> 1.1 課題背景及意義</p><p> 1.1.1 課題背景</p
29、><p> 當(dāng)今處于一個(gè)信息爆炸的時(shí)代,隨著Internet的迅速普及和發(fā)展,人們之間的溝通和交流變得越來(lái)越頻繁,以至于到了人們每天的日常生活都離不開(kāi)這個(gè)具有高效時(shí)效性的網(wǎng)絡(luò)。人們可以通過(guò)各種軟件建立即時(shí)性的聯(lián)系,比如人們通常用的Email,QQ,MSN等等。而QQ則是國(guó)內(nèi)人盡皆知的即時(shí)性通訊軟件,自從1998年騰訊成立以來(lái),QQ的發(fā)展幾乎是飛躍式的。據(jù)2013年5月13日騰訊官方公布顯示,目前注冊(cè)用戶中的活躍用戶
30、達(dá)到了7.519億的水平,最高同時(shí)在線人數(shù)高達(dá)1.674億,這無(wú)疑是一個(gè)驚人的數(shù)據(jù)。鑒于即時(shí)通訊軟件在當(dāng)今人們生活中的重要地位,以及本人懷著的對(duì)即時(shí)通訊軟件的通信機(jī)制以及其工作原理的好奇,嘗試用Java語(yǔ)言編寫(xiě)一款局域網(wǎng)即時(shí)通信軟件,以此來(lái)實(shí)踐性的研究通信軟件的工作流程。</p><p> 本人通過(guò)網(wǎng)絡(luò)渠道大概了解了QQ的基本通信原理。大概了解到了QQ是以多個(gè)服務(wù)器提供服務(wù),服務(wù)器管理客戶端,客戶端之間UDP通
31、信,除非不得已的情況下,服務(wù)器才通過(guò)TCP轉(zhuǎn)發(fā)消息。其具體工作方式經(jīng)過(guò)本人理解畫(huà)出如下1-1示意圖,</p><p> 圖 1-1 騰訊QQ工作模式示意圖</p><p> 而提到大家也非常熟悉的MSN,通過(guò)網(wǎng)絡(luò)了解到,它是另一種工作模式,純TCP通信,而不像騰訊QQ一樣TCP和UDP并用,其工作模式如下圖1-2所示,</p><p> 圖1-2 MSN通信
32、模式示意圖</p><p> 我們會(huì)看出,MSN這種通信其實(shí)就是TCP通信,而TCP通信就是通過(guò)服務(wù)器轉(zhuǎn)發(fā)消息來(lái)實(shí)現(xiàn)客戶端之間通信的,當(dāng)客戶端1要和客戶端2取得聯(lián)系時(shí),必須通過(guò)中間服務(wù)器1或者2來(lái)實(shí)現(xiàn)信息的轉(zhuǎn)發(fā),而服務(wù)器在這里的角色其實(shí)就是一個(gè)中轉(zhuǎn)站了。這很像我們的電話網(wǎng)絡(luò),中轉(zhuǎn)通信模式。</p><p> 1.1.2 課題意義</p><p> 研究本課題的
33、主要目的在于了解當(dāng)前通訊軟件的通信模式,并試著開(kāi)發(fā)一個(gè)能夠?qū)崿F(xiàn)局域網(wǎng)通信的局域網(wǎng)即時(shí)通信軟件,通過(guò)這個(gè)過(guò)程,讓自己更加了解在Java下,實(shí)現(xiàn)通信的具體原理和工作流程。</p><p> 本系統(tǒng)應(yīng)用了基于Socket局域網(wǎng)通信模式,它為我們提供了一種良好的、安全的通信機(jī)制,而且這個(gè)在實(shí)踐中更好的詮釋了Socket的通信的根本原理,具有很好的學(xué)習(xí)和研究?jī)r(jià)值,可以更深入地提高本人對(duì)于Socket通信機(jī)制的理解和認(rèn)識(shí)。
34、</p><p> 基于Socket的局域網(wǎng)通信軟件在目前來(lái)說(shuō)是相當(dāng)廣泛的,不但滿足了傳統(tǒng)的通信需求,還可以擴(kuò)展其應(yīng)用范圍,以適應(yīng)更多更大范圍的需求。所以其研究?jī)r(jià)值也是非常可觀的。</p><p> 1.2 課題現(xiàn)狀及發(fā)展</p><p> 1.2.1 課題現(xiàn)狀</p><p> 基于局域網(wǎng)的即時(shí)通訊工具,實(shí)際上是通訊領(lǐng)域中一個(gè)微縮版
35、本的通信軟件,廣域網(wǎng)的即時(shí)通訊工具采用TCP或者UDP或者TCP、UDP并用的方式來(lái)實(shí)現(xiàn)通訊。目前來(lái)說(shuō),開(kāi)發(fā)技術(shù)是非常成熟的了,比如騰訊QQ,微軟MSN,新浪UC等,這些通訊工具都實(shí)現(xiàn)了廣域網(wǎng)的即時(shí)通訊,但他們卻也各具特色。比如單一TCP通信的MSN,在穩(wěn)定傳輸和安全性上是可圈可點(diǎn)的。而騰訊的QQ,在功能上則是非常全面的,因?yàn)槠淇蛻舳藭r(shí)間通訊采用UDP方式,所以通訊顯得非常的流暢和方便,也大大減輕了服務(wù)器的負(fù)荷。這些通訊軟件各具特色,實(shí)
36、現(xiàn)方面各有所長(zhǎng),但由于他們?cè)谏虡I(yè)運(yùn)營(yíng)階段,其實(shí)現(xiàn)的具體內(nèi)部機(jī)制,我們不得而知,但是無(wú)論他們是怎么實(shí)現(xiàn)的,最終也逃不過(guò)TCP/IP,UDP通訊的本質(zhì)。</p><p> 1.2.2 課題發(fā)展</p><p> 鑒于當(dāng)前這種朝氣蓬勃的發(fā)展勢(shì)頭,在未來(lái)的即時(shí)通訊領(lǐng)域,不管是局域網(wǎng)還是廣域網(wǎng),必定會(huì)更加的精彩,或許在不久的將來(lái),通訊模式會(huì)更加的發(fā)達(dá)和方便于人類(lèi)社會(huì)。</p>&l
37、t;p> 1.3 課題內(nèi)容、目的及目標(biāo)</p><p> 1.3.1 課題內(nèi)容</p><p> 本課題主要是用Java下的Socket研究局域網(wǎng)通信,并利用Socket編寫(xiě)一個(gè)可以供多人通信的局域網(wǎng)聊天軟件,此聊天軟件分為服務(wù)器程序和客戶端程序兩個(gè)獨(dú)立的工程項(xiàng)目。他們各自負(fù)責(zé)相應(yīng)的工作,從而實(shí)現(xiàn)局域網(wǎng)各個(gè)客戶端之間的相互通訊。</p><p> 1.
38、3.2 課題目的和目標(biāo)</p><p> 本課題的目的旨在探究TCP/UDP通信的機(jī)制和原理,由于在大學(xué)期間并沒(méi)有對(duì)TCP/UDP通信進(jìn)行系統(tǒng)的專(zhuān)業(yè)的學(xué)習(xí),所以,對(duì)于TCP/UDP通信并沒(méi)有太多的了解,而當(dāng)前的通信網(wǎng)絡(luò)的廣泛應(yīng)用,又讓研究其內(nèi)在的運(yùn)作模式和機(jī)制變得非常有意義的一件事情。目前來(lái)說(shuō),通信工具是非常的成熟了,本次畢業(yè)設(shè)計(jì)做的這個(gè)關(guān)于TCP/UDP通信的局域網(wǎng)聊天系統(tǒng)也不可能實(shí)現(xiàn)相應(yīng)的經(jīng)濟(jì)價(jià)值,旨在本人
39、在大學(xué)的最后階段有一個(gè)更好的收獲,能夠?qū)W到到很多以前沒(méi)學(xué)過(guò)的新東西,吸取到更多的知識(shí)充實(shí)自己對(duì)于計(jì)算機(jī)這門(mén)學(xué)科認(rèn)識(shí)和研究。</p><p> 本課題的最終目標(biāo)是實(shí)現(xiàn)局域網(wǎng)的即時(shí)通訊,包括點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多、多對(duì)多的相互通訊,最后以一臺(tái)主機(jī)作為服務(wù)器,另外用不同的主機(jī)作為客戶端進(jìn)行試驗(yàn)驗(yàn)證,能夠?qū)崿F(xiàn)相互間的文字通訊。</p><p> 第二章 開(kāi)發(fā)技術(shù)和平臺(tái)</p><p
40、><b> 2.1 開(kāi)發(fā)技術(shù)</b></p><p> 2.1.1 Java語(yǔ)言</p><p> 2.1.1.1 Java發(fā)展歷程</p><p> Java的發(fā)展歷史,可以追朔到1990年。當(dāng)時(shí)Sun Microsystems公司為了發(fā)展消費(fèi)類(lèi)電子產(chǎn)品進(jìn)行了一個(gè)名為Green的項(xiàng)目計(jì)劃。這個(gè)計(jì)劃的負(fù)責(zé)任是James Gosli
41、ng。起初他用具有面向?qū)ο筇卣鞯腃++語(yǔ)言編寫(xiě)嵌入式軟件,可以放在面包機(jī)或PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)等小型電子產(chǎn)品里,以使設(shè)備變得更為“聰明”,更具備人工只能。但后來(lái)發(fā)現(xiàn)C++并不適合這類(lèi)任務(wù);因?yàn)镃++常會(huì)使系統(tǒng)失效。尤其在內(nèi)存管理方面,C++采用直接地址訪問(wèn)方式,需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負(fù)擔(dān),并可能產(chǎn)生多個(gè)Bugs。面包機(jī)上的程序錯(cuò)誤可能使面包機(jī)燒壞甚至爆
42、炸。</p><p> 為了解決此類(lèi)問(wèn)題,Gosling決定開(kāi)發(fā)一種新的語(yǔ)言,并取名為Oak。它采用了大部分與C++類(lèi)似的語(yǔ)法對(duì)可能具備危險(xiǎn)性的功能加以改進(jìn),例如將內(nèi)存管理改為由語(yǔ)言自己進(jìn)行管理,以減少程序員的負(fù)擔(dān)及可能發(fā)生的錯(cuò)誤。Oak是一種可移置的語(yǔ)言,它是一種平臺(tái)獨(dú)立的語(yǔ)言,能夠在各種芯片上執(zhí)行,可以降低設(shè)備的研發(fā)成本。</p><p> Java 技術(shù)具有卓越的通用性、高效性、
43、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專(zhuān)業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。</p><p> 2.1 1.2 Java特點(diǎn)</p><p> Java是一種簡(jiǎn)單、安全、容易適用、面向?qū)ο?、可移置、高性能、多線程的語(yǔ)言。 </p><p&g
44、t;<b> 1、簡(jiǎn)單性</b></p><p> Java語(yǔ)言簡(jiǎn)單高效,基本Java系統(tǒng)(編譯器和解釋器)所占空間很少。由于Java最初是為了對(duì)家用電器進(jìn)行集成控制而設(shè)計(jì)的,因而具備簡(jiǎn)單明了的特征。</p><p><b> 2、面向?qū)ο?lt;/b></p><p> 面向?qū)ο蠹夹g(shù)是現(xiàn)代工業(yè)的一次革新,提高了軟件的模
45、塊化程度和復(fù)用率,縮短了軟件開(kāi)發(fā)時(shí)間,降低了開(kāi)發(fā)成本。在Java之前雖然已經(jīng)有面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言問(wèn)世,但如C++這樣的開(kāi)發(fā)語(yǔ)言并不是完全的面向?qū)ο?,而是面向過(guò)程和面向?qū)ο蟮幕旌象w。Java則是完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。</p><p><b> 3、安全性</b></p><p> Java是可以用在網(wǎng)絡(luò)及分布環(huán)境下的網(wǎng)絡(luò)程序設(shè)計(jì)語(yǔ)言。在網(wǎng)絡(luò)環(huán)境下,語(yǔ)言的安
46、全性變得更為重要。Java提供了許多安全機(jī)制來(lái)保證其網(wǎng)絡(luò)適用上的安全性。</p><p><b> 4、平臺(tái)獨(dú)立</b></p><p> 平臺(tái)獨(dú)立指程序不受操作平臺(tái)的限制,可以應(yīng)用在各種平臺(tái)上。Java源程序經(jīng)過(guò)編譯后生成字節(jié)碼文件,而字節(jié)碼與具體的計(jì)算機(jī)無(wú)關(guān)。只要計(jì)算機(jī)安裝了能解釋執(zhí)行字節(jié)碼的Java虛擬機(jī)JVM,就可以執(zhí)行字節(jié)碼文件,從而實(shí)現(xiàn)Java的平臺(tái)獨(dú)
47、立性。</p><p><b> 5、多線程</b></p><p> Java具備內(nèi)建的多線程功能,可以將一個(gè)程序的不同程序段設(shè)置為不同的線程,使各線程并發(fā)、獨(dú)立執(zhí)行,提高系統(tǒng)的運(yùn)行效率。</p><p><b> 6、網(wǎng)絡(luò)功能</b></p><p> Java能從全球網(wǎng)絡(luò)資源獲取所需信
48、息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對(duì)所得信息進(jìn)行處理,所以說(shuō)Java是一種網(wǎng)絡(luò)語(yǔ)言。</p><p><b> 7、執(zhí)行效率</b></p><p> Java的字節(jié)碼需要經(jīng)過(guò)Java虛擬機(jī)JVM解釋成機(jī)器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進(jìn)步,使得其執(zhí)行速度直逼C與C++。</p><p> 2.1.1.3 Java
49、與Internet</p><p> Java語(yǔ)言取得成功的領(lǐng)域之一就是其他語(yǔ)言數(shù)頁(yè)代碼==Java一條語(yǔ)句。</p><p> TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是Internet的主要協(xié)議,定義了計(jì)算機(jī)和外設(shè)進(jìn)行通信所使用的規(guī)則(應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層),大多數(shù)基于Internet的應(yīng)用程序被看作TCP/IP協(xié)議的上一層. 如 : ftp, http, smtp,tel
50、net等。 IP地址:TCP/IP網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)都有唯一的地址--IP地址。在Java中,有一個(gè)用來(lái)存儲(chǔ)Internet地址的類(lèi)叫InetAddress。</p><p> Java提供的網(wǎng)絡(luò)功能有三大類(lèi): URL, Socket, Datagram:</p><p> 1、URL是三大功能中最高級(jí)的一種,通過(guò)URL Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。</p&g
51、t;<p> 2、Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以認(rèn)為Socket形如其名插座之意,只要有插頭插上了就能夠傳道電流,而這個(gè)電流,我們就可以想象成Socket通信中的Stream(流)了。</p><p> 3、Datagram是更低級(jí)的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)目的地記錄在包中,并把數(shù)據(jù)分成若干塊記錄在固定大小的數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上傳遞到目的端,至于你到底傳送成功與否,這就沒(méi)它的
52、事了。</p><p><b> 2.1.2多線程</b></p><p> 進(jìn)程是一個(gè)具體的應(yīng)用程序,而線程是進(jìn)程中的一個(gè)分支,它是為了單獨(dú)完成程序中的某一項(xiàng)或一組功能而存在的。那么,我們?cè)谝粋€(gè)程序中要實(shí)現(xiàn)的功能就可以劃分為多個(gè)線程來(lái)分別實(shí)現(xiàn),這大大降低了一個(gè)程序的復(fù)雜性,也提高了程序的處理效率。在本課題中引入多線程技術(shù)無(wú)疑顯得是非常必要的,那么通信過(guò)程中的許多
53、功能就可以用多個(gè)線程來(lái)實(shí)現(xiàn),從而做到分工明確,改善程序的執(zhí)行效率。</p><p> 2.1.3 TCP/UDP協(xié)議</p><p> TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)屬于傳輸層協(xié)議。其中TCP提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,它提供的服務(wù)包括數(shù)據(jù)流傳送、可靠性、有效流控、全雙工操作和多路復(fù)用。通
54、過(guò)面向連接、端到端和可靠的數(shù)據(jù)包發(fā)送。通俗說(shuō),它是事先為所發(fā)送的數(shù)據(jù)開(kāi)辟出連接好的通道,然后再進(jìn)行數(shù)據(jù)發(fā)送;而UDP則不為IP提供可靠性、流控或差錯(cuò)恢復(fù)功能。一般來(lái)說(shuō),TCP對(duì)應(yīng)的是可靠性要求高的應(yīng)用,而UDP對(duì)應(yīng)的則是可靠性要求低、傳輸經(jīng)濟(jì)的應(yīng)用。TCP支持的應(yīng)用協(xié)議主要有:Telnet、FTP、SMTP等;UDP支持的應(yīng)用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))、SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)、DNS(主域名稱(chēng)系統(tǒng))、TFTP(通用文件傳
55、輸協(xié)議)等。</p><p><b> 面向連接的TCP</b></p><p> “面向連接”就是在正式通信前必須要與對(duì)方建立起連接。比如你給別人打電話,必須等線路接通了而且對(duì)方拿起話筒才能相互通話。</p><p> TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說(shuō),在正式
56、收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過(guò)三次“握手”才能建立起來(lái),其中的過(guò)程非常復(fù)雜。我們來(lái)看看這三次“握手”的簡(jiǎn)單過(guò)程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次“握手”;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)?”,這是第二次“握手”;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!
57、”,這是第三次“握手”。三次“握手”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過(guò)三次“握手”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。以下是三次“握手”的概念圖2-1:</p><p> 圖2-1 三次“握手”協(xié)議概念圖</p><p> TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無(wú)差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。<
58、;/p><p><b> 面向非連接的UDP</b></p><p> “面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。這與現(xiàn)在流行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候,只需要輸入對(duì)方手機(jī)號(hào)就OK了,至于對(duì)方能否收到,這就不是我們的事情了,一切都交給網(wǎng)絡(luò)處理。</p><p> UDP(User Data Prot
59、ocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是“面向非連接”的協(xié)議,它不會(huì)與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過(guò)去!</p><p> UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。比如,我們經(jīng)常使用“ping”命令來(lái)測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來(lái),那么網(wǎng)
60、絡(luò)就是通的。例如,在默認(rèn)狀態(tài)下,一次“ping”操作發(fā)送4個(gè)數(shù)據(jù)包,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因?yàn)閷?duì)方主機(jī)收到后會(huì)發(fā)回一個(gè)確認(rèn)收到的數(shù)據(jù)包)。這充分說(shuō)明了UDP協(xié)議是面向非連接的協(xié)議,沒(méi)有建立連接的過(guò)程。正因?yàn)閁DP協(xié)議沒(méi)有連接的過(guò)程,所以它的通信效率高。但也正因?yàn)槿绱?,它的可靠性沒(méi)有TCP協(xié)議高。QQ就使用UDP發(fā)消息,因此有時(shí)會(huì)出現(xiàn)你發(fā)送了消息后,會(huì)出現(xiàn)發(fā)送消息失敗的結(jié)果。</p><p>
61、2.1.4 C/S模式</p><p> C/S模式是一種兩層結(jié)構(gòu)的系統(tǒng),第一層在客戶機(jī)上安裝了客戶機(jī)應(yīng)用程序,第二層在服務(wù)器上安裝服務(wù)器管理程序。在C/S模式的工作過(guò)程中,客戶機(jī)程序發(fā)出請(qǐng)求,服務(wù)器程序接收并且處理客戶機(jī)程序提出的請(qǐng)求,然后返回結(jié)果。</p><p> C/S模式有以下特點(diǎn):1、C/S模式將客戶端與服務(wù)分離,系統(tǒng)具有穩(wěn)定性和靈活性的特點(diǎn)。2、C/S模式配備的是
62、點(diǎn)對(duì)點(diǎn)的結(jié)構(gòu)模式,適用于局域網(wǎng),有可靠的安全性。3、由于客戶端實(shí)現(xiàn)與服務(wù)器端的直接連接,沒(méi)有中間環(huán)節(jié),因此響應(yīng)速度快。4、在C/S模式中,作為客戶機(jī)的計(jì)算機(jī)都要安裝客戶機(jī)程序,一旦軟件系統(tǒng)升級(jí),每臺(tái)客戶機(jī)都要安裝客戶機(jī)程序,系統(tǒng)升級(jí)和維護(hù)較為復(fù)雜。</p><p> 2.1.5 Socket</p><p> 在網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向的
63、鏈路的一般稱(chēng)為一個(gè)Socket。Socket通常用來(lái)實(shí)現(xiàn)客戶端和服務(wù)器的連接。Socket是TCP/IP協(xié)議的一個(gè)十分流行的編程方式,一個(gè)Socket通常由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。Socket所支持的協(xié)議不光有TCP/IP,還有UDP。在Java環(huán)境下,Socket編程主要是基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程。也就是說(shuō)在Java環(huán)境下,我們使用TCP/IP協(xié)議的網(wǎng)絡(luò)編程需要采用Socket機(jī)制。</p><p&
64、gt;<b> 2.2 開(kāi)發(fā)平臺(tái)</b></p><p> 開(kāi)發(fā)Java GUI程序需要一個(gè)系統(tǒng)的組件平臺(tái),需要很多的組件協(xié)同工作才能開(kāi)發(fā)出一個(gè)具有良好界面并具有局域網(wǎng)通信功能的聊天軟件。本次畢業(yè)設(shè)計(jì)所要用到的組件包括Eclipse平臺(tái),JDK1.6解釋器,AWT組件庫(kù),SQL Server 2005等。</p><p> 2.2.1 硬件環(huán)境</p&g
65、t;<p> 開(kāi)發(fā)Java項(xiàng)目所要的硬件要求并不需要太高,達(dá)到以下要求即可:</p><p> 處理器:Intel Core2 Duo CPU或者更高</p><p> 內(nèi)存:1GB或者更高</p><p><b> 網(wǎng)絡(luò):局域網(wǎng)</b></p><p> 2.2.2 軟件環(huán)境</p>
66、<p> 操作系統(tǒng):Windows XP或者其它可用操作系統(tǒng)</p><p> 開(kāi)發(fā)平臺(tái):Eclipse+AWT組件庫(kù)</p><p><b> 開(kāi)發(fā)語(yǔ)言:Java</b></p><p> 數(shù)據(jù)庫(kù):SQL Server 2005</p><p> 2.2.2.1 Eclipse</p&g
67、t;<p> Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。Eclipse 還附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具(Java Development Tools,JDT)。</p><p> 2.2.2.2 JDK1.6</p><p> JDK(Java Dev
68、elopment Kit)是Sun Microsystems針對(duì)Java開(kāi)發(fā)員的產(chǎn)品。自從Java推出以來(lái),JDK已經(jīng)成為使用最廣泛的Java SDK。JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境、Java工具和Java基礎(chǔ)的類(lèi)庫(kù)。</p><p> 2.2.2.3 SQL Server 2005和JDBC</p><p> JDBC是一種用于執(zhí)行SQL語(yǔ)句的Java API
69、應(yīng)用程序接口,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一的訪問(wèn)接口。JDBC由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成,通過(guò)調(diào)用這些類(lèi)和接口所提供的方法,用戶能夠以一致的方式連接多種不同的數(shù)據(jù)庫(kù),從而可使用標(biāo)準(zhǔn)的SQL語(yǔ)言來(lái)存取數(shù)據(jù)庫(kù)中的數(shù)據(jù),不必再為每一種數(shù)據(jù)庫(kù)系統(tǒng)編寫(xiě)不同的Java代碼。本次畢業(yè)應(yīng)用了JDBC訪問(wèn)SQL Server 2005 數(shù)據(jù)庫(kù),以完成必要的功能和要求。</p><p> 2.2.2.4 AWT組件&
70、lt;/p><p> AWT 是Abstract Window Toolkit (抽象窗口工具包)的縮寫(xiě),這個(gè)工具包提供了一套與本地圖形界面進(jìn)行交互的接口。本次畢業(yè)設(shè)計(jì)中用Java提供的這個(gè)工具包對(duì)服務(wù)器和客戶端進(jìn)行GUI開(kāi)發(fā)。</p><p> 第三章 系統(tǒng)分析與設(shè)計(jì)</p><p><b> 3.1 系統(tǒng)分析</b></p>
71、<p> 3.1.1 系統(tǒng)可行性分析</p><p> 經(jīng)濟(jì)可行性:由于本系統(tǒng)的主要背景是畢業(yè)設(shè)計(jì),不考慮到直接的經(jīng)濟(jì)效益和其后的商業(yè)發(fā)展,而只在于注重自身水平和能力的提高。所以,只要有一臺(tái)能運(yùn)行Java軟件的電腦即可,而不用考慮到經(jīng)濟(jì)問(wèn)題。</p><p> 技術(shù)可行性:本系統(tǒng)的開(kāi)發(fā)是利用 SQL Server 2005作為本系統(tǒng)的后臺(tái)數(shù)據(jù)庫(kù)的,它是一個(gè)支持多用戶的新型
72、數(shù)據(jù)庫(kù),適用于中小規(guī)模的數(shù)據(jù)量需求。使用Java作為系統(tǒng)開(kāi)發(fā)的語(yǔ)言,它提供完善的控制語(yǔ)句、類(lèi)與對(duì)象的支持及豐富的數(shù)據(jù)類(lèi)型,給開(kāi)發(fā)高性能系統(tǒng)提供了保障。</p><p> 運(yùn)行可行性:本系統(tǒng)為一個(gè)小型的局域網(wǎng)聊天系統(tǒng),所耗費(fèi)的資源比較少,只要安裝了運(yùn)行該程序所必要的軟件后,就目前的電腦,都是能夠運(yùn)行的。因此,本系統(tǒng)在運(yùn)行上是完全可行的。</p><p> 綜上所述,本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)在經(jīng)
73、濟(jì)上、軟件上和硬件設(shè)備上的條件都是滿足的。因此可以得出結(jié)論,本系統(tǒng)的開(kāi)發(fā)是可行的。</p><p> 3.1.2 系統(tǒng)功能需求</p><p> 既然該課題的可行性是已經(jīng)確定,那么我們就可以開(kāi)始分析其具體的功能需求。聊天軟件無(wú)非就是要實(shí)現(xiàn)聊天的功能,那么其最根本的需求就是實(shí)現(xiàn)一個(gè)聊天的功能。本次畢業(yè)設(shè)計(jì)的聊天軟件所用到的是C/S模式,即需要一個(gè)服務(wù)器和一個(gè)客戶端項(xiàng)目,最后兩個(gè)項(xiàng)目完成通
74、信過(guò)程。具體的功能我用Visio圖演示出來(lái),如圖3-1,</p><p> 圖3-1 局域網(wǎng)聊天系統(tǒng)功能示意圖</p><p> 3.1.3 系統(tǒng)實(shí)現(xiàn)原理</p><p> 聊天系統(tǒng)的設(shè)計(jì)跟一般網(wǎng)站的設(shè)計(jì)有著許多不同的地方,一般來(lái)說(shuō),網(wǎng)站設(shè)計(jì)所考慮的因素包括大量的界面美化以及動(dòng)態(tài)效果等,而聊天室只要能提供實(shí)現(xiàn)用戶之間即時(shí)性的聊天通信即可,但也要做一定美化效果,
75、不然,當(dāng)用戶一看著聊天軟件就沒(méi)了聊天的心情,那就太糟糕了。綜合以上因素,我對(duì)本次畢業(yè)設(shè)計(jì)所要做的的工作做了以下的總結(jié):</p><p> 在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。服務(wù)器與客戶端連接和傳遞數(shù)據(jù)具體實(shí)現(xiàn)的原理如
76、下圖3-2所示:</p><p> 圖3-2服務(wù)器與客戶端實(shí)現(xiàn)數(shù)據(jù)交互通信原理圖</p><p> 3.1.4 各個(gè)模塊功能詳解</p><p> 3.1.4.1 服務(wù)器端結(jié)構(gòu)</p><p> 服務(wù)器的工作主要是負(fù)責(zé)對(duì)客戶端請(qǐng)求的不斷監(jiān)聽(tīng),它一直處于擁塞狀態(tài),直到有客戶端發(fā)出連接請(qǐng)求為止。當(dāng)服務(wù)器接收到客戶端的登陸請(qǐng)求并驗(yàn)證用戶名密
77、碼通過(guò)后,用戶成功進(jìn)入聊天室,服務(wù)器又處于擁塞狀態(tài),也就是進(jìn)入了對(duì)客戶端(發(fā)送信息,離線)的監(jiān)聽(tīng)狀態(tài)。服務(wù)器功能具體的實(shí)現(xiàn)方式如下圖3-3所示,</p><p> 圖3-3 服務(wù)器工作模式圖示</p><p> 開(kāi)啟服務(wù)器時(shí)會(huì)進(jìn)入服務(wù)器控制主界面,上面標(biāo)明了服務(wù)器的IP、端口號(hào)等重要信息,管理者可以點(diǎn)擊開(kāi)啟按鈕啟動(dòng)服務(wù)器。然后,服務(wù)器就開(kāi)始工作了,服務(wù)器會(huì)一直處于擁塞狀態(tài),直到接收到S
78、ocket連接請(qǐng)求。然后服務(wù)器便會(huì)執(zhí)行相應(yīng)線程里面相應(yīng)的操作流程,比如用戶登陸、用戶注冊(cè)、用戶聊天信息轉(zhuǎn)發(fā)等等。</p><p> 3.1.4.2 客戶端結(jié)構(gòu)</p><p> 客戶端分為登陸(Login),注冊(cè)(Register)和聊天主界面(ChatRoom)三大模塊,登陸主要是客戶端向服務(wù)器發(fā)出登陸用戶名和密碼,請(qǐng)求到服務(wù)器的連接。注冊(cè)是對(duì)用戶開(kāi)放注冊(cè)功能,從而能讓注冊(cè)過(guò)的用戶進(jìn)
79、入聊天室。聊天主界面就是我們的聊天室了,這里實(shí)現(xiàn)了局域網(wǎng)聊天的功能,包括點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多、多對(duì)多的聊天形式??蛻舳斯ぷ髂J饺缦聢D3-4所示,</p><p> 圖3-4 客戶端工作模式圖示</p><p> 首先我們會(huì)啟動(dòng)客戶端,進(jìn)入類(lèi)似QQ登陸的登陸界面Login,上面有登陸用戶名和密碼輸入框和登陸按鈕,如果用戶輸入正確的用戶名和密碼就會(huì)直接進(jìn)入ChatRoom,如果此時(shí)有其他在線用戶
80、,用戶就可以與他們進(jìn)行即時(shí)聊天了。除了登陸,你還可以進(jìn)行注冊(cè),點(diǎn)擊注冊(cè)按鈕就會(huì)響應(yīng)出Register界面,在你填寫(xiě)完整了注冊(cè)信息后,點(diǎn)擊確定,服務(wù)器會(huì)查詢數(shù)據(jù)庫(kù)做出判斷并返回結(jié)果,如果服務(wù)器返回了注冊(cè)成功的信息,用戶便可以點(diǎn)擊返回進(jìn)行以上登陸操作。</p><p><b> 3.2 系統(tǒng)設(shè)計(jì)</b></p><p> 3.2.1 設(shè)計(jì)原則</p>&
81、lt;p> 考慮到系統(tǒng)的可重用性和易維護(hù)性,需要將本系統(tǒng)的網(wǎng)絡(luò)底層通信和應(yīng)用系統(tǒng)分開(kāi),做到結(jié)構(gòu)分明、各功能模塊清晰?;诳芍赜玫木W(wǎng)絡(luò)通信底層,可以實(shí)現(xiàn)其他各種實(shí)時(shí)性較高的應(yīng)用系統(tǒng)。本系統(tǒng)在架構(gòu)設(shè)計(jì)上將分成3個(gè)層次,如下圖3-5所示,</p><p> 圖3-5 聊天系統(tǒng)設(shè)計(jì)層次模型圖</p><p> 本系統(tǒng)最底層的是Socket通信層,負(fù)責(zé)將客戶端與服務(wù)器之間連接起來(lái),并建立
82、I/O通道,實(shí)現(xiàn)客戶端與服務(wù)器的數(shù)據(jù)傳輸。它通過(guò)接口層和最上面的應(yīng)用層保持即時(shí)性的數(shù)據(jù)傳遞。用戶登陸聊天時(shí),將實(shí)現(xiàn)統(tǒng)一的用戶登陸驗(yàn)證機(jī)制。Socket底層設(shè)計(jì)分為兩大部分:協(xié)議設(shè)計(jì)和連接處理。協(xié)議設(shè)計(jì)就是規(guī)定服務(wù)器的IP和默認(rèn)的端口號(hào)(PORT),服務(wù)器在該IP和端口號(hào)監(jiān)聽(tīng)客戶端的連接請(qǐng)求。用多線程的技術(shù)處理客戶端的連接請(qǐng)求,一旦有客戶端發(fā)起連接請(qǐng)求,服務(wù)器便進(jìn)入到與客戶端的連接線程中開(kāi)始工作,直到完成所有操作。</p>
83、<p> 3.2.2 架構(gòu)設(shè)計(jì)</p><p> 本系統(tǒng)中,服務(wù)器端設(shè)計(jì)兩個(gè)線程,一個(gè)用來(lái)處理客戶端連接請(qǐng)求的監(jiān)聽(tīng)線程,一旦監(jiān)聽(tīng)到Socket連接請(qǐng)求,服務(wù)器便進(jìn)入Connection線程工作,處理客戶端相應(yīng)請(qǐng)求的操作,比如登陸、注冊(cè)、發(fā)送消息、退出等操作。兩個(gè)線程之間分工明確一個(gè)負(fù)責(zé)監(jiān)聽(tīng)請(qǐng)求,一個(gè)負(fù)責(zé)處理請(qǐng)求,多線程處理,分工明確。</p><p> 相應(yīng)的客戶端的設(shè)計(jì)要
84、比服務(wù)器簡(jiǎn)單,Login類(lèi)負(fù)責(zé)實(shí)現(xiàn)登陸,Register類(lèi)負(fù)責(zé)實(shí)現(xiàn)用戶注冊(cè),ChatRoom類(lèi)實(shí)現(xiàn)用戶的聊天功能,其中ChatRoom單獨(dú)用一個(gè)線程來(lái)處理其具體的操作。</p><p> 3.2.3 功能設(shè)計(jì)</p><p> 局域網(wǎng)聊天系統(tǒng)以局域網(wǎng)內(nèi)的用戶為實(shí)用對(duì)象,該聊天系統(tǒng)主要由服務(wù)器端和客戶端兩部分組成,其功能圖亦如圖3-1所示。</p><p> 3
85、.2.4 數(shù)據(jù)庫(kù)設(shè)計(jì)</p><p> 由于本局域網(wǎng)聊天系統(tǒng)主要是以提供聊天服務(wù)為主要目標(biāo),所以所設(shè)計(jì)的數(shù)據(jù)庫(kù)表只有簡(jiǎn)單的兩張,一張用來(lái)存儲(chǔ)用戶信息,一張用來(lái)存儲(chǔ)用戶的聊天信息,如下圖3-5,3-6所示,</p><p> 圖3-5 用戶信息表</p><p> 用戶信息表主要包括了用戶名、密碼、年齡、性別、郵箱5個(gè)數(shù)據(jù),分別用來(lái)存儲(chǔ)用戶的用戶名、密碼、年齡、
86、性別、郵箱。</p><p> 圖3-6 用戶聊天信息表</p><p> 用戶聊天信息表主要用來(lái)存儲(chǔ)用戶的聊天信息,包括聊天信息的id號(hào),聊天具體信息,聊天內(nèi)容的時(shí)間。</p><p><b> 第四章 系統(tǒng)的實(shí)現(xiàn)</b></p><p> 4.1 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)</p><p>
87、 4.1.1 服務(wù)器工作流程圖</p><p> 服務(wù)器的主要工作室配置服務(wù)器并且啟動(dòng)服務(wù)器,服務(wù)器啟動(dòng)后對(duì)用戶進(jìn)行管理,包括在線用戶管理,踢出違規(guī)用戶,記錄用戶聊天信息等。其工作流程圖如下4-1所示,</p><p> 圖4-1 服務(wù)器工作流程</p><p> 4.1.2 服務(wù)器主界面</p><p> 服務(wù)器主要是實(shí)現(xiàn)服務(wù)器的啟
88、動(dòng),然后就開(kāi)始監(jiān)聽(tīng)客戶端的連接請(qǐng)求,處理客戶端的各種應(yīng)用操作。其主界面如下圖4-2,4-3所示,</p><p> 圖4-2 服務(wù)器主界面</p><p> 圖4-3 服務(wù)器用戶管理主界面</p><p> 4.1.3 服務(wù)器的開(kāi)啟</p><p> 點(diǎn)擊啟動(dòng)服務(wù)器按鈕,便可以啟動(dòng)服務(wù)器,服務(wù)器開(kāi)始提供服務(wù)。如下圖4-4所示,<
89、/p><p> 圖4-4 服務(wù)器啟動(dòng)后服務(wù)器管理主界面</p><p> 4.1.4 服務(wù)器的關(guān)閉</p><p> 點(diǎn)擊以上圖例所示“關(guān)閉服務(wù)器”按鈕,服務(wù)器便可退出服務(wù)。一旦服務(wù)器關(guān)閉了服務(wù),那么客戶端會(huì)知道服務(wù)器已經(jīng)停止了服務(wù),并且彈出“無(wú)法連接到服務(wù)器”的對(duì)話框,客戶端也會(huì)停止工作。</p><p> 4.1.5 服務(wù)器管理用戶&
90、lt;/p><p> 現(xiàn)在,有一個(gè)用戶上線了,服務(wù)器刷新在線用戶列表和在線用戶數(shù),同時(shí)更新服務(wù)器日志,如下圖4-5,4-6所示,</p><p> 圖4-5 有一個(gè)用戶上線了(服務(wù)器管理界面)</p><p> 圖4-6 有一個(gè)用戶上線了(用戶信息管理界面)</p><p> 現(xiàn)在,又有一個(gè)用戶上線了,服務(wù)器刷新在線用戶列表和在下人數(shù),同
91、時(shí)更新服務(wù)器日志,如下圖4-7,4-8所示,</p><p> 圖4-7 又一個(gè)用戶上線了(服務(wù)器管理界面)</p><p> 圖4-8 又一個(gè)用戶上線了(用戶信息管理界面)</p><p> 服務(wù)器監(jiān)聽(tīng)客戶端,記錄客戶端聊天信息,如下圖4-9所示,</p><p> 圖4-9 服務(wù)器用戶信息管理界面</p><p
92、> 服務(wù)器向所有用戶發(fā)送系統(tǒng)消息,如圖4-10 組圖所示,</p><p> 圖4-10 服務(wù)器向所有用戶發(fā)送消息</p><p> 服務(wù)器踢出非法聊天用戶,如下圖 4-11組圖所示,</p><p> 圖4-11 服務(wù)器踢出非法聊天用戶</p><p> 現(xiàn)在,有一個(gè)用戶下線了,服務(wù)器刷新在線用戶列表和在線人數(shù),同時(shí)更新服務(wù)
93、器日志,如下圖4-12所示,</p><p> 圖4-12 有一個(gè)用戶下線了</p><p> 4.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.2.1 客戶端工作流程圖</p><p> 客戶端啟動(dòng)會(huì)首先進(jìn)入登陸(Login)界面,登陸界面上不但有登陸按鈕,還有注冊(cè)按鈕。如果輸入正確的用戶名和密碼,就會(huì)登錄到聊天室ChatRoom主
94、界面。而如果點(diǎn)擊注冊(cè)按鈕的話,就會(huì)直接跳到注冊(cè)界面,其工作流程圖下圖4-13所示,</p><p> 圖4-13 客戶端工作流程圖</p><p> 4.2.2 客戶端登陸主界面</p><p> 登陸客戶端首先進(jìn)入的是登陸界面,如下圖4-14所示,</p><p> 圖4-14 用戶登陸界面</p><p>
95、 4.2.3 客戶端注冊(cè)主界面</p><p> 用戶點(diǎn)擊登陸主界面上的注冊(cè)按鈕,會(huì)自動(dòng)跳轉(zhuǎn)到注冊(cè)主界面,如圖4-15所示,</p><p> 圖4-15 注冊(cè)主界面</p><p> 此時(shí)用戶可以進(jìn)行賬號(hào)注冊(cè),如下圖4-16組圖所示</p><p> 圖4-16 用戶注冊(cè)</p><p> 用戶注冊(cè)時(shí),首
96、先經(jīng)過(guò)客戶端判定是否輸入為空,經(jīng)過(guò)客戶端的判斷后才會(huì)將注冊(cè)信息發(fā)往服務(wù)器,服務(wù)器判斷該用戶名是否已經(jīng)被注冊(cè),然后返回成功或者失敗的結(jié)果。部分代碼如下,</p><p><b> 客戶端判斷:</b></p><p><b> //用戶注冊(cè)</b></p><p> @SuppressWarnings("de
97、precation")</p><p> private void registNewUser() {</p><p> // TODO Auto-generated method stub</p><p> //從輸入框接收用戶注冊(cè)詳細(xì)信息并賦給封裝的注冊(cè)用戶信息類(lèi)對(duì)象</p><p> RegistUserInfo re
98、gistUserInfo = new RegistUserInfo();</p><p> registUserInfo.userName = txtUserName.getText();</p><p> registUserInfo.userPassword = txtUserPassword.getText();</p><p> registUserI
99、nfo.age = txtAge.getText();</p><p> registUserInfo.sex = rbtnMale.isSelected()?"男":"女";//默認(rèn)選擇男,如果為真就選擇男,假就選擇女</p><p> registUserInfo.email = txtEmail.getText();</p>
100、<p><b> /**</b></p><p> * 對(duì)得到的注冊(cè)用戶信息進(jìn)行驗(yàn)證</p><p><b> */</b></p><p><b> //用戶名有無(wú)驗(yàn)證</b></p><p> if(registUserInfo.userName.len
101、gth()==0){</p><p> JOptionPane.showMessageDialog(null, "用戶名不能為空!");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //密碼有
102、無(wú)驗(yàn)證</b></p><p> if(registUserInfo.userPassword.length()==0){</p><p> JOptionPane.showMessageDialog(null, "密碼不能為空!");</p><p><b> return;</b></p>
103、<p><b> }</b></p><p> //兩次密碼輸入是否相同驗(yàn)證</p><p> if(!registUserInfo.userPassword.equals(txtPwdConfirm.getText())){</p><p> JOptionPane.showConfirmDialog(null, &quo
104、t;兩次輸入密碼不一致!");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //年齡有無(wú)驗(yàn)證</b></p><p> if(registUserInfo.age.length()==0){
105、</p><p> JOptionPane.showMessageDialog(null, "年齡不能為空 !");</p><p><b> return;</b></p><p><b> }</b></p><p><b> /**</b>&l
106、t;/p><p> * 輸入內(nèi)容合法性驗(yàn)證</p><p><b> */</b></p><p><b> //年齡合法性驗(yàn)證</b></p><p> int age = Integer.parseInt(txtAge.getText());</p><p> if
107、(age<=0||age>150){</p><p> JOptionPane.showMessageDialog(null, "輸入年齡無(wú)效!");</p><p><b> return;</b></p><p><b> }</b></p><p><
108、;b> //郵箱合法性驗(yàn)證</b></p><p> int flag = 0;</p><p> for(int i = 0;i<txtEmail.getText().length();i++){</p><p> if(txtEmail.getText().charAt(i)=='@'){</p>&
109、lt;p><b> flag++;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(flag!=1){</p><p> JOptionPane.showMessageDialog(null, &quo
110、t;電子郵箱格式不正確!請(qǐng)重新輸入!");</p><p><b> return;</b></p><p><b> }</b></p><p><b> 服務(wù)器判斷:</b></p><p><b> /**</b></p>
111、;<p><b> * 用戶注冊(cè)處理</b></p><p><b> */</b></p><p> private void userRegist() {</p><p> // TODO Auto-generated method stub</p><p><b&g
112、t; try {</b></p><p><b> //用戶重名判斷</b></p><p> RegistUserInfo regist = (RegistUserInfo) obj;</p><p> String sql = "select * from userInfo where userName=
113、9;"+regist.userName+"'";</p><p> SqlConn sq = new SqlConn();</p><p> Statement st = sq.con.createStatement();</p><p> ResultSet rs = st.executeQuery(sql);</
114、p><p> boolean flag = false;</p><p> while(rs.next()){</p><p> flag = true;</p><p><b> }</b></p><p> if(flag==true){</p><p> to
115、ClientStream.println("注冊(cè)名重復(fù),請(qǐng)重新輸入!");</p><p><b> return;</b></p><p><b> }else{</b></p><p> toClientStream.println(regist.userName+"注冊(cè)成功!&qu
116、ot;);//</p><p> sql = "insert into userInfo(userName,userPwd,sex,age,email) "values( '"+regist.userName+"','"+regist.userPassword+"','"+regist.sex+&q
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的網(wǎng)絡(luò)安全聊天工具畢業(yè)設(shè)計(jì)
- 網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于OpenSSL開(kāi)發(fā)的聊天工具的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于netbios的聊天工具
- 畢業(yè)設(shè)計(jì)--網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)(含外文翻譯)
- 基于android的即時(shí)聊天工具
- 網(wǎng)絡(luò)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- java網(wǎng)頁(yè)版即時(shí)聊天工具開(kāi)題報(bào)告
- 畢業(yè)論文---局域網(wǎng)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)
- 局域網(wǎng)聊天工具設(shè)計(jì)畢業(yè)論文
- 聊天工具仿真表情插件的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 網(wǎng)絡(luò)視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于linux的socket網(wǎng)絡(luò)編程聊天工具課程設(shè)計(jì)
- 基于qt4的視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn)
- 開(kāi)題報(bào)告-基于android的即時(shí)聊天工具
- 基于.net的局域網(wǎng)聊天工具
- 基于QT4的視頻聊天工具的設(shè)計(jì)與實(shí)現(xiàn).doc
- 基于.net的局域網(wǎng)聊天工具論文
- 軟件開(kāi)發(fā)集成環(huán)境課程設(shè)計(jì)--小qq聊天工具
- tcp_ip課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論