java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)(含代碼)_第1頁(yè)
已閱讀1頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  Java程序課程設(shè)計(jì)任務(wù)書(shū)</p><p>  JAVA聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)</p><p><b>  主要內(nèi)容:</b></p><p>  用JAVA實(shí)現(xiàn)基于C/S模式的聊天室系統(tǒng)。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。<

2、;/p><p>  2.具體要求(包括技術(shù)要求等):</p><p><b>  系統(tǒng)的功能要求:</b></p><p>  A.服務(wù)器端主要功能如下:</p><p>  1.在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。</p><p>  2.用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。<

3、;/p><p>  3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b>  4.統(tǒng)計(jì)在線人數(shù)。</b></p><p>  5.當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。</p><p>  B.客戶端的主要功能如下:</p><p>  1.連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。</p&

4、gt;<p>  2.用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。</p><p>  3.用戶可以配置連接后顯示的用戶名。</p><p>  4.當(dāng)服務(wù)器端開(kāi)啟的話,用戶可以隨時(shí)登錄和注銷。</p><p>  5.用戶可以向所有人或某一個(gè)人發(fā)送消息。</p><p>  學(xué)習(xí)并掌握一下技術(shù):Java JavaBea

5、n 等</p><p>  熟練使用一下開(kāi)發(fā)工具:Eclipse, JCreator 等</p><p>  實(shí)現(xiàn)系統(tǒng)上述的功能。</p><p><b>  3.進(jìn)度安排:</b></p><p>  5月20日 ~ 5月21日:課程設(shè)計(jì)選題,查找參考資料 </p><p>  5月22

6、日 ~ 5月23日: 完成系統(tǒng)設(shè)計(jì)</p><p>  5月24日 ~ 5月27日: 完成程序代碼的編寫(xiě)</p><p>  5月28日:系統(tǒng)測(cè)試與完善</p><p>  5月29日:完成課程設(shè)計(jì)報(bào)告,準(zhǔn)備答辯</p><p><b>  主要參考文獻(xiàn):</b></p><p>  [

7、1].張廣彬 孟紅蕊 張永寶.Java課程設(shè)計(jì)(案例精編)[M].清華大學(xué)出版社.2007年版</p><p><b>  摘要</b></p><p>  在網(wǎng)絡(luò)越來(lái)越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來(lái)越多,越來(lái)越離不開(kāi)網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來(lái)越多,例如,國(guó)外的ICQ、國(guó)內(nèi)騰訊公司開(kāi)發(fā)的OICQ?;贘ava網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計(jì)使用Java編寫(xiě)一個(gè)聊

8、天系統(tǒng)。 一般來(lái)說(shuō),聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫(kù)組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過(guò)Java提供的Soket類來(lái)連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的而Java提供的多線程功能用多線程可完成多點(diǎn)對(duì)多點(diǎn)的聊天,數(shù)據(jù)庫(kù)管理系統(tǒng)用SQL Server2000完成并通過(guò)JDBC-ODBC橋訪問(wèn)數(shù)據(jù)庫(kù)。</p><p>  本系統(tǒng)

9、建立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過(guò)Socket傳送消息。使用JAVA語(yǔ)言編寫(xiě),開(kāi)發(fā)工具采用Eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,采用了多線程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。</p><p>  聊天系統(tǒng)完成后將可進(jìn)行多人對(duì)多人的聊天,對(duì)好友進(jìn)行添

10、加、刪除,對(duì)新用戶的注冊(cè),發(fā)送消息、接受消息等等功能。</p><p>  關(guān)鍵詞:多線程 ;客戶機(jī)/服務(wù)器 ;JAVA ; Socket ; Eclipse ; TCP/IP</p><p><b>  目 錄</b></p><p>  Java程序課程設(shè)計(jì)任務(wù)書(shū)II</p><p><b>  摘要I

11、II</b></p><p><b>  目 錄IV</b></p><p><b>  第1章 引言1</b></p><p><b>  1.1 背景1</b></p><p>  1.2 課程設(shè)計(jì)內(nèi)容1</p><p>  1.

12、3 任務(wù)分工2</p><p>  第2章 聊天室系統(tǒng)3</p><p>  2.1 聊天室系統(tǒng)概述3</p><p>  2.1.1 聊天室系統(tǒng)的定義3</p><p>  2.1.2 聊天室系統(tǒng)的任務(wù)及目的3</p><p>  2.2 主要聊天室系統(tǒng)介紹4</p><p>  

13、2.3 本章小結(jié)5</p><p>  第3章 聊天室系統(tǒng)的設(shè)計(jì)6</p><p>  3.1 系統(tǒng)需求分析6</p><p>  3.2 系統(tǒng)開(kāi)發(fā)及運(yùn)行環(huán)境6</p><p>  3.3 系統(tǒng)主要功能要求6</p><p>  3.4 系統(tǒng)模塊化分析7</p><p>  3.4.

