Java課程設(shè)計聊天室(含代碼)_第1頁
Java課程設(shè)計聊天室(含代碼)_第2頁
Java課程設(shè)計聊天室(含代碼)_第3頁
Java課程設(shè)計聊天室(含代碼)_第4頁
Java課程設(shè)計聊天室(含代碼)_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、i java程序課程設(shè)計任務(wù)書程序課程設(shè)計任務(wù)書javajava聊天室的系統(tǒng)的設(shè)計與開發(fā)聊天室的系統(tǒng)的設(shè)計與開發(fā)1 主要內(nèi)容:主要內(nèi)容:用java實現(xiàn)基于c/s模式的聊天室系統(tǒng)。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負責(zé)偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實現(xiàn)正常的聊天功能。2.具體要求(包括技術(shù)要求等):具體要求(包括技術(shù)要求等):系統(tǒng)的功能要求:a.服務(wù)器端主要功能如下:1.在特定端口上進行偵聽,等待客戶端連接。2.用戶可以配置服務(wù)器端的偵聽端口,默認端口為8888。3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。4.統(tǒng)計在線人數(shù)。5.當(dāng)停止服務(wù)時,斷開所有的用戶連

2、接。b.客戶端的主要功能如下:1.連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。2.用戶可以配置要連接的服務(wù)器端的ip地址和端口號。3.用戶可以配置連接后顯示的用戶名。4.當(dāng)服務(wù)器端開啟的話,用戶可以隨時登錄和注銷。5.用戶可以向所有人或某一個人發(fā)送消息。學(xué)習(xí)并掌握一下技術(shù):學(xué)習(xí)并掌握一下技術(shù):java javabean 等等熟練使用一下開發(fā)工具:熟練使用一下開發(fā)工具:eclipse, jcreator 等等實現(xiàn)系統(tǒng)上訴的功能。實現(xiàn)系統(tǒng)上訴的功能。3.進度安排:進度安排:12月28日 12月29日:課程設(shè)計選題,查找參考資料 12月30日 1月1日: 完成系統(tǒng)設(shè)計1月2日 1月5日: 完成程序代碼的編寫1

3、月6日:系統(tǒng)測試與完善1月7日:完成課程設(shè)計報告,準備答辯4.4.主要參考文獻:主要參考文獻:1.張廣彬 孟紅蕊 張永寶.java課程設(shè)計(案例精編)m.清華大學(xué)出版社.2007年版ii摘要摘要在網(wǎng)絡(luò)越來越發(fā)達的今天,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,例如,國外的icq、國內(nèi)騰訊公司開發(fā)的oicq?;趈ava網(wǎng)絡(luò)編程的強大功能,本次畢業(yè)設(shè)計使用java編寫一個聊天系統(tǒng)。 一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機/服務(wù)器架構(gòu)模式通過java提供的soket類來連接客戶機和服務(wù)器并使客戶機和

4、服務(wù)器之間相互通信,由于聊天是多點對多點的而java提供的多線程功能用多線程可完成多點對多點的聊天,數(shù)據(jù)庫管理系統(tǒng)用sql server2000完成并通過jdbc-odbc橋訪問數(shù)據(jù)庫。本系統(tǒng)建立在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ù),可以在單個程序當(dāng)中同時運行多個不同的線程,執(zhí)行不同的任務(wù)。大大增強了程序?qū)Ψ?wù)器資源的利用。聊天系統(tǒng)完成后將可進行多人對多人的聊天,對好友進行添加、刪除,對新

5、用戶的注冊,發(fā)送消息、接受消息等等功能。關(guān)鍵詞關(guān)鍵詞:多線程 ;客戶機/服務(wù)器 ;java ; socket ; eclipse ; tcp/ipiii目目 錄錄java程序課程設(shè)計任務(wù)書程序課程設(shè)計任務(wù)書.ii摘要摘要 .iii目目 錄錄.iv第第1章章 引言引言.11.1 背景.11.2 課程設(shè)計內(nèi)容.11.3 任務(wù)分工.2第第2章章 聊天室系統(tǒng)聊天室系統(tǒng).32.1 聊天室系統(tǒng)概述.32.1.1 聊天室系統(tǒng)的定義.32.1.2 聊天室系統(tǒng)的任務(wù)及目的.32.2 主要聊天室系統(tǒng)介紹.42.3 本章小結(jié).5第第3章章 聊天室系統(tǒng)的設(shè)計聊天室系統(tǒng)的設(shè)計.63.1 系統(tǒng)需求分析.63.2 系統(tǒng)開發(fā)

