版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> Java程序課程設(shè)計任務(wù)書</p><p> JAVA聊天室的系統(tǒng)的設(shè)計與開發(fā)</p><p><b> 主要內(nèi)容:</b></p><p> 用JAVA實現(xiàn)基于C/S模式的聊天室系統(tǒng)。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負責偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實現(xiàn)正常的聊天功能。<
2、;/p><p> 2.具體要求(包括技術(shù)要求等):</p><p><b> 系統(tǒng)的功能要求:</b></p><p> A.服務(wù)器端主要功能如下:</p><p> 1.在特定端口上進行偵聽,等待客戶端連接。</p><p> 2.用戶可以配置服務(wù)器端的偵聽端口,默認端口為8888。<
3、;/p><p> 3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b> 4.統(tǒng)計在線人數(shù)。</b></p><p> 5.當停止服務(wù)時,斷開所有的用戶連接。</p><p> B.客戶端的主要功能如下:</p><p> 1.連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。</p&
4、gt;<p> 2.用戶可以配置要連接的服務(wù)器端的IP地址和端口號。</p><p> 3.用戶可以配置連接后顯示的用戶名。</p><p> 4.當服務(wù)器端開啟的話,用戶可以隨時登錄和注銷。</p><p> 5.用戶可以向所有人或某一個人發(fā)送消息。</p><p> 學(xué)習(xí)并掌握一下技術(shù):Java JavaBea
5、n 等</p><p> 熟練使用一下開發(fā)工具:Eclipse, JCreator 等</p><p> 實現(xiàn)系統(tǒng)上述的功能。</p><p><b> 3.進度安排:</b></p><p> 5月20日 ~ 5月21日:課程設(shè)計選題,查找參考資料 </p><p> 5月22
6、日 ~ 5月23日: 完成系統(tǒng)設(shè)計</p><p> 5月24日 ~ 5月27日: 完成程序代碼的編寫</p><p> 5月28日:系統(tǒng)測試與完善</p><p> 5月29日:完成課程設(shè)計報告,準備答辯</p><p><b> 主要參考文獻:</b></p><p> [
7、1].張廣彬 孟紅蕊 張永寶.Java課程設(shè)計(案例精編)[M].清華大學(xué)出版社.2007年版</p><p><b> 摘要</b></p><p> 在網(wǎng)絡(luò)越來越發(fā)達的今天,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ?;贘ava網(wǎng)絡(luò)編程的強大功能,本次畢業(yè)設(shè)計使用Java編寫一個聊
8、天系統(tǒng)。 一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機/服務(wù)器架構(gòu)模式通過Java提供的Soket類來連接客戶機和服務(wù)器并使客戶機和服務(wù)器之間相互通信,由于聊天是多點對多點的而Java提供的多線程功能用多線程可完成多點對多點的聊天,數(shù)據(jù)庫管理系統(tǒng)用SQL Server2000完成并通過JDBC-ODBC橋訪問數(shù)據(jù)庫。</p><p> 本系統(tǒng)
9、建立在JAVA平臺上,系統(tǒng)的設(shè)計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務(wù)器端設(shè)計與實現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當中同時運行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強了程序?qū)Ψ?wù)器資源的利用。</p><p> 聊天系統(tǒng)完成后將可進行多人對多人的聊天,對好友進行添
10、加、刪除,對新用戶的注冊,發(fā)送消息、接受消息等等功能。</p><p> 關(guān)鍵詞:多線程 ;客戶機/服務(wù)器 ;JAVA ; Socket ; Eclipse ; TCP/IP</p><p><b> 目 錄</b></p><p> Java程序課程設(shè)計任務(wù)書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è)計內(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è)計6</p><p> 3.1 系統(tǒng)需求分析6</p><p> 3.2 系統(tǒng)開發(fā)及運行環(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)的具體實現(xiàn)11</p><p> 4.1界面設(shè)計11</p><p> 4.1
15、.1服務(wù)器啟動界面圖11</p><p> 4.1.2服務(wù)器啟動成功界面圖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è)計及調(diào)試運行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é)束語22</p
17、><p><b> 致謝23</b></p><p> 附錄 源代碼24</p><p><b> 第1章 引言</b></p><p><b> 1.1 背景</b></p><p> 當今主流的聊天工具有QQ,ICQ,MSN Messen
18、ger,Yahoo Messenger等,國內(nèi)最熱門的當屬Q(mào)Q,騰訊QQ(OICQ)是由深圳市騰訊計算機系統(tǒng)公司開發(fā)的,基于Internet的即時尋呼軟件。您可以使用QQ和好友用戶進行交流,信息即時發(fā)送,即時回復(fù),收發(fā)及時、功能全面。此外QQ還具有BP機網(wǎng)上尋呼、聊天室、傳輸文件、語音郵件、手機短訊服務(wù)等功能,QQ不僅僅是虛擬的網(wǎng)絡(luò)尋呼機,更可與傳統(tǒng)的無線尋呼網(wǎng)、GSM移動電話的短消息系統(tǒng)互聯(lián),目前QQ和全國多家尋呼臺、移動通信公司有業(yè)
19、務(wù)合作。是國內(nèi)不可多得的中文網(wǎng)絡(luò)尋呼機。QQ支持顯示朋友在線信息、即時傳送信息、即時交談、即時發(fā)送文件和網(wǎng)址。QQ可以在Win95/98/NT/2000操作系統(tǒng)下運行,是十分靈活的網(wǎng)絡(luò)尋呼工具。它會自動檢查您是否已聯(lián)網(wǎng),如果您的電腦已連入Internet,可以搜索網(wǎng)友、顯示在線網(wǎng)友,可以根據(jù)QQ號、昵稱、姓名、email地址等關(guān)鍵詞來查找,找到后可加入到通訊錄中。當您的通訊錄中的網(wǎng)友在線時,QQ中朋友的頭像就會顯示在線,根據(jù)提示就可以發(fā)
20、送信息,如果對方登記了尋呼機或開通了GSM手機短消息,即使離線了,</p><p> 雖然以上這些軟件是免費的,并且功能越來越強大。但是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒法脫離Intenet使用的。為了能在一個沒有連接到Intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。</p><p> 本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個工具。
21、</p><p> 1.2 課程設(shè)計內(nèi)容</p><p> 實現(xiàn)的是局域網(wǎng)中的聊天功能,運行服務(wù)程序后,服務(wù)器創(chuàng)建成功,然后使服務(wù)器對某一個設(shè)定的端口處于監(jiān)聽狀態(tài),當有客戶端請求建立連接時,服務(wù)器就可接受請求,建立連接!這樣服務(wù)器和客戶端就可相互發(fā)送消息,實現(xiàn)聊天功能!</p><p><b> 系統(tǒng)的功能要求:</b></p>
22、;<p> A.服務(wù)器端主要功能如下:</p><p> 1.在特定端口上進行偵聽,等待客戶端連接。</p><p> 2.用戶可以配置服務(wù)器端的偵聽端口,默認端口為8888。</p><p> 3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b> 4.統(tǒng)計在線人數(shù)。</b>&l
23、t;/p><p> 5.當停止服務(wù)時,斷開所有的用戶連接。</p><p> B.客戶端的主要功能如下:</p><p> 1.連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。</p><p> 2.用戶可以配置要連接的服務(wù)器端的IP地址和端口號。</p><p> 3.用戶可以配置連接后顯示的用戶名。</p>
24、<p> 4.當服務(wù)器端開啟的話,用戶可以隨時登錄和注銷。</p><p> 5.用戶可以向所有人或某一個人發(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)的即時交流系統(tǒng),最初是ICQ,也稱網(wǎng)絡(luò)尋呼機。此類軟件使得人們可以運用連上INTERNET網(wǎng)的電腦用戶可以隨時跟另外一個在線網(wǎng)民交談,甚至可以通過視頻看到對方的適時圖像。使人們不必擔心昂貴的話費而暢快交流,并工作、交流兩不誤。</p>
27、<p> 2.1.1 聊天室系統(tǒng)的定義</p><p> 聊天時系統(tǒng)是通過即時通訊技術(shù)來實現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是C/S架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過程中需要下載安裝客戶端軟件,典型的代表有:QQ、百度HI 、Skype QQ VS GU、Gtalk、新浪UC、MSN等;2、采用B/S架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時通訊軟件,直接借助互聯(lián)網(wǎng)為媒介
28、、客戶端無需安裝任何軟件,既可以體驗服務(wù)器端進行溝通對話,一般運用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表有Websitelive 、53KF、live800等。</p><p> 2.1.2 聊天室系統(tǒng)的任務(wù)及目的</p><p> 本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。</p><p><b> (1)服務(wù)器端</b>&l
29、t;/p><p><b> 1.處理用戶注冊</b></p><p><b> 2.處理用戶登錄</b></p><p> 3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(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.用戶注冊界面及結(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> 目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國
32、內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為Live Messenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進行了一些研究,作為我開發(fā)聊天系統(tǒng)的準備。</p><p> 騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的
33、不斷創(chuàng)新和完善是分不開的。</p><p> 參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊QQ運行時的各種細節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務(wù)器進行中轉(zhuǎn)通信。</p><p><b> 其模型如圖1-1</b></p><p> 圖1-
34、1 騰訊QQ服務(wù)器-客戶端模型1</p><p> 與騰訊QQ不同,微軟的MSN Messenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進行連接,然后通過與服務(wù)器的TCP連接進行中轉(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é)議和實現(xiàn)復(fù)雜度都較高。而MSN Messenger所有數(shù)據(jù)都要經(jīng)過服務(wù)器,服務(wù)器壓力可想而知(難怪平時很少見到使用MSN進行語音視頻聊天的)。</p><p><b> 。</b></p><p><b> 2.3 本章小結(jié)</b&g
36、t;</p><p> 這一章介紹了當前聊天室系統(tǒng)應(yīng)該具備的功能模塊,并提供了市面上比較流行的聊天室系統(tǒng)作為參考。在這一章中,我們可以了解什么是聊天室系統(tǒng),當前聊天室系統(tǒng)的市場需求,還有一個聊天室系統(tǒng)應(yīng)該的開發(fā)目標。</p><p> 第3章 聊天室系統(tǒng)的設(shè)計</p><p> 這一章是聊天室系統(tǒng)的設(shè)計,從系統(tǒng)需求分析開始,介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主
37、要的功能設(shè)計,系統(tǒng)的數(shù)據(jù)流程圖。</p><p> 3.1 系統(tǒng)需求分析</p><p> 聊天室的設(shè)計目標:通過做鞏固所學(xué)Java語言基本知識,增進Java語言編輯基本功,掌握JDK、JCreator等開發(fā)工具的運用,拓寬常用類庫的應(yīng)用,用JAVA實現(xiàn)基于C/S模式的聊天室系統(tǒng)。</p><p> 3.2 系統(tǒng)開發(fā)及運行環(huán)境</p><p
38、><b> 硬件平臺:</b></p><p> CPU:Pentium 2.8GHz以上。</p><p> 內(nèi)存:256MB以上。</p><p><b> 軟件平臺:</b></p><p> 操作系統(tǒng):Windows XP。</p><p> 運行
39、環(huán)境:JDK Version1.6 JCreator。 </p><p> 3.3 系統(tǒng)主要功能要求</p><p> 本系統(tǒng)針對局域網(wǎng)進行聯(lián)機聊天。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負責偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實現(xiàn)正常的聊天功能。本系統(tǒng)主要實現(xiàn)如下功
40、能:</p><p><b> 服務(wù)器:</b></p><p> 在特定端口上進行偵聽,等待客戶端連接。</p><p> 用戶可以配置服務(wù)器端的偵聽端口,默認端口為8888。</p><p> 向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b> 統(tǒng)計在線人數(shù)
41、。</b></p><p> 當停止服務(wù)時,斷開所有的用戶連接。</p><p> 系統(tǒng)運行穩(wěn)定、安全可靠。</p><p> 一臺主機只能啟動一個服務(wù)器。</p><p><b> 客戶端:</b></p><p> 連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。</p>
42、<p> 用戶可以配置要連接的服務(wù)器端的IP地址和端口號。</p><p> 用戶可以配置連接后顯示的用戶名。</p><p> 用戶可以更改聊天時的表情。</p><p> 當服務(wù)器端開啟后,用戶可以隨時登錄和注銷。</p><p> 用戶可以向所有人或某一個人發(fā)送消息。</p><p> 系
43、統(tǒng)運行穩(wěn)定、安全可靠。</p><p> 可以默認連接到自己主機啟動的服務(wù)器。</p><p> 3.4 系統(tǒng)模塊化分析</p><p> 3.4.1 聊天室系統(tǒng)總體結(jié)構(gòu)</p><p> 主要功能框架如下圖所示:</p><p> 各功能模塊實現(xiàn)的功能為:</p><p><b
44、> 服務(wù)器:</b></p><p> 端口設(shè)置:設(shè)置傾聽的端口號,默認為8888。</p><p> 啟動服務(wù):開啟傾聽端口,允許客戶端連接。</p><p> 系統(tǒng)消息:服務(wù)器啟動后可以在聊天室內(nèi)發(fā)送消息。</p><p> 停止服務(wù):關(guān)閉傾聽端口,中斷所有客戶端的連接。</p><p>
45、;<b> 退出:關(guān)閉服務(wù)器。</b></p><p><b> 客戶端:</b></p><p> 用戶設(shè)置:設(shè)置聊天時顯示的名稱,默認為匆匆過客。</p><p> 連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機的IP地址和傾聽端口。</p><p><b> 登錄:連接服務(wù)器。<
46、;/b></p><p> 發(fā)送消息:進行聊天,可單獨發(fā)送消息給聊天室中的一個人。</p><p> 注銷:與服務(wù)器斷開連接。</p><p><b> 退出:關(guān)閉客戶端。</b></p><p> 3.4.2 聊天室系統(tǒng)各模塊介紹</p><p> 服務(wù)器包含服務(wù)、幫助、聊天三大
47、模塊,其中服務(wù)模塊包含端口設(shè)置、啟動服務(wù)、停止服務(wù)和退出四個小模塊</p><p> 聊天模塊可以向聊天室內(nèi)所有人或個人發(fā)送系統(tǒng)消息或以管理員身份與其他人聊天</p><p> 表3-1 服務(wù)器各模塊名稱功能匯總表</p><p> 客戶端包含操作、設(shè)置、幫助、聊天四大模塊,其中操作包含用戶登錄、用戶注銷和退出三個小模塊,設(shè)置包含用戶設(shè)置和連接設(shè)置兩個小模
48、塊聊天模塊除 具備普通聊天功能外,還能進行聊天時的表情選擇</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è)計過程,有具體的需求分析、系統(tǒng)功能模塊、系統(tǒng)數(shù)據(jù)流圖。這里我們開始接觸聊天室系統(tǒng)開發(fā)的最初步驟,也是很重要的一步。</p><p> 第4章 系統(tǒng)的具體實現(xiàn)</p><p> 界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計的質(zhì)量, 并在很大程度上決定了軟件是否成功。</p><p><b> 4.1
50、界面設(shè)計</b></p><p> 4.1.1服務(wù)器啟動界面圖</p><p> 4.1.2服務(wù)器啟動成功界面圖</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è)計及調(diào)試運行</p><p> 利用JCreator“一次編寫,各處運行”的編程優(yōu)點,按功能模塊結(jié)構(gòu)設(shè)計菜單,布置各明細模塊工作界面,編寫各個模塊的程序代碼,進行編譯連接運行,經(jīng)過反復(fù)調(diào)試修改,以達到系統(tǒng)功能要求。這個過程具有大量的工作量,應(yīng)仔細對每個程序細節(jié)進行分析
52、思考、編寫程序并調(diào)試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要的地方加以注釋,以便于程序閱讀和修改。</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ù)端的偵聽端口</p><p> S
55、erverSocket serverSocket;//服務(wù)端Socket</p><p> Image icon;//程序圖標</p><p> JComboBox combobox;//選擇發(fā)送消息的接受者</p><p> JTextArea messageShow;//服務(wù)端的信息顯示</p><p> JScrollPane
56、messageScrollPane;//信息顯示的滾動條</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> //建立菜單項</b></p><p> JMenuItem portItem = new JMenuItem ("端口設(shè)置(P)
59、");</p><p> JMenuItem startItem = new JMenuItem ("啟動服務(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;//啟動服務(wù)端偵聽</p><p> JButton startServer;//啟動服務(wù)端偵聽</p><p> JButton
62、stopServer;//關(guān)閉服務(wù)端偵聽</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è)置運行時窗口的位置</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è)置標題</p><p><b> //程序圖標</b></p><p> icon =
68、getImage("icon.gif");</p><p> this.setIconImage(icon); //設(shè)置程序圖標</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> //為啟動服務(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("啟動服務(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> //初始時,令停止服務(wù)按鈕不可用</p><p> stopServer.setEnabled(false);</p><p> stopItem .setEnabled(false);</p><p> //為菜單欄添加事件監(jiān)聽</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> //添加按鈕的事件偵聽</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> //添加滾動條</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)消息的事件偵聽</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)閉程序時的操作</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) { //啟動服務(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è)置的對話框</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)出幫助對話框</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> * 啟動服務(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)啟動,在"+port+"端口偵聽...\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是一個用于Java程序設(shè)計的集成開發(fā)環(huán)境,具有編輯、調(diào)試、運行Java程序的功能。當前最新版本是Jcreator3.10,它又分為LE和Pro版本。LE版本功能上受到一些限制,是免費版本。Pro版本功能最全,但這個版本是一個共享軟件。這個軟件比較小巧,對硬件要求不是很高,完全用C++寫
121、的,速度快、效率高。具有語法著色、代碼自動完成、代碼參數(shù)提示、工程向?qū)?、類向?qū)У裙δ堋5谝淮螁訒r提示設(shè)置JavaJDK主目錄及JDKJavaDoc目錄,軟件自動設(shè)置好類路徑、編譯器及解釋器路徑,還可以在幫助菜單中使用JDKHelp。</p><p><b> 4.3 本章小結(jié)</b></p><p> 本章介紹了系統(tǒng)的具體實現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要
122、用到的函數(shù)和主界面的框架設(shè)計。</p><p><b> 第5章 結(jié)束語</b></p><p> 本文討論了如何利用JAVA技術(shù)開發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點。</p><p> 系統(tǒng)著重研究并實現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的
123、聊天室可以達到基本的聊天要求,具有較高的研究價值。</p><p> 系統(tǒng)具有目前聊天室的基本功能:包括支持語氣選擇,支持私聊,可以給所有聊友發(fā)公共信息,具有速度快,高穩(wěn)定性,占用系統(tǒng)資源少,用戶界面友好等特點。</p><p> 通過設(shè)計,發(fā)現(xiàn)自己在理論研究和實際工作能力等方面都得到了提高,受益匪淺,同時在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時總結(jié)研究成果,這些無疑會對我今后的工作
124、和學(xué)習(xí)帶來很大的幫助。</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ù)端的偵聽端口</p><p&g
127、t; ServerSocket serverSocket;//服務(wù)端Socket</p><p> Image icon;//程序圖標</p><p> JComboBox combobox;//選擇發(fā)送消息的接受者</p><p> JTextArea messageShow;//服務(wù)端的信息顯示</p><p> JScroll
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計---java聊天室的系統(tǒng)的設(shè)計與開發(fā)(含代碼)
- Java課程設(shè)計---JAVA聊天室的系統(tǒng)的設(shè)計與開發(fā)(含代碼).doc
- java課程設(shè)計---java聊天室的系統(tǒng)的設(shè)計與開發(fā)
- java課程設(shè)計---聊天室系統(tǒng)
- java課程設(shè)計--聊天室系統(tǒng)
- java網(wǎng)絡(luò)聊天室課程設(shè)計
- java課程設(shè)計之簡單聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計-java聊天室
- java課程設(shè)計報告---利用java實現(xiàn)簡單聊天室
- java網(wǎng)絡(luò)聊天室畢業(yè)課程設(shè)計報告(內(nèi)附代碼)
- java聊天室設(shè)計
- java聊天室系統(tǒng)的設(shè)計與實現(xiàn)
- java聊天室的設(shè)計與實現(xiàn)
- 基于java聊天室系統(tǒng)的設(shè)計與實現(xiàn)——課程論文
- java聊天室程序(java)
- Java聊天室的設(shè)計與實現(xiàn).doc
- 基于java聊天室設(shè)計與實現(xiàn)
- java網(wǎng)絡(luò)聊天室課程設(shè)計說明書(含源程序)
- 基于java網(wǎng)絡(luò)聊天室設(shè)計
- java聊天室的設(shè)計與實現(xiàn) 開題報告
評論
0/150
提交評論