14、1 聊天室系統(tǒng)總體結(jié)構(gòu)7</p><p>  3.4.2 聊天室系統(tǒng)各模塊介紹8</p><p>  3.5 系統(tǒng)數(shù)據(jù)流圖10</p><p>  3.6 本章小結(jié)10</p><p>  第4章 系統(tǒng)的具體實(shí)現(xiàn)11</p><p>  4.1界面設(shè)計(jì)11</p><p>  4.1

15、.1服務(wù)器啟動(dòng)界面圖11</p><p>  4.1.2服務(wù)器啟動(dòng)成功界面圖12</p><p>  4.1.3客戶端界面圖12</p><p>  4.1.4用戶設(shè)置界面圖13</p><p>  4.1.5用戶成功登錄界面圖13</p><p>  4.1.6兩人私聊界面圖14</p>&

16、lt;p>  4.1.7多人群聊界面圖14</p><p>  4.2程序設(shè)計(jì)及調(diào)試運(yùn)行14</p><p>  4.2.1 程序調(diào)試(以服務(wù)器為例)15</p><p>  4.2.2 JCreator20</p><p>  4.3 本章小結(jié)21</p><p>  第5章 結(jié)束語(yǔ)22</p

17、><p><b>  致謝23</b></p><p>  附錄 源代碼24</p><p><b>  第1章 引言</b></p><p><b>  1.1 背景</b></p><p>  當(dāng)今主流的聊天工具有QQ,ICQ,MSN Messen

18、ger,Yahoo Messenger等,國(guó)內(nèi)最熱門(mén)的當(dāng)屬Q(mào)Q,騰訊QQ(OICQ)是由深圳市騰訊計(jì)算機(jī)系統(tǒng)公司開(kāi)發(fā)的,基于Internet的即時(shí)尋呼軟件。您可以使用QQ和好友用戶進(jìn)行交流,信息即時(shí)發(fā)送,即時(shí)回復(fù),收發(fā)及時(shí)、功能全面。此外QQ還具有BP機(jī)網(wǎng)上尋呼、聊天室、傳輸文件、語(yǔ)音郵件、手機(jī)短訊服務(wù)等功能,QQ不僅僅是虛擬的網(wǎng)絡(luò)尋呼機(jī),更可與傳統(tǒng)的無(wú)線尋呼網(wǎng)、GSM移動(dòng)電話的短消息系統(tǒng)互聯(lián),目前QQ和全國(guó)多家尋呼臺(tái)、移動(dòng)通信公司有業(yè)

19、務(wù)合作。是國(guó)內(nèi)不可多得的中文網(wǎng)絡(luò)尋呼機(jī)。QQ支持顯示朋友在線信息、即時(shí)傳送信息、即時(shí)交談、即時(shí)發(fā)送文件和網(wǎng)址。QQ可以在Win95/98/NT/2000操作系統(tǒng)下運(yùn)行,是十分靈活的網(wǎng)絡(luò)尋呼工具。它會(huì)自動(dòng)檢查您是否已聯(lián)網(wǎng),如果您的電腦已連入Internet,可以搜索網(wǎng)友、顯示在線網(wǎng)友,可以根據(jù)QQ號(hào)、昵稱、姓名、email地址等關(guān)鍵詞來(lái)查找,找到后可加入到通訊錄中。當(dāng)您的通訊錄中的網(wǎng)友在線時(shí),QQ中朋友的頭像就會(huì)顯示在線,根據(jù)提示就可以發(fā)

20、送信息,如果對(duì)方登記了尋呼機(jī)或開(kāi)通了GSM手機(jī)短消息,即使離線了,</p><p>  雖然以上這些軟件是免費(fèi)的,并且功能越來(lái)越強(qiáng)大。但是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒(méi)法脫離Intenet使用的。為了能在一個(gè)沒(méi)有連接到Intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。</p><p>  本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個(gè)工具。

21、</p><p>  1.2 課程設(shè)計(jì)內(nèi)容</p><p>  實(shí)現(xiàn)的是局域網(wǎng)中的聊天功能,運(yùn)行服務(wù)程序后,服務(wù)器創(chuàng)建成功,然后使服務(wù)器對(duì)某一個(gè)設(shè)定的端口處于監(jiān)聽(tīng)狀態(tài),當(dāng)有客戶端請(qǐng)求建立連接時(shí),服務(wù)器就可接受請(qǐng)求,建立連接!這樣服務(wù)器和客戶端就可相互發(fā)送消息,實(shí)現(xiàn)聊天功能!</p><p><b>  系統(tǒng)的功能要求:</b></p>

22、;<p>  A.服務(wù)器端主要功能如下:</p><p>  1.在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。</p><p>  2.用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。</p><p>  3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b>  4.統(tǒng)計(jì)在線人數(shù)。</b>&l

23、t;/p><p>  5.當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。</p><p>  B.客戶端的主要功能如下:</p><p>  1.連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。</p><p>  2.用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。</p><p>  3.用戶可以配置連接后顯示的用戶名。</p>