6、及運行環(huán)境.63.3 系統(tǒng)主要功能要求.63.4 系統(tǒng)模塊化分析.73.4.1 聊天室系統(tǒng)總體結(jié)構(gòu).73.4.2 聊天室系統(tǒng)各模塊介紹.83.5 系統(tǒng)數(shù)據(jù)流圖.103.6 本章小結(jié).10第第4章章 系統(tǒng)的具體實現(xiàn)系統(tǒng)的具體實現(xiàn).114.1界面設(shè)計.114.1.1服務(wù)器啟動界面圖.114.1.2服務(wù)器啟動成功界面圖.12iv4.1.3客戶端界面圖.124.1.4用戶設(shè)置界面圖.134.1.5用戶成功登錄界面圖.134.1.6兩人私聊界面圖.144.1.7多人群聊界面圖.144.2程序設(shè)計及調(diào)試運行.144.2.1 程序調(diào)試(以服務(wù)器為例).154.2.2 jcreator.204.3 本章小結(jié).

7、21第第5章章 結(jié)束語結(jié)束語.22致謝致謝.23附錄附錄 源代碼源代碼.241第第1章章 引言引言1.11.1 背景背景當(dāng)今主流的聊天工具有qq,icq,msn messenger,yahoo messenger等,國內(nèi)最熱門的當(dāng)屬qq,騰訊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和全國多家尋呼臺、移

8、動通信公司有業(yè)務(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)鍵詞來查找,找到后可加入到通訊錄中。當(dāng)您的通訊錄中的網(wǎng)友在線時,qq中朋友的頭像就會顯示在線,根據(jù)提示就可以發(fā)送信息,如果對方登記了尋呼機或開通了gsm手機短消息,即使離線了,您也可及時將信息傳遞給您的好友。雖然以上這些軟件是免費的,并且功能越來越強大。但

9、是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒法脫離intenet使用的。為了能在一個沒有連接到intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個工具。1.21.2 課程設(shè)計內(nèi)容課程設(shè)計內(nèi)容實現(xiàn)的是局域網(wǎng)中的聊天功能,運行服務(wù)程序后,服務(wù)器創(chuàng)建成功,然后使服務(wù)器對某一個設(shè)定的端口處于監(jiān)聽狀態(tài),當(dāng)有客戶端請求建立連接時,服務(wù)器就可接受請求,建立連接!這樣服務(wù)器和客戶端就可相互發(fā)送消2息,實現(xiàn)聊天功能!系統(tǒng)的功能要求:a.服務(wù)器端主要功能如下:1.在特定端口上進行偵聽,等待客戶端連接。2.用戶可以配置服務(wù)器端的偵聽端

10、口,默認端口為8888。3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。4.統(tǒng)計在線人數(shù)。5.當(dāng)停止服務(wù)時,斷開所有的用戶連接。b.客戶端的主要功能如下:1.連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。2.用戶可以配置要連接的服務(wù)器端的ip地址和端口號。3.用戶可以配置連接后顯示的用戶名。4.當(dāng)服務(wù)器端開啟的話,用戶可以隨時登錄和注銷。5.用戶可以向所有人或某一個人發(fā)送消息1.31.3 任務(wù)分工任務(wù)分工3第第2章章 聊天室系統(tǒng)聊天室系統(tǒng)2.12.1 聊天室系統(tǒng)聊天室系統(tǒng)概述概述聊天室是一種基于互聯(lián)網(wǎng)的即時交流系統(tǒng),最初是icq,也稱網(wǎng)絡(luò)尋呼機。此類軟件使得人們可以運用連上internet網(wǎng)的電腦用戶可以隨時

11、跟另外一個在線網(wǎng)民交談,甚至可以通過視頻看到對方的適時圖像。使人們不必擔(dān)心昂貴的話費而暢快交流,并工作、交流兩不誤。2.1.1 聊天室系統(tǒng)的定義聊天室系統(tǒng)的定義聊天時系統(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)為媒介、客戶端無需安裝任何軟件,既可以體驗服務(wù)器端進行溝通對話,一般運用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表