24、<p>  4.當(dāng)服務(wù)器端開(kāi)啟的話,用戶可以隨時(shí)登錄和注銷。</p><p>  5.用戶可以向所有人或某一個(gè)人發(fā)送消息</p><p><b>  1.3 任務(wù)分工</b></p><p>  邱曉峰 ChatClient.java ChatServer.java ClientReceive.java </p>

25、<p>  鄭亞楠 :Help.java Node.java PortConf.java </p><p>  任廣星 :ServerRecieve.java UserConf.java UserLinklist.java</p><p>  王京杰:ConnectConf.java ServerListen.java</p><p>&l

26、t;b>  第2章 聊天室系統(tǒng)</b></p><p>  2.1 聊天室系統(tǒng)概述</p><p>  聊天室是一種基于互聯(lián)網(wǎng)的即時(shí)交流系統(tǒng),最初是ICQ,也稱網(wǎng)絡(luò)尋呼機(jī)。此類軟件使得人們可以運(yùn)用連上INTERNET網(wǎng)的電腦用戶可以隨時(shí)跟另外一個(gè)在線網(wǎng)民交談,甚至可以通過(guò)視頻看到對(duì)方的適時(shí)圖像。使人們不必?fù)?dān)心昂貴的話費(fèi)而暢快交流,并工作、交流兩不誤。</p>

27、<p>  2.1.1 聊天室系統(tǒng)的定義</p><p>  聊天時(shí)系統(tǒng)是通過(guò)即時(shí)通訊技術(shù)來(lái)實(shí)現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是C/S架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過(guò)程中需要下載安裝客戶端軟件,典型的代表有:QQ、百度HI 、Skype QQ VS GU、Gtalk、新浪UC、MSN等;2、采用B/S架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時(shí)通訊軟件,直接借助互聯(lián)網(wǎng)為媒介

28、、客戶端無(wú)需安裝任何軟件,既可以體驗(yàn)服務(wù)器端進(jìn)行溝通對(duì)話,一般運(yùn)用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表有Websitelive 、53KF、live800等。</p><p>  2.1.2 聊天室系統(tǒng)的任務(wù)及目的</p><p>  本系統(tǒng)主要通過(guò)客戶端,服務(wù)器端來(lái)體現(xiàn)聊天系統(tǒng)的基本功能。</p><p><b> ?。?)服務(wù)器端</b>&l

29、t;/p><p><b>  1.處理用戶注冊(cè)</b></p><p><b>  2.處理用戶登錄</b></p><p>  3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過(guò)濾非法內(nèi)容</p><p>  4.處理用戶得到信息</p><p><b>  5.處理

30、用戶退出</b></p><p><b>  8. 服務(wù)器踢人。</b></p><p>  9. 保存服務(wù)器日志。</p><p>  10.保存用戶聊天信息。</p><p><b> ?。?)客戶端</b></p><p>  1.用戶注冊(cè)界面及結(jié)果<

31、/p><p>  2.用戶登錄界面及結(jié)果</p><p>  3.用戶發(fā)送信息界面及結(jié)果</p><p>  4.用戶得到信息界面及結(jié)果</p><p>  5.用戶退出界面及結(jié)果</p><p>  2.2 主要聊天室系統(tǒng)介紹</p><p>  目前國(guó)內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國(guó)

32、內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國(guó)外有著名的MSN(新版改名為L(zhǎng)ive Messenger)以及跨平臺(tái)Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開(kāi)發(fā)聊天系統(tǒng)的準(zhǔn)備。</p><p>  騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的時(shí)常占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)QQ的

33、不斷創(chuàng)新和完善是分不開(kāi)的。</p><p>  參考了許多網(wǎng)絡(luò)上的資料,以及自己通過(guò)觀察騰訊QQ運(yùn)行時(shí)的各種細(xì)節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個(gè)客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。</p><p><b>  其模型如圖1-1</b></p><p>  圖1-

34、1 騰訊QQ服務(wù)器-客戶端模型1</p><p>  與騰訊QQ不同,微軟的MSN Messenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過(guò)與服務(wù)器的TCP連接進(jìn)行中轉(zhuǎn)通信。</p><p><b>  其模型如圖1-2</b></p><p>  圖1-2 MSN服務(wù)器-客戶端模型2</p>

35、<p>  騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實(shí)現(xiàn)復(fù)雜度都較高。而MSN Messenger所有數(shù)據(jù)都要經(jīng)過(guò)服務(wù)器,服務(wù)器壓力可想而知(難怪平時(shí)很少見(jiàn)到使用MSN進(jìn)行語(yǔ)音視頻聊天的)。</p><p><b>  。</b></p><p><b>  2.3 本章小結(jié)</b&g

36、t;</p><p>  這一章介紹了當(dāng)前聊天室系統(tǒng)應(yīng)該具備的功能模塊,并提供了市面上比較流行的聊天室系統(tǒng)作為參考。在這一章中,我們可以了解什么是聊天室系統(tǒng),當(dāng)前聊天室系統(tǒng)的市場(chǎng)需求,還有一個(gè)聊天室系統(tǒng)應(yīng)該的開(kāi)發(fā)目標(biāo)。</p><p>  第3章 聊天室系統(tǒng)的設(shè)計(jì)</p><p>  這一章是聊天室系統(tǒng)的設(shè)計(jì),從系統(tǒng)需求分析開(kāi)始,介紹開(kāi)發(fā)環(huán)境和用到的開(kāi)發(fā)工具,系統(tǒng)主

37、要的功能設(shè)計(jì),系統(tǒng)的數(shù)據(jù)流程圖。</p><p>  3.1 系統(tǒng)需求分析</p><p>  聊天室的設(shè)計(jì)目標(biāo):通過(guò)做鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類庫(kù)的應(yīng)用,用JAVA實(shí)現(xiàn)基于C/S模式的聊天室系統(tǒng)。</p><p>  3.2 系統(tǒng)開(kāi)發(fā)及運(yùn)行環(huán)境</p><p

38、><b>  硬件平臺(tái):</b></p><p>  CPU:Pentium 2.8GHz以上。</p><p>  內(nèi)存:256MB以上。</p><p><b>  軟件平臺(tái):</b></p><p>  操作系統(tǒng):Windows XP。</p><p>  運(yùn)行

39、環(huán)境:JDK Version1.6 JCreator。 </p><p>  3.3 系統(tǒng)主要功能要求</p><p>  本系統(tǒng)針對(duì)局域網(wǎng)進(jìn)行聯(lián)機(jī)聊天。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。本系統(tǒng)主要實(shí)現(xiàn)如下功

40、能:</p><p><b>  服務(wù)器:</b></p><p>  在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。</p><p>  用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。</p><p>  向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b>  統(tǒng)計(jì)在線人數(shù)

41、。</b></p><p>  當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。</p><p>  系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。</p><p>  一臺(tái)主機(jī)只能啟動(dòng)一個(gè)服務(wù)器。</p><p><b>  客戶端:</b></p><p>  連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。</p>

42、<p>  用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。</p><p>  用戶可以配置連接后顯示的用戶名。</p><p>  用戶可以更改聊天時(shí)的表情。</p><p>  當(dāng)服務(wù)器端開(kāi)啟后,用戶可以隨時(shí)登錄和注銷。</p><p>  用戶可以向所有人或某一個(gè)人發(fā)送消息。</p><p>  系

43、統(tǒng)運(yùn)行穩(wěn)定、安全可靠。</p><p>  可以默認(rèn)連接到自己主機(jī)啟動(dòng)的服務(wù)器。</p><p>  3.4 系統(tǒng)模塊化分析</p><p>  3.4.1 聊天室系統(tǒng)總體結(jié)構(gòu)</p><p>  主要功能框架如下圖所示:</p><p>  各功能模塊實(shí)現(xiàn)的功能為:</p><p><b

44、>  服務(wù)器:</b></p><p>  端口設(shè)置:設(shè)置傾聽(tīng)的端口號(hào),默認(rèn)為8888。</p><p>  啟動(dòng)服務(wù):開(kāi)啟傾聽(tīng)端口,允許客戶端連接。</p><p>  系統(tǒng)消息:服務(wù)器啟動(dòng)后可以在聊天室內(nèi)發(fā)送消息。</p><p>  停止服務(wù):關(guān)閉傾聽(tīng)端口,中斷所有客戶端的連接。</p><p>

45、;<b>  退出:關(guān)閉服務(wù)器。</b></p><p><b>  客戶端:</b></p><p>  用戶設(shè)置:設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過(guò)客。</p><p>  連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機(jī)的IP地址和傾聽(tīng)端口。</p><p><b>  登錄:連接服務(wù)器。<

46、;/b></p><p>  發(fā)送消息:進(jìn)行聊天,可單獨(dú)發(fā)送消息給聊天室中的一個(gè)人。</p><p>  注銷:與服務(wù)器斷開(kāi)連接。</p><p><b>  退出:關(guān)閉客戶端。</b></p><p>  3.4.2 聊天室系統(tǒng)各模塊介紹</p><p>  服務(wù)器包含服務(wù)、幫助、聊天三大

47、模塊,其中服務(wù)模塊包含端口設(shè)置、啟動(dòng)服務(wù)、停止服務(wù)和退出四個(gè)小模塊</p><p>  聊天模塊可以向聊天室內(nèi)所有人或個(gè)人發(fā)送系統(tǒng)消息或以管理員身份與其他人聊天</p><p>  表3-1 服務(wù)器各模塊名稱功能匯總表</p><p>  客戶端包含操作、設(shè)置、幫助、聊天四大模塊,其中操作包含用戶登錄、用戶注銷和退出三個(gè)小模塊,設(shè)置包含用戶設(shè)置和連接設(shè)置兩個(gè)小模