12、有websitelive 、53kf、live800等。2.1.2 聊天室系統(tǒng)的任務(wù)及目的聊天室系統(tǒng)的任務(wù)及目的本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端1.處理用戶注冊2.處理用戶登錄3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(nèi)容4.處理用戶得到信息5.處理用戶退出8. 服務(wù)器踢人。9. 保存服務(wù)器日志。 10.保存用戶聊天信息。(2)客戶端 1.用戶注冊界面及結(jié)果42.用戶登錄界面及結(jié)果3.用戶發(fā)送信息界面及結(jié)果4.用戶得到信息界面及結(jié)果5.用戶退出界面及結(jié)果2.22.2 主要聊天室系統(tǒng)介紹主要聊天室系統(tǒng)介紹目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳

13、瑯滿目,國內(nèi)有諸如騰訊qq、新浪uc、網(wǎng)易泡泡等,國外有著名的msn(新版改名為live messenger)以及跨平臺gaim等。本人取最具代表性的qq和msn進行了一些研究,作為我開發(fā)聊天系統(tǒng)的準備。騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進入即時通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟msn的強大攻勢,騰訊qq的時常占有率依然穩(wěn)步增長。騰訊的成功與其對qq的不斷創(chuàng)新和完善是分不開的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊qq運行時的各種細節(jié)??梢源_定騰訊qq是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間udp直連通信的。并且在兩個客戶端之間

14、不能建立直連的情況下,才由服務(wù)器進行中轉(zhuǎn)通信。其模型如圖1-1圖1-1 騰訊qq服務(wù)器-客戶端模型1與騰訊qq不同,微軟的msn messenger只使用了tcp作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進行連接,然后通過與服務(wù)器的tcp連接進行中轉(zhuǎn)通信。5其模型如圖1-2圖1-2 msn服務(wù)器-客戶端模型2騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實現(xiàn)復(fù)雜度都較高。而msn messenger所有數(shù)據(jù)都要經(jīng)過服務(wù)器,服務(wù)器壓力可想而知(難怪平時很少見到使用msn進行語音視頻聊天的)。2.32.3 本章小結(jié)本章小結(jié)這一章介紹了當(dāng)前聊天室系統(tǒng)應(yīng)

15、該具備的功能模塊,并提供了市面上比較流行的聊天室系統(tǒng)作為參考。在這一章中,我們可以了解什么是聊天室系統(tǒng),當(dāng)前聊天室系統(tǒng)的市場需求,還有一個聊天室系統(tǒng)應(yīng)該的開發(fā)目標。6第第3章章 聊天室系統(tǒng)的設(shè)計聊天室系統(tǒng)的設(shè)計這一章是聊天室系統(tǒng)的設(shè)計,從系統(tǒng)需求分析開始,介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計,系統(tǒng)的數(shù)據(jù)流程圖。3.13.1 系統(tǒng)需求分析系統(tǒng)需求分析聊天室的設(shè)計目標:通過做鞏固所學(xué)java語言基本知識,增進java語言編輯基本功,掌握jdk、jcreator等開發(fā)工具的運用,拓寬常用類庫的應(yīng)用,用java實現(xiàn)基于c/s模式的聊天室系統(tǒng)。3.23.2 系統(tǒng)開發(fā)及運行環(huán)境系統(tǒng)開發(fā)及運行環(huán)

16、境硬件平臺:cpu:pentium 2.8ghz以上。內(nèi)存:256mb以上。軟件平臺:操作系統(tǒng):windows xp。運行環(huán)境:jdk version1.6 jcreator。 3.33.3 系統(tǒng)主要功能要求系統(tǒng)主要功能要求本系統(tǒng)針對局域網(wǎng)進行聯(lián)機聊天。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負責(zé)偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實現(xiàn)正常的聊天功能。本系統(tǒng)主要實現(xiàn)如下功能:服務(wù)器:在特定端口上進行偵聽,等待客戶端連接。用戶可以配置服務(wù)器端的偵聽端口,默認端口為8888。向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。統(tǒng)計在線人數(shù)。當(dāng)停止服務(wù)時,斷開所有的用戶連接。系統(tǒng)運行穩(wěn)

17、定、安全可靠。7一臺主機只能啟動一個服務(wù)器??蛻舳耍哼B接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。用戶可以配置要連接的服務(wù)器端的ip地址和端口號。用戶可以配置連接后顯示的用戶名。用戶可以更改聊天時的表情。當(dāng)服務(wù)器端開啟后,用戶可以隨時登錄和注銷。用戶可以向所有人或某一個人發(fā)送消息。系統(tǒng)運行穩(wěn)定、安全可靠??梢阅J連接到自己主機啟動的服務(wù)器。3.43.4 系統(tǒng)模塊化分析系統(tǒng)模塊化分析3.4.1 聊天室系統(tǒng)總體結(jié)構(gòu)聊天室系統(tǒng)總體結(jié)構(gòu)主要功能框架如下圖所示:服務(wù)器服務(wù)器端端口口設(shè)設(shè)置置啟啟動動服服務(wù)務(wù)系系統(tǒng)統(tǒng)消消息息停停止止服服務(wù)務(wù)退退出出客戶端客戶端用用戶戶設(shè)設(shè)置置注注銷銷登登錄錄發(fā)發(fā)送送消消息息連連接接設(shè)設(shè)