48、塊聊天模塊除 具備普通聊天功能外,還能進(jìn)行聊天時(shí)的表情選擇</p><p>  表3-2 客戶端各模塊名稱功能匯總表</p><p>  3.5 系統(tǒng)數(shù)據(jù)流圖</p><p><b>  系統(tǒng)數(shù)據(jù)流圖</b></p><p><b>  3.6 本章小結(jié)</b></p><

49、;p>  本章是聊天室系統(tǒng)的具體設(shè)計(jì)過(guò)程,有具體的需求分析、系統(tǒng)功能模塊、系統(tǒng)數(shù)據(jù)流圖。這里我們開(kāi)始接觸聊天室系統(tǒng)開(kāi)發(fā)的最初步驟,也是很重要的一步。</p><p>  第4章 系統(tǒng)的具體實(shí)現(xiàn)</p><p>  界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計(jì)的質(zhì)量, 并在很大程度上決定了軟件是否成功。</p><p><b>  4.1

50、界面設(shè)計(jì)</b></p><p>  4.1.1服務(wù)器啟動(dòng)界面圖</p><p>  4.1.2服務(wù)器啟動(dòng)成功界面圖</p><p>  4.1.3客戶端界面圖</p><p>  4.1.4用戶設(shè)置界面圖</p><p>  4.1.5用戶成功登錄界面圖</p><p>  4.1

51、.6兩人私聊界面圖</p><p>  4.1.7多人群聊界面圖</p><p>  4.2程序設(shè)計(jì)及調(diào)試運(yùn)行</p><p>  利用JCreator“一次編寫(xiě),各處運(yùn)行”的編程優(yōu)點(diǎn),按功能模塊結(jié)構(gòu)設(shè)計(jì)菜單,布置各明細(xì)模塊工作界面,編寫(xiě)各個(gè)模塊的程序代碼,進(jìn)行編譯連接運(yùn)行,經(jīng)過(guò)反復(fù)調(diào)試修改,以達(dá)到系統(tǒng)功能要求。這個(gè)過(guò)程具有大量的工作量,應(yīng)仔細(xì)對(duì)每個(gè)程序細(xì)節(jié)進(jìn)行分析

52、思考、編寫(xiě)程序并調(diào)試,做到程序簡(jiǎn)潔清楚,盡量避免可能潛在的程序錯(cuò)誤,并在必要的地方加以注釋,以便于程序閱讀和修改。</p><p>  4.2.1 程序調(diào)試(以服務(wù)器為例) </p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import jav

53、ax.swing.*;</p><p>  import javax.swing.event.*;</p><p>  import java.net.*;</p><p>  import java.io.*;</p><p><b>  /*</b></p><p>  * 聊天服務(wù)端的主框架

54、類</p><p><b>  */</b></p><p>  public class ChatServer extends JFrame implements ActionListener{</p><p>  public static int port = 8888;//服務(wù)端的偵聽(tīng)端口</p><p>  S

55、erverSocket serverSocket;//服務(wù)端Socket</p><p>  Image icon;//程序圖標(biāo)</p><p>  JComboBox combobox;//選擇發(fā)送消息的接受者</p><p>  JTextArea messageShow;//服務(wù)端的信息顯示</p><p>  JScrollPane

56、messageScrollPane;//信息顯示的滾動(dòng)條</p><p>  JTextField showStatus;//顯示用戶連接狀態(tài)</p><p>  JLabel sendToLabel,messageLabel;</p><p>  JTextField sysMessage;//服務(wù)端消息的發(fā)送</p><p>  JBut

57、ton sysMessageButton;//服務(wù)端消息的發(fā)送按鈕</p><p>  UserLinkList userLinkList;//用戶鏈表</p><p><b>  //建立菜單欄</b></p><p>  JMenuBar jMenuBar = new JMenuBar(); </p><p><

58、;b>  //建立菜單組</b></p><p>  JMenu serviceMenu = new JMenu ("服務(wù)(V)"); </p><p><b>  //建立菜單項(xiàng)</b></p><p>  JMenuItem portItem = new JMenuItem ("端口設(shè)置(P)

59、");</p><p>  JMenuItem startItem = new JMenuItem ("啟動(dòng)服務(wù)(S)");</p><p>  JMenuItem stopItem=new JMenuItem ("停止服務(wù)(T)");</p><p>  JMenuItem exitItem=new JMenuIt

60、em ("退出(X)");</p><p>  JMenu helpMenu=new JMenu ("幫助(H)");</p><p>  JMenuItem helpItem=new JMenuItem ("幫助(H)");</p><p><b>  //建立工具欄</b><

61、/p><p>  JToolBar toolBar = new JToolBar();</p><p>  //建立工具欄中的按鈕組件</p><p>  JButton portSet;//啟動(dòng)服務(wù)端偵聽(tīng)</p><p>  JButton startServer;//啟動(dòng)服務(wù)端偵聽(tīng)</p><p>  JButton

62、stopServer;//關(guān)閉服務(wù)端偵聽(tīng)</p><p>  JButton exitButton;//退出按鈕</p><p><b>  //框架的大小</b></p><p>  Dimension faceSize = new Dimension(400, 600);</p><p>  ServerListen

63、 listenThread;</p><p>  JPanel downPanel ;</p><p>  GridBagLayout girdBag;</p><p>  GridBagConstraints girdBagCon;</p><p><b>  /**</b></p><p>&

64、lt;b>  * 服務(wù)端構(gòu)造函數(shù)</b></p><p><b>  */</b></p><p>  public ChatServer(){</p><p>  init();//初始化程序</p><p>  //添加框架的關(guān)閉事件處理</p><p>  this.set

65、DefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  this.pack();</p><p><b>  //設(shè)置框架的大小</b></p><p>  this.setSize(faceSize);</p><p>  //設(shè)置運(yùn)行時(shí)窗口的位置</p>

66、;<p>  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();</p><p>  this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,</p><p>  (int) (screenSize.height

67、 - faceSize.getHeight()) / 2);</p><p>  this.setResizable(false);</p><p>  this.setTitle("聊天室服務(wù)端"); //設(shè)置標(biāo)題</p><p><b>  //程序圖標(biāo)</b></p><p>  icon =

68、getImage("icon.gif");</p><p>  this.setIconImage(icon); //設(shè)置程序圖標(biāo)</p><p><b>  show();</b></p><p>  //為服務(wù)菜單欄設(shè)置熱鍵'V'</p><p>  serviceMenu.set

69、Mnemonic('V');</p><p>  //為端口設(shè)置快捷鍵為ctrl+p</p><p>  portItem.setMnemonic ('P'); </p><p>  portItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CT

70、RL_MASK));</p><p>  //為啟動(dòng)服務(wù)快捷鍵為ctrl+s</p><p>  startItem.setMnemonic ('S'); </p><p>  startItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK));