18、置置退退出出8各功能模塊實現(xiàn)的功能為:服務(wù)器:端口設(shè)置:設(shè)置傾聽的端口號,默認為8888。啟動服務(wù):開啟傾聽端口,允許客戶端連接。系統(tǒng)消息:服務(wù)器啟動后可以在聊天室內(nèi)發(fā)送消息。停止服務(wù):關(guān)閉傾聽端口,中斷所有客戶端的連接。退出:關(guān)閉服務(wù)器??蛻舳耍河脩粼O(shè)置:設(shè)置聊天時顯示的名稱,默認為匆匆過客。連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機的ip地址和傾聽端口。登錄:連接服務(wù)器。發(fā)送消息:進行聊天,可單獨發(fā)送消息給聊天室中的一個人。注銷:與服務(wù)器斷開連接。退出:關(guān)閉客戶端。3.4.2 聊天室系統(tǒng)各模塊介紹聊天室系統(tǒng)各模塊介紹服務(wù)器包含服務(wù)、幫助、聊天三大模塊,其服務(wù)器包含服務(wù)、幫助、聊天三大模塊,其中服

19、務(wù)模塊包含端口設(shè)置、啟動服務(wù)、停止中服務(wù)模塊包含端口設(shè)置、啟動服務(wù)、停止服務(wù)和退出四個小模塊服務(wù)和退出四個小模塊聊天模塊可以向聊天室內(nèi)聊天模塊可以向聊天室內(nèi)所有人或個人發(fā)送系統(tǒng)消所有人或個人發(fā)送系統(tǒng)消息或以管理員身份與其他息或以管理員身份與其他人聊天人聊天表表3-1 服務(wù)器各模塊名稱功能匯總表服務(wù)器各模塊名稱功能匯總表序號模塊名基本功能1端口設(shè)置設(shè)置傾聽的端口號,默認為8888。2啟動服務(wù)開啟傾聽端口,允許客戶端連接。93停止服務(wù)關(guān)閉傾聽端口,中斷所有客戶端的連接。4退出關(guān)閉服務(wù)器。5幫助顯示各個模塊的功能及操作方法。6發(fā)送向聊天室內(nèi)發(fā)送系統(tǒng)消息??蛻舳税僮?、設(shè)置、幫助、聊天四大客戶端包含

20、操作、設(shè)置、幫助、聊天四大模塊,其中操作包含用戶登錄、用戶注銷模塊,其中操作包含用戶登錄、用戶注銷和退出三個小模塊,設(shè)置包含用戶設(shè)置和和退出三個小模塊,設(shè)置包含用戶設(shè)置和連接設(shè)置兩個小模塊聊天模塊除連接設(shè)置兩個小模塊聊天模塊除 具備普通聊天功能外,還能進行聊天時的表情選擇具備普通聊天功能外,還能進行聊天時的表情選擇表表3-2 客戶端各模塊名稱功能匯總表客戶端各模塊名稱功能匯總表序號模塊名基本功能1用戶設(shè)置設(shè)置聊天時顯示的名稱,默認為匆匆過客。2連接設(shè)置設(shè)置要連接的服務(wù)器所在主機的ip地址和傾聽端口。3用戶登錄連接到服務(wù)器端。4用戶注銷與服務(wù)器斷開連接。5退出關(guān)閉客戶端。6發(fā)送發(fā)送聊天內(nèi)容7悄悄

21、話聊天內(nèi)容不會被服務(wù)器和說話對象以外的人看到103.53.5 系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖3.63.6 本章小結(jié)本章小結(jié)本章是聊天室系統(tǒng)的具體設(shè)計過程,有具體的需求分析、系統(tǒng)功能模塊、系統(tǒng)數(shù)據(jù)流圖。這里我們開始接觸聊天室系統(tǒng)開發(fā)的最初步驟,也是很重要的一步。服務(wù)器服務(wù)器客戶端客戶端a客戶端客戶端e客戶端客戶端d客戶端客戶端c客戶端客戶端b悄悄話11第第4章章 系統(tǒng)的具體實現(xiàn)系統(tǒng)的具體實現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計的質(zhì)量, 并在很大程度上決定了軟件是否成功。4.14.1界面設(shè)計界面設(shè)計4.1.1服務(wù)器啟動界面圖服務(wù)器啟動界面圖124.1.2服務(wù)

22、器啟動成功界面圖服務(wù)器啟動成功界面圖4.1.3客戶端界面圖客戶端界面圖134.1.4用戶設(shè)置界面圖用戶設(shè)置界面圖4.1.5用戶成功登錄界面圖用戶成功登錄界面圖144.1.6兩人私聊界面圖兩人私聊界面圖4.1.7多人群聊界面圖多人群聊界面圖4.24.2程序設(shè)計及調(diào)試運行程序設(shè)計及調(diào)試運行利用jcreator“一次編寫,各處運行”的編程優(yōu)點,按功能模塊結(jié)構(gòu)設(shè)計菜單,布置各明細模塊工作界面,編寫各個模塊的程序代碼,進行編譯連接運行,經(jīng)過反復(fù)調(diào)試修改,以達到系統(tǒng)功能要求。這個過程具有大量的工作量,應(yīng)仔細對每個程序細節(jié)進行分析思考、編寫程序并調(diào)試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要的

23、地方加以注釋,以便于程序閱讀和修改。154.2.1 程序調(diào)試(以服務(wù)器為例)程序調(diào)試(以服務(wù)器為例) import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* * 聊天服務(wù)端的主框架類 */public class chatserver extends jframe implements actionlistenerpublic static int port = 8888;/服務(wù)端的偵聽端口serversocke

24、t serversocket;/服務(wù)端socketimage icon;/程序圖標jcombobox combobox;/選擇發(fā)送消息的接受者jtextarea messageshow;/服務(wù)端的信息顯示jscrollpane messagescrollpane;/信息顯示的滾動條jtextfield showstatus;/顯示用戶連接狀態(tài)jlabel sendtolabel,messagelabel;jtextfield sysmessage;/服務(wù)端消息的發(fā)送jbutton sysmessagebutton;/服務(wù)端消息的發(fā)送按鈕userlinklist userlinklist;/用戶