71、</p><p>  //為端口設(shè)置快捷鍵為ctrl+T</p><p>  stopItem.setMnemonic ('T'); </p><p>  stopItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK));</p>

72、<p>  //為退出設(shè)置快捷鍵為ctrl+x</p><p>  exitItem.setMnemonic ('X'); </p><p>  exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK));</p><p>  /

73、/為幫助菜單欄設(shè)置熱鍵'H'</p><p>  helpMenu.setMnemonic('H');</p><p>  //為幫助設(shè)置快捷鍵為ctrl+p</p><p>  helpItem.setMnemonic ('H'); </p><p>  helpItem.setAcceler

74、ator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK));</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 程序初始化函數(shù)</b></p>&l

75、t;p><b>  */</b></p><p>  public void init(){</p><p>  Container contentPane = getContentPane();</p><p>  contentPane.setLayout(new BorderLayout());</p><p&g

76、t;<b>  //添加菜單欄</b></p><p>  serviceMenu.add (portItem);</p><p>  serviceMenu.add (startItem);</p><p>  serviceMenu.add (stopItem);</p><p>  serviceMenu.add

77、(exitItem);</p><p>  jMenuBar.add (serviceMenu); </p><p>  helpMenu.add (helpItem);</p><p>  jMenuBar.add (helpMenu); </p><p>  setJMenuBar (jMenuBar);</p><p

78、><b>  //初始化按鈕</b></p><p>  portSet = new JButton("端口設(shè)置");</p><p>  startServer = new JButton("啟動(dòng)服務(wù)");</p><p>  stopServer = new JButton("停止服務(wù)

79、" );</p><p>  exitButton = new JButton("退出" );</p><p>  //將按鈕添加到工具欄</p><p>  toolBar.add(portSet);</p><p>  toolBar.addSeparator();//添加分隔欄</p><

80、;p>  toolBar.add(startServer);</p><p>  toolBar.add(stopServer);</p><p>  toolBar.addSeparator();//添加分隔欄</p><p>  toolBar.add(exitButton);</p><p>  contentPane.add(t

81、oolBar,BorderLayout.NORTH);</p><p>  //初始時(shí),令停止服務(wù)按鈕不可用</p><p>  stopServer.setEnabled(false);</p><p>  stopItem .setEnabled(false);</p><p>  //為菜單欄添加事件監(jiān)聽(tīng)</p><

82、p>  portItem.addActionListener(this);</p><p>  startItem.addActionListener(this);</p><p>  stopItem.addActionListener(this);</p><p>  exitItem.addActionListener(this);</p>

83、<p>  helpItem.addActionListener(this);</p><p>  //添加按鈕的事件偵聽(tīng)</p><p>  portSet.addActionListener(this);</p><p>  startServer.addActionListener(this);</p><p>  stop

84、Server.addActionListener(this);</p><p>  exitButton.addActionListener(this);</p><p>  combobox = new JComboBox();</p><p>  combobox.insertItemAt("所有人",0);</p><p