25、鏈表/建立菜單欄jmenubar jmenubar = new jmenubar(); /建立菜單組jmenu servicemenu = new jmenu (服務(wù)(v); /建立菜單項jmenuitem portitem = new jmenuitem (端口設(shè)置(p);jmenuitem startitem = new jmenuitem (啟動服務(wù)(s);jmenuitem stopitem=new jmenuitem (停止服務(wù)(t);jmenuitem exititem=new jmenuitem (退出(x);jmenu helpmenu=new jmenu (幫助(h);jme

26、nuitem helpitem=new jmenuitem (幫助(h);/建立工具欄jtoolbar toolbar = new jtoolbar();/建立工具欄中的按鈕組件jbutton portset;/啟動服務(wù)端偵聽jbutton startserver;/啟動服務(wù)端偵聽jbutton stopserver;/關(guān)閉服務(wù)端偵聽jbutton exitbutton;/退出按鈕/框架的大小dimension facesize = new dimension(400, 600);serverlisten listenthread;jpanel downpanel ;gridbaglayout

27、 girdbag;16gridbagconstraints girdbagcon;/* * 服務(wù)端構(gòu)造函數(shù) */public chatserver()init();/初始化程序/添加框架的關(guān)閉事件處理this.setdefaultcloseoperation(jframe.exit_on_close);this.pack();/設(shè)置框架的大小this.setsize(facesize);/設(shè)置運行時窗口的位置dimension screensize = toolkit.getdefaulttoolkit().getscreensize();this.setlocation( (int) (sc

28、reensize.width - facesize.getwidth() / 2, (int) (screensize.height - facesize.getheight() / 2);this.setresizable(false);this.settitle(聊天室服務(wù)端); /設(shè)置標題/程序圖標icon = getimage(icon.gif);this.seticonimage(icon); /設(shè)置程序圖標show();/為服務(wù)菜單欄設(shè)置熱鍵vservicemenu.setmnemonic(v);/為端口設(shè)置快捷鍵為ctrl+pportitem.setmnemonic (p); p

29、ortitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_p,inputevent.ctrl_mask);/為啟動服務(wù)快捷鍵為ctrl+sstartitem.setmnemonic (s); startitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_s,inputevent.ctrl_mask);/為端口設(shè)置快捷鍵為ctrl+tstopitem.setmnemonic (t); stopitem.setaccelerator (keystroke.getkeystro

30、ke (keyevent.vk_t,inputevent.ctrl_mask);/為退出設(shè)置快捷鍵為ctrl+xexititem.setmnemonic (x); exititem.setaccelerator (keystroke.getkeystroke (keyevent.vk_x,inputevent.ctrl_mask);/為幫助菜單欄設(shè)置熱鍵hhelpmenu.setmnemonic(h);/為幫助設(shè)置快捷鍵為ctrl+phelpitem.setmnemonic (h); helpitem.setaccelerator (keystroke.getkeystroke (keyeve

31、nt.vk_h,inputevent.ctrl_mask);/* * 程序初始化函數(shù) */17public void init()container contentpane = getcontentpane();contentpane.setlayout(new borderlayout();/添加菜單欄servicemenu.add (portitem);servicemenu.add (startitem);servicemenu.add (stopitem);servicemenu.add (exititem);jmenubar.add (servicemenu); helpmenu.a

32、dd (helpitem);jmenubar.add (helpmenu); setjmenubar (jmenubar);/初始化按鈕portset = new jbutton(端口設(shè)置);startserver = new jbutton(啟動服務(wù));stopserver = new jbutton(停止服務(wù) );exitbutton = new jbutton(退出 );/將按鈕添加到工具欄toolbar.add(portset);toolbar.addseparator();/添加分隔欄toolbar.add(startserver);toolbar.add(stopserver);t

33、oolbar.addseparator();/添加分隔欄toolbar.add(exitbutton);contentpane.add(toolbar,borderlayout.north);/初始時,令停止服務(wù)按鈕不可用stopserver.setenabled(false);stopitem .setenabled(false);/為菜單欄添加事件監(jiān)聽portitem.addactionlistener(this);startitem.addactionlistener(this);stopitem.addactionlistener(this);exititem.addactionlis

34、tener(this);helpitem.addactionlistener(this);/添加按鈕的事件偵聽portset.addactionlistener(this);startserver.addactionlistener(this);stopserver.addactionlistener(this);exitbutton.addactionlistener(this); combobox = new jcombobox();combobox.insertitemat(所有人,0);combobox.setselectedindex(0);messageshow = new jte

35、xtarea();messageshow.seteditable(false);/添加滾動條messagescrollpane = new jscrollpane(messageshow,jscrollpane.vertical_scrollbar_as_needed,jscrollpane.horizontal_scrollbar_as_needed);messagescrollpane.setpreferredsize(new dimension(400,400);messagescrollpane.revalidate();18showstatus = new jtextfield(35

36、);showstatus.seteditable(false);sysmessage = new jtextfield(24);sysmessage.setenabled(false);sysmessagebutton = new jbutton();sysmessagebutton.settext(發(fā)送);/添加系統(tǒng)消息的事件偵聽sysmessage.addactionlistener(this);sysmessagebutton.addactionlistener(this);sendtolabel = new jlabel(發(fā)送至:);messagelabel = new jlabel(

37、發(fā)送消息:);downpanel = new jpanel();girdbag = new gridbaglayout();downpanel.setlayout(girdbag);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 0;girdbagcon.gridwidth = 3;girdbagcon.gridheight = 2;girdbagcon.ipadx = 5;girdbagcon.ipady = 5;jlabel none = new jlabel( );girdbag.

38、setconstraints(none,girdbagcon);downpanel.add(none);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 2;girdbagcon.insets = new insets(1,0,0,0);girdbagcon.ipadx = 5;girdbagcon.ipady = 5;girdbag.setconstraints(sendtolabel,girdbagcon);downpanel.add(sendtolabel);girdbagcon =

39、 new gridbagconstraints();girdbagcon.gridx =1;girdbagcon.gridy = 2;girdbagcon.anchor = gridbagconstraints.line_start;girdbag.setconstraints(combobox,girdbagcon);downpanel.add(combobox);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 3;girdbag.setconstraints(messagelabel

40、,girdbagcon);downpanel.add(messagelabel);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 1;girdbagcon.gridy = 3;girdbag.setconstraints(sysmessage,girdbagcon);downpanel.add(sysmessage);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 2;19girdbagcon.gridy = 3;girdbag.setconstraints(sy

41、smessagebutton,girdbagcon);downpanel.add(sysmessagebutton);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 4;girdbagcon.gridwidth = 3;girdbag.setconstraints(showstatus,girdbagcon);downpanel.add(showstatus);contentpane.add(messagescrollpane,borderlayout.center);contentpa

42、ne.add(downpanel,borderlayout.south);/關(guān)閉程序時的操作this.addwindowlistener(new windowadapter()public void windowclosing(windowevent e)stopservice();system.exit(0););/* * 事件處理 */public void actionperformed(actionevent e) object obj = e.getsource();if (obj = startserver | obj = startitem) /啟動服務(wù)端startservice

43、();else if (obj = stopserver | obj = stopitem) /停止服務(wù)端int j=joptionpane.showconfirmdialog(this,真的停止服務(wù)嗎?,停止服務(wù),joptionpane.yes_option,joptionpane.question_message);if (j = joptionpane.yes_option)stopservice();else if (obj = portset | obj = portitem) /端口設(shè)置/調(diào)出端口設(shè)置的對話框portconf portconf = new portconf(this

44、);portconf.show();else if (obj = exitbutton | obj = exititem) /退出程序int j=joptionpane.showconfirmdialog(this,真的要退出嗎?,退出,joptionpane.yes_option,joptionpane.question_message);if (j = joptionpane.yes_option)stopservice();system.exit(0);20else if (obj = helpitem) /菜單欄中的幫助/調(diào)出幫助對話框help helpdialog = new hel

45、p(this);helpdialog.show();else if (obj = sysmessage | obj = sysmessagebutton) /發(fā)送系統(tǒng)消息sendsystemmessage();/* * 啟動服務(wù)端 */public void startservice()tryserversocket = new serversocket(port,10);messageshow.append(服務(wù)端已經(jīng)啟動,在+port+端口偵聽.n);startserver.setenabled(false);startitem.setenabled(false);portset.sete

46、nabled(false);portitem.setenabled(false);stopserver .setenabled(true);stopitem .setenabled(true);sysmessage.setenabled(true);catch (exception e)/system.out.println(e);userlinklist = new userlinklist();listenthread = new serverlisten(serversocket,combobox,messageshow,showstatus,userlinklist);listenth

47、read.start();/* * 關(guān)閉服務(wù)端 */4.2.2 jcreatorjcreator是一個用于java程序設(shè)計的集成開發(fā)環(huán)境,具有編輯、調(diào)試、運行java程序的功能。當(dāng)前最新版本是jcreator3.10,它又分為le和pro版本。le版本功能上受到一些限制,是免費版本。pro版本功能最全,但這個版本是一個共享軟件。這個軟件比較小巧,對硬件要求不是很高,完全用c+寫的,速度快、效率高。具有語法著色、代碼自動完成、代碼參數(shù)提示、工程向?qū)?、類向?qū)У裙δ?。第一次啟動時提示設(shè)置javajdk主目錄及jdkjavadoc目錄,軟件自動設(shè)置好類路徑、編譯器及解釋器路徑,還可以在幫助菜單中使用j

48、dkhelp。214.34.3 本章小結(jié)本章小結(jié)本章介紹了系統(tǒng)的具體實現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要用到的函數(shù)和主界面的框架設(shè)計。22第第5章章 結(jié)束語結(jié)束語本文討論了如何利用java技術(shù)開發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點。系統(tǒng)著重研究并實現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的聊天室可以達到基本的聊天要求,具有較高的研究價值。系統(tǒng)具有目前聊天室的基本功能:包括支持語氣選擇,支持私聊,可以給所有聊友發(fā)公共信息,具有速度快,高穩(wěn)定性,占用系統(tǒng)資源少,用戶界面友好等特點。通過畢業(yè)設(shè)計,發(fā)現(xiàn)自己

49、在理論研究和實際工作能力等方面都得到了提高,受益匪淺,同時在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時總結(jié)研究成果,這些無疑會對我今后的工作和學(xué)習(xí)帶來很大的幫助。23致謝致謝24附錄附錄 源代碼源代碼import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* * 聊天服務(wù)端的主框架類 */public class chatserver extends jframe implements actionlistenerpu

50、blic static int port = 8888;/服務(wù)端的偵聽端口serversocket serversocket;/服務(wù)端socketimage icon;/程序圖標jcombobox combobox;/選擇發(fā)送消息的接受者jtextarea messageshow;/服務(wù)端的信息顯示jscrollpane messagescrollpane;/信息顯示的滾動條jtextfield showstatus;/顯示用戶連接狀態(tài)jlabel sendtolabel,messagelabel;jtextfield sysmessage;/服務(wù)端消息的發(fā)送jbutton sysmessag

51、ebutton;/服務(wù)端消息的發(fā)送按鈕userlinklist userlinklist;/用戶鏈表/建立菜單欄jmenubar jmenubar = new jmenubar(); /建立菜單組jmenu servicemenu = new jmenu (服務(wù)(v); /建立菜單項jmenuitem portitem = new jmenuitem (端口設(shè)置(p);jmenuitem startitem = new jmenuitem (啟動服務(wù)(s);jmenuitem stopitem=new jmenuitem (停止服務(wù)(t);jmenuitem exititem=new jmen

52、uitem (退出(x);jmenu helpmenu=new jmenu (幫助(h);jmenuitem helpitem=new jmenuitem (幫助(h);/建立工具欄jtoolbar toolbar = new jtoolbar();/建立工具欄中的按鈕組件jbutton portset;/啟動服務(wù)端偵聽jbutton startserver;/啟動服務(wù)端偵聽jbutton stopserver;/關(guān)閉服務(wù)端偵聽25jbutton exitbutton;/退出按鈕/框架的大小dimension facesize = new dimension(400, 600);serverl

53、isten listenthread;jpanel downpanel ;gridbaglayout girdbag;gridbagconstraints girdbagcon;/* * 服務(wù)端構(gòu)造函數(shù) */public chatserver()init();/初始化程序/添加框架的關(guān)閉事件處理this.setdefaultcloseoperation(jframe.exit_on_close);this.pack();/設(shè)置框架的大小this.setsize(facesize);/設(shè)置運行時窗口的位置dimension screensize = toolkit.getdefaulttoolk

54、it().getscreensize();this.setlocation( (int) (screensize.width - facesize.getwidth() / 2, (int) (screensize.height - facesize.getheight() / 2);this.setresizable(false);this.settitle(聊天室服務(wù)端); /設(shè)置標題/程序圖標icon = getimage(icon.gif);this.seticonimage(icon); /設(shè)置程序圖標show();/為服務(wù)菜單欄設(shè)置熱鍵vservicemenu.setmnemoni

55、c(v);/為端口設(shè)置快捷鍵為ctrl+pportitem.setmnemonic (p); portitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_p,inputevent.ctrl_mask);/為啟動服務(wù)快捷鍵為ctrl+sstartitem.setmnemonic (s); startitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_s,inputevent.ctrl_mask);/為端口設(shè)置快捷鍵為ctrl+tstopitem.setmnemonic (t

56、); stopitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_t,inputevent.ctrl_mask);/為退出設(shè)置快捷鍵為ctrl+xexititem.setmnemonic (x); exititem.setaccelerator (keystroke.getkeystroke (keyevent.vk_x,inputevent.ctrl_mask);/為幫助菜單欄設(shè)置熱鍵hhelpmenu.setmnemonic(h);/為幫助設(shè)置快捷鍵為ctrl+p26helpitem.setmnemonic (h); helpi

57、tem.setaccelerator (keystroke.getkeystroke (keyevent.vk_h,inputevent.ctrl_mask);/* * 程序初始化函數(shù) */public void init()container contentpane = getcontentpane();contentpane.setlayout(new borderlayout();/添加菜單欄servicemenu.add (portitem);servicemenu.add (startitem);servicemenu.add (stopitem);servicemenu.add (

58、exititem);jmenubar.add (servicemenu); helpmenu.add (helpitem);jmenubar.add (helpmenu); setjmenubar (jmenubar);/初始化按鈕portset = new jbutton(端口設(shè)置);startserver = new jbutton(啟動服務(wù));stopserver = new jbutton(停止服務(wù) );exitbutton = new jbutton(退出 );/將按鈕添加到工具欄toolbar.add(portset);toolbar.addseparator();/添加分隔欄to

59、olbar.add(startserver);toolbar.add(stopserver);toolbar.addseparator();/添加分隔欄toolbar.add(exitbutton);contentpane.add(toolbar,borderlayout.north);/初始時,令停止服務(wù)按鈕不可用stopserver.setenabled(false);stopitem .setenabled(false);/為菜單欄添加事件監(jiān)聽portitem.addactionlistener(this);startitem.addactionlistener(this);stopit

60、em.addactionlistener(this);exititem.addactionlistener(this);helpitem.addactionlistener(this);/添加按鈕的事件偵聽portset.addactionlistener(this);27startserver.addactionlistener(this);stopserver.addactionlistener(this);exitbutton.addactionlistener(this);combobox = new jcombobox();combobox.insertitemat(所有人,0);c

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論