85、>  combobox.setSelectedIndex(0);</p><p>  messageShow = new JTextArea();</p><p>  messageShow.setEditable(false);</p><p><b>  //添加滾動(dòng)條</b></p><p>  messag

86、eScrollPane = new JScrollPane(messageShow,</p><p>  JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,</p><p>  JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);</p><p>  messageScrollPane.setPre

87、ferredSize(new Dimension(400,400));</p><p>  messageScrollPane.revalidate();</p><p>  showStatus = new JTextField(35);</p><p>  showStatus.setEditable(false);</p><p>  

88、sysMessage = new JTextField(24);</p><p>  sysMessage.setEnabled(false);</p><p>  sysMessageButton = new JButton();</p><p>  sysMessageButton.setText("發(fā)送");</p><

89、p>  //添加系統(tǒng)消息的事件偵聽(tīng)</p><p>  sysMessage.addActionListener(this);</p><p>  sysMessageButton.addActionListener(this);</p><p>  sendToLabel = new JLabel("發(fā)送至:");</p>

90、<p>  messageLabel = new JLabel("發(fā)送消息:");</p><p>  downPanel = new JPanel();</p><p>  girdBag = new GridBagLayout();</p><p>  downPanel.setLayout(girdBag);</p>

91、<p>  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx = 0;</p><p>  girdBagCon.gridy = 0;</p><p>  girdBagCon.gridwidth = 3;</p><p>  girdBagCon.

92、gridheight = 2;</p><p>  girdBagCon.ipadx = 5;</p><p>  girdBagCon.ipady = 5;</p><p>  JLabel none = new JLabel(" ");</p><p>  girdBag.setConstraints(none,

93、girdBagCon);</p><p>  downPanel.add(none);</p><p>  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx = 0;</p><p>  girdBagCon.gridy = 2;</p><

94、p>  girdBagCon.insets = new Insets(1,0,0,0);</p><p>  girdBagCon.ipadx = 5;</p><p>  girdBagCon.ipady = 5;</p><p>  girdBag.setConstraints(sendToLabel,girdBagCon);</p><

95、;p>  downPanel.add(sendToLabel);</p><p>  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx =1;</p><p>  girdBagCon.gridy = 2;</p><p>  girdBagCon.anc

96、hor = GridBagConstraints.LINE_START;</p><p>  girdBag.setConstraints(combobox,girdBagCon);</p><p>  downPanel.add(combobox);</p><p>  girdBagCon = new GridBagConstraints();</p>

97、;<p>  girdBagCon.gridx = 0;</p><p>  girdBagCon.gridy = 3;</p><p>  girdBag.setConstraints(messageLabel,girdBagCon);</p><p>  downPanel.add(messageLabel);</p><p&g

98、t;  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx = 1;</p><p>  girdBagCon.gridy = 3;</p><p>  girdBag.setConstraints(sysMessage,girdBagCon);</p><p>

99、  downPanel.add(sysMessage);</p><p>  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx = 2;</p><p>  girdBagCon.gridy = 3;</p><p>  girdBag.setConstrain

100、ts(sysMessageButton,girdBagCon);</p><p>  downPanel.add(sysMessageButton);</p><p>  girdBagCon = new GridBagConstraints();</p><p>  girdBagCon.gridx = 0;</p><p>  girdB

101、agCon.gridy = 4;</p><p>  girdBagCon.gridwidth = 3;</p><p>  girdBag.setConstraints(showStatus,girdBagCon);</p><p>  downPanel.add(showStatus);</p><p>  contentPane.add

102、(messageScrollPane,BorderLayout.CENTER);</p><p>  contentPane.add(downPanel,BorderLayout.SOUTH);</p><p>  //關(guān)閉程序時(shí)的操作</p><p>  this.addWindowListener(</p><p>  new Windo

103、wAdapter(){</p><p>  public void windowClosing(WindowEvent e){</p><p>  stopService();</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b&

104、gt;  }</b></p><p><b>  );</b></p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 事件處理</b></p><p><

105、;b>  */</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  Object obj = e.getSource();</p><p>  if (obj == startServer || obj == startItem) { //啟動(dòng)服務(wù)端</p&

106、gt;<p>  startService();</p><p><b>  }</b></p><p>  else if (obj == stopServer || obj == stopItem) { //停止服務(wù)端</p><p>  int j=JOptionPane.showConfirmDialog(</p&g

107、t;<p>  this,"真的停止服務(wù)嗎?","停止服務(wù)",</p><p>  JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);</p><p>  if (j == JOptionPane.YES_OPTION){</p><p>  stopSer

108、vice();</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (obj == portSet || obj == portItem) { //端口設(shè)置</p><p>  //調(diào)出端口設(shè)置的對(duì)話框</p><p

109、>  PortConf portConf = new PortConf(this);</p><p>  portConf.show();</p><p><b>  }</b></p><p>  else if (obj == exitButton || obj == exitItem) { //退出程序</p><

110、;p>  int j=JOptionPane.showConfirmDialog(</p><p>  this,"真的要退出嗎?","退出",</p><p>  JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);</p><p>  if (j == JOpti

111、onPane.YES_OPTION){</p><p>  stopService();</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if (obj == h

112、elpItem) { //菜單欄中的幫助</p><p><b>  //調(diào)出幫助對(duì)話框</b></p><p>  Help helpDialog = new Help(this);</p><p>  helpDialog.show();</p><p><b>  }</b></p>

113、;<p>  else if (obj == sysMessage || obj == sysMessageButton) { //發(fā)送系統(tǒng)消息</p><p>  sendSystemMessage();</p><p><b>  }</b></p><p><b>  }</b></p>

114、<p><b>  /**</b></p><p><b>  * 啟動(dòng)服務(wù)端</b></p><p><b>  */</b></p><p>  public void startService(){</p><p><b>  try{</b&g

115、t;</p><p>  serverSocket = new ServerSocket(port,10);</p><p>  messageShow.append("服務(wù)端已經(jīng)啟動(dòng),在"+port+"端口偵聽(tīng)...\n");</p><p>  startServer.setEnabled(false);</p>

116、;<p>  startItem.setEnabled(false);</p><p>  portSet.setEnabled(false);</p><p>  portItem.setEnabled(false);</p><p>  stopServer .setEnabled(true);</p><p>  stop

117、Item .setEnabled(true);</p><p>  sysMessage.setEnabled(true);</p><p><b>  }</b></p><p>  catch (Exception e){</p><p>  //System.out.println(e);</p>&

118、lt;p><b>  }</b></p><p>  userLinkList = new UserLinkList();</p><p>  listenThread = new ServerListen(serverSocket,combobox,</p><p>  messageShow,showStatus,userLinkLi

119、st);</p><p>  listenThread.start();</p><p><b> ?。?lt;/b></p><p><b>  /**</b></p><p><b>  * 關(guān)閉服務(wù)端</b></p><p><b>  */&

120、lt;/b></p><p>  4.2.2 JCreator</p><p>  Jcreator是一個(gè)用于Java程序設(shè)計(jì)的集成開(kāi)發(fā)環(huán)境,具有編輯、調(diào)試、運(yùn)行Java程序的功能。當(dāng)前最新版本是Jcreator3.10,它又分為L(zhǎng)E和Pro版本。LE版本功能上受到一些限制,是免費(fèi)版本。Pro版本功能最全,但這個(gè)版本是一個(gè)共享軟件。這個(gè)軟件比較小巧,對(duì)硬件要求不是很高,完全用C++寫(xiě)

121、的,速度快、效率高。具有語(yǔ)法著色、代碼自動(dòng)完成、代碼參數(shù)提示、工程向?qū)А㈩愊驅(qū)У裙δ?。第一次啟?dòng)時(shí)提示設(shè)置JavaJDK主目錄及JDKJavaDoc目錄,軟件自動(dòng)設(shè)置好類路徑、編譯器及解釋器路徑,還可以在幫助菜單中使用JDKHelp。</p><p><b>  4.3 本章小結(jié)</b></p><p>  本章介紹了系統(tǒng)的具體實(shí)現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要

122、用到的函數(shù)和主界面的框架設(shè)計(jì)。</p><p><b>  第5章 結(jié)束語(yǔ)</b></p><p>  本文討論了如何利用JAVA技術(shù)開(kāi)發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點(diǎn)。</p><p>  系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的

123、聊天室可以達(dá)到基本的聊天要求,具有較高的研究?jī)r(jià)值。</p><p>  系統(tǒng)具有目前聊天室的基本功能:包括支持語(yǔ)氣選擇,支持私聊,可以給所有聊友發(fā)公共信息,具有速度快,高穩(wěn)定性,占用系統(tǒng)資源少,用戶界面友好等特點(diǎn)。</p><p>  通過(guò)設(shè)計(jì),發(fā)現(xiàn)自己在理論研究和實(shí)際工作能力等方面都得到了提高,受益匪淺,同時(shí)在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時(shí)總結(jié)研究成果,這些無(wú)疑會(huì)對(duì)我今后的工作

124、和學(xué)習(xí)帶來(lái)很大的幫助。</p><p><b>  致謝</b></p><p><b>  附錄 源代碼</b></p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  impor

125、t javax.swing.*;</p><p>  import javax.swing.event.*;</p><p>  import java.net.*;</p><p>  import java.io.*;</p><p><b>  /*</b></p><p>  * 聊天服務(wù)

126、端的主框架類</p><p><b>  */</b></p><p>  public class ChatServer extends JFrame implements ActionListener{</p><p>  public static int port = 8888;//服務(wù)端的偵聽(tīng)端口</p><p&g

127、t;  ServerSocket serverSocket;//服務(wù)端Socket</p><p>  Image icon;//程序圖標(biāo)</p><p>  JComboBox combobox;//選擇發(fā)送消息的接受者</p><p>  JTextArea messageShow;//服務(wù)端的信息顯示</p><p>  JScroll

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論