版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java程序課程設(shè)計(jì)任務(wù)書JAVAM天室的系統(tǒng)的設(shè)計(jì)與開發(fā)1. 主要內(nèi)容:用JAVA實(shí)現(xiàn)基于C/S模式的聊天室系統(tǒng)。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。2. 具體要求(包括技術(shù)要求等):系統(tǒng)的功能要求:A. 服務(wù)器端主要功能如下:1. 在特定端口上進(jìn)行偵聽,等待客戶端連接。2. 用戶可以配置服務(wù)器端的偵聽端口,默認(rèn)端口為8888。3. 向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。4. 統(tǒng)計(jì)在線人數(shù)。5. 當(dāng)停止服務(wù)時(shí),斷開所有的用戶連接。B. 客戶端的主要功能如下:1. 連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。2.
2、 用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。3. 用戶可以配置連接后顯示的用戶名。4. 當(dāng)服務(wù)器端開啟的話,用戶可以隨時(shí)登錄和注銷。5. 用戶可以向所有人或某一個(gè)人發(fā)送消息。學(xué)習(xí)并掌握一下技術(shù):JavaJavaBean等熟練使用一下開發(fā)工具:Eclipse,JCreator等實(shí)現(xiàn)系統(tǒng)上訴的功能。3. 進(jìn)度安排:4. 12月28日12月29日:課程設(shè)計(jì)選題,查找參考資料12月30日1月1日:完成系統(tǒng)設(shè)計(jì)1月2日1月5日:完成程序代碼的編寫1月6日:系統(tǒng)測試與完善1月7日:完成課程設(shè)計(jì)報(bào)告,準(zhǔn)備答辯主要參考文獻(xiàn):1.張廣彬孟紅蕊張永寶.Java課程設(shè)計(jì)(案例精編)M.活華大學(xué)出版社.2007
3、年版摘要在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ基于Java網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計(jì)使用Java編寫一個(gè)聊天系統(tǒng)。一般來說,聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過Java提供的Soket類來連接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的而Java提供的多線程功能用多線程可完成多點(diǎn)對(duì)多點(diǎn)的聊天,數(shù)據(jù)庫管理系統(tǒng)用SQLServer2000完成并通過JDBC-ODBC訪問數(shù)據(jù)庫。本系統(tǒng)建
4、立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過程中,采用了多線程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。聊天系統(tǒng)完成后將可進(jìn)行多人對(duì)多人的聊天,對(duì)好友進(jìn)行添加、刪除,對(duì)新用戶的注冊(cè),發(fā)送消息、接受消息等等功能。關(guān)鍵詞:多線程;客戶機(jī)/服務(wù)器;JAVA;Socket;Eclipse;TCP/IPJAVA程序課程設(shè)計(jì)任務(wù)書I摘要II.目錄III第1章引言1441.1
5、RJ1.2課程設(shè)計(jì)內(nèi)容1.3任務(wù)分工第2章聊天室系統(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è)計(jì)63.1系統(tǒng)需求分析63.2系統(tǒng)開發(fā)及運(yùn)行環(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)的具體實(shí)現(xiàn)114.1界面設(shè)計(jì)114.1.1服務(wù)器啟動(dòng)界面圖114.1.2服務(wù)器啟動(dòng)成功界面圖124.1.3客戶端界面圖124.1.4用戶設(shè)置界面圖134.1.5用戶成功登錄界面圖134.1.6
6、兩人私聊界面圖144.1.7多人群聊界面圖144.2程序設(shè)計(jì)及調(diào)試運(yùn)行144.2.1程序調(diào)試(以服務(wù)器為例)154.2.2JCreator204.3本意小結(jié)21第5章結(jié)束語22致謝23附錄源代碼24第1章引言1.1背景當(dāng)今主流的聊天工具有QQICQ,MSNMessengeYahooMessenger等,國內(nèi)最熱門的當(dāng)屆QQ騰訊QQ(OICQ是由深圳市騰訊計(jì)算機(jī)系統(tǒng)公司開發(fā)的,基于Internet的即時(shí)尋呼軟件。您可以使用QQM子友用戶進(jìn)行交流,信息即時(shí)發(fā)送,即時(shí)回復(fù),收發(fā)及時(shí)、功能全面。此外QCS具有BP機(jī)網(wǎng)上尋呼、聊天室、傳輸文件、語音郵件、手機(jī)短訊服務(wù)等功能,QQ不僅僅是虛擬的網(wǎng)絡(luò)尋呼機(jī),
7、更可與傳統(tǒng)的無線尋呼網(wǎng)、GS唯動(dòng)電話的短消息系統(tǒng)互聯(lián),目前QQffi全國多家尋呼臺(tái)、移動(dòng)通信公司有業(yè)務(wù)合作。是國內(nèi)不可多得的中文網(wǎng)絡(luò)尋呼機(jī)。QQS持顯示朋友在線信息、即時(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ù)QC&、昵稱、姓名、email地址等關(guān)鍵詞來查找,找到后可加入到通訊錄中。當(dāng)您的通訊錄中的網(wǎng)友在線時(shí),QQ+朋友的頭像就會(huì)顯示在線,根據(jù)提示就可以發(fā)送信息,如果對(duì)方登記了尋呼機(jī)或開通了GSW機(jī)短消息,
8、即使離線了,您也可及時(shí)將信息傳遞給您的好友。雖然以上這些軟件是免費(fèi)的,并且功能越來越強(qiáng)大。但是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒法脫離Intenet使用的。為了能在一個(gè)沒有連接到Intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個(gè)工具。1.2課程設(shè)計(jì)內(nèi)容實(shí)現(xiàn)的是局域網(wǎng)中的聊天功能,運(yùn)行服務(wù)程序后,服務(wù)器創(chuàng)建成功,然后使服務(wù)器對(duì)某一個(gè)設(shè)定的端口處于監(jiān)聽狀態(tài),當(dāng)有客戶端請(qǐng)求建立連接時(shí),服務(wù)器就可接受請(qǐng)求,建立連接!這樣服務(wù)器和客戶端就可相互發(fā)送消息,實(shí)現(xiàn)聊天功能!系統(tǒng)的功能要求:A. 服務(wù)器端主要功能如下:1
9、. 在特定端口上進(jìn)行偵聽,等待客戶端連接。2. 用戶可以配置服務(wù)器端的偵聽端口,默認(rèn)端口為8888向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。3. 統(tǒng)計(jì)在線人數(shù)。4. 當(dāng)停止服務(wù)時(shí),斷開所有的用戶連接。B. 客戶端的主要功能如下:1. 連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。2. 用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)。3. 用戶可以配置連接后顯示的用戶名。4. 當(dāng)服務(wù)器端開啟的話,用戶可以隨時(shí)登錄和注銷。用戶可以向所有人或某一個(gè)人發(fā)送消息1.3任務(wù)分工第2章聊天室系統(tǒng)2.1聊天室系統(tǒng)概述聊天室是一種基丁互聯(lián)網(wǎng)的即時(shí)交流系統(tǒng),最初是ICQ,也稱網(wǎng)絡(luò)尋呼機(jī)。此類軟件使得人們可以運(yùn)用連上INTERN
10、ETS的電腦用戶可以隨時(shí)跟另外一個(gè)在線網(wǎng)民交談,甚至可以通過視頻看到對(duì)方的適時(shí)圖像。使人們不必?fù)?dān)心昂貴的話費(fèi)而暢快交流,并工作、交流兩不誤。2.1.1聊天室系統(tǒng)的定義聊天時(shí)系統(tǒng)是通過即時(shí)通訊技術(shù)來實(shí)現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是C/S架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過程中需要下載安裝客戶端軟件,典型的代表有:QQ、白度HI、SkypeQQVSGU、Gtalk、新浪UC、MSN等;2、采用B/S架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時(shí)通訊軟件,直接借助互聯(lián)網(wǎng)為媒介、客戶端無需安裝任何軟件,既可以體驗(yàn)服務(wù)器端進(jìn)行溝通對(duì)話,一般運(yùn)用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表有
11、Websitelive、53KF、live800等。2.1.2聊天室系統(tǒng)的任務(wù)及目的本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1) 服務(wù)器端1. 處理用戶注冊(cè)2. 處理用戶登錄3. 處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過濾非法內(nèi)容4. 處理用戶得到信息5. 處理用戶退出8. 服務(wù)器踢人。9. 保存服務(wù)器日志。10. 保存用戶聊天信息??蛻舳擞脩糇?cè)界面及結(jié)果用戶登錄界面及結(jié)果用戶發(fā)送信息界面及結(jié)果用戶得到信息界面及結(jié)果用戶退出界面及結(jié)果2.2主要聊天室系統(tǒng)介紹目前國內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新
12、版改名為LiveMessenger)以及跨平臺(tái)Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊無疑是國內(nèi)即時(shí)通訊市場的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢,騰訊QQ的時(shí)常占有率依然穩(wěn)步增長。騰訊的成功與其對(duì)QQ的不斷創(chuàng)新和完善是分不開的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過觀察騰訊QQ運(yùn)行時(shí)的各種細(xì)節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個(gè)客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。其模型如圖1-1與騰訊QQ不
13、同,微軟的MSNMessenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過與服務(wù)器的TCP連接進(jìn)行中轉(zhuǎn)通信。其模型如圖1-2騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實(shí)現(xiàn)復(fù)雜度都較高。而MSNMessenger所有數(shù)據(jù)都要經(jīng)過服務(wù)器,服務(wù)器壓力可想而知(難怪平時(shí)很少見到使用MSN進(jìn)行語音視頻聊天的)。2.3本章小結(jié)這一章介紹了當(dāng)前聊天室系統(tǒng)應(yīng)該具備的功能模塊,并提供了市面上比較流行的聊天室系統(tǒng)作為參考。在這一章中,我們可以了解什么是聊天室系統(tǒng),當(dāng)前聊天室系統(tǒng)的市場需求,還有一個(gè)聊天室系統(tǒng)應(yīng)該的開發(fā)目標(biāo)。第3章
14、聊天室系統(tǒng)的設(shè)計(jì)這一章是聊天室系統(tǒng)的設(shè)計(jì),從系統(tǒng)需求分析開始,介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計(jì),系統(tǒng)的數(shù)據(jù)流程圖。3.1系統(tǒng)需求分析聊天室的設(shè)計(jì)目標(biāo):通過做鞏固所學(xué)Java語言基本知識(shí),增進(jìn)Java語言編輯基本功,掌握J(rèn)DK、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用,用JAVA實(shí)現(xiàn)基于C/S模式的聊天室系統(tǒng)。3.2系統(tǒng)開發(fā)及運(yùn)行環(huán)境硬件平臺(tái):CPU:Pentium2.8GHz以上。內(nèi)存:256MB以上。軟件平臺(tái):操作系統(tǒng):WindowsXP。運(yùn)行環(huán)境:JDKVersion1.6JCreator3.3系統(tǒng)主要功能要求本系統(tǒng)針對(duì)局域網(wǎng)進(jìn)行聯(lián)機(jī)聊天。聊天室分為服務(wù)器端和客
15、戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。本系統(tǒng)主要實(shí)現(xiàn)如下功能:服務(wù)器:在特定端口上進(jìn)行偵聽,等待客戶端連接。用戶可以配置服務(wù)器端的偵聽端口,默認(rèn)端口為8888。向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。統(tǒng)計(jì)在線人數(shù)。當(dāng)停止服務(wù)時(shí),斷開所有的用戶連接。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。一臺(tái)主機(jī)只能啟動(dòng)一個(gè)服務(wù)器??蛻舳耍哼B接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。用戶可以配置要連接的服務(wù)器端的IP地址和端口號(hào)用戶可以配置連接后顯示的用戶名。用戶可以更改聊天時(shí)的表情。當(dāng)服務(wù)器端開啟后,用戶可以隨時(shí)登錄和注銷。用戶可以向所有人或某一個(gè)人發(fā)送消息。系統(tǒng)運(yùn)行穩(wěn)
16、定、安全可靠??梢阅J(rèn)連接到自己主機(jī)啟動(dòng)的服務(wù)器。3.4系統(tǒng)模塊化分析3.4.1聊天室系統(tǒng)總體結(jié)構(gòu)主要功能框架如下圖所示:各功能模塊實(shí)現(xiàn)的功能為:服務(wù)器:端口設(shè)置:設(shè)置傾聽的端口號(hào),默認(rèn)為8888。啟動(dòng)服務(wù):開啟傾聽端口,允許客戶端連接。系統(tǒng)消息:服務(wù)器啟動(dòng)后可以在聊天室內(nèi)發(fā)送消息。停止服務(wù):關(guān)閉傾聽端口,中斷所有客戶端的連接。退出:關(guān)閉服務(wù)器。客戶端:用戶設(shè)置:設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過客。連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機(jī)的IP地址和傾聽端口登錄:連接服務(wù)器。發(fā)送消息:進(jìn)行聊天,可單獨(dú)發(fā)送消息給聊天室中的一個(gè)人。注銷:與服務(wù)器斷開連接。退出:關(guān)閉客戶端。3.4.2聊天室系統(tǒng)各模塊
17、介紹勃天室服亦1服務(wù)悝)幫助(址壹g口設(shè)置啟動(dòng)腮旁L'''僖IMG輯施聊天模塊可以向聊天室內(nèi)所有人或個(gè)人發(fā)送系統(tǒng)消息或以管理員身份與其他人聊天服務(wù)器包含服務(wù)、幫助、聊天三大模塊,其中服務(wù)模塊包含端口設(shè)置、啟動(dòng)服務(wù)、停止服務(wù)和退出四個(gè)小模塊表3-1服務(wù)器各模塊名稱功能匯總表模塊名基本功能1端口設(shè)置設(shè)置傾聽的端口號(hào),默認(rèn)為8888。2啟動(dòng)服務(wù)開啟傾聽端口,允許客戶端連接。3停止服務(wù)關(guān)閉傾聽端口,中斷所有客戶端的連接。4退出關(guān)閉服務(wù)器。5幫助顯示各個(gè)模塊的功能及操作方法。6發(fā)送向聊天室內(nèi)發(fā)送系統(tǒng)消息。n操福河設(shè)®(C)幫助但)用戶諼置連接設(shè)置登錄原銷Ilisal客戶
18、端包含操作、設(shè)置、幫助、聊天四大模塊,其中操作包含用戶登錄、用戶注銷和退出三個(gè)小模塊,設(shè)置包含用戶設(shè)置和連接設(shè)置兩個(gè)小模塊聊天模塊除具備普通聊天功能外,還能進(jìn)行聊天時(shí)的表情選擇表3-2客戶端各模塊名稱功能匯總表模塊名基本功能1用戶設(shè)置設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過客。2連接設(shè)置設(shè)皿連接的服務(wù)器所在主機(jī)的IP地址和傾聽端口。3用戶登錄連接到服務(wù)器端。4用戶注銷與服務(wù)器斷開連接。5退出關(guān)閉客戶端。6發(fā)送發(fā)送聊天內(nèi)容7悄悄話聊天內(nèi)容不會(huì)被服務(wù)器和說話對(duì)象以外的人看到3.5系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖3.6本章小結(jié)本章是聊天室系統(tǒng)的具體設(shè)計(jì)過程,有具體的需求分析、系統(tǒng)功能模塊、系統(tǒng)數(shù)據(jù)流圖。這里我們開
19、始接觸聊天室系統(tǒng)開發(fā)的最初步驟,也是很重要的一步第4章系統(tǒng)的具體實(shí)現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計(jì)的質(zhì)量并在很大程度上決定了軟件是否成功。4.1界面設(shè)計(jì)4.1.1服務(wù)器啟動(dòng)界面圖4.1.2服務(wù)器啟動(dòng)成功界面圖-K王還用痙村rL=:1f漂口洋布JQEIK若無U陽黃|燕'±"措I;土II.-4.1.3客戶端界面圖4.1.4用戶設(shè)置界面圖4.1.5用戶成功登錄界面圖4.1.6兩人私聊界面圖*fi-L!Aii«|H>INiffB'1景1u9但H垢您*仲宇訕1曲通左也1中弟彳。耳坤HgtsdzeI盼*£蜘隼|客.I
20、MKNH-岬“FIMO和方g畝吐:m&tilg德tintafop”dWHushmtJ*M*«5i!ZS«tMf"1伶UlfEEli魂襯W?»ii'b球HLH:|屹UW卜陶整十£Mi_:蛔taW-妍WCIB-UMbAM:M!;|祉在燦”A4.1.7多人群聊界面圖皿£20WtPV«SlfiRS177OF'I-UBD3EVfliu4-lQU岫Ul»f機(jī)!.it慘仰iiEtaiNt-iQinSlLI«*«!NwsyE-n.IMM加國白di-MW*!1JI三愕孕蝴麗育,01d&am
21、p;audMt訓(xùn)fUJU國!御席5i舊拒1皆H.弟*AZWdM-HaS夠坦1HKA編.*8或陣4.3帑呻徐44M*'上Mrai*ILi&XM*1A*虹4=tTK±MmL-5.住誼避上上爐;向佛7日二爐的77所"".is三岬垮皓的.房dmuhNiPiAQa-*MihA垃也土義斐曜前.*”員尋TPOCIt中igl機(jī)購"*EtviffltfiAhng|$F加,aranwr書&誨(tasdatdA*Hmanbnn(AWHVM4河度善耳B"T”鼻陽盜由勺便"IT:曲七詢【悴靖礦祈L浪/雨惘廿峋>>.聞4慢至饋
22、W毋£帆堆匚的LSUMt£4LiwatfTi1EVWWV1I4£«4lifcT:WlA質(zhì)碑叩I足啊尸i人4.2程序設(shè)計(jì)及調(diào)試運(yùn)行利用JCreator“一次編寫,各處運(yùn)行”的編程優(yōu)點(diǎn),按功能模塊結(jié)構(gòu)設(shè)計(jì)菜單,布置各明細(xì)模塊工作界面,編寫各個(gè)模塊的程序代碼,進(jìn)行編譯連接運(yùn)行,經(jīng)過反復(fù)調(diào)試修改,以達(dá)到系統(tǒng)功能要求。這個(gè)過程具有大量的工作量,應(yīng)仔細(xì)對(duì)每個(gè)程序細(xì)節(jié)進(jìn)行分析思考、編寫程序并調(diào)試,做到程序簡潔活楚,盡量避免可能潛在的程序錯(cuò)誤,并在必要的地方加以注釋,以便丁程序閱讀和修改。4.2.1程序調(diào)試(以服務(wù)器為例)importjava.awt.*;importj
23、ava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;.*;importjava.io.*;/*聊天服務(wù)端的主框架類*/publicclassChatServerextendsJFrameimplementsActionListenerpublicstaticintport=8888;/服務(wù)端的偵聽端口ServerSocketserverSocket;/服務(wù)端SocketImageicon;/程序圖標(biāo)JComboBoxcombobox;/選擇發(fā)送消息的接受者JTextAreamessageShow;/服務(wù)端的信息顯示JScr
24、ollPanemessageScrollPane;/信息顯示的滾動(dòng)條JTextFieldshowStatus;/顯示用戶連接狀態(tài)JLabelsendToLabel,messageLabel;JTextFieldsysMessage;/服務(wù)端消息的發(fā)送JButtonsysMessageButton;/服務(wù)端消息的發(fā)送按鈕UserLinkListuserLinkList;/用戶鏈表/建立菜單欄JMenuBarjMenuBar=newJMenuBar();/建立菜單組JMenuserviceMenu=newJMenu("服務(wù)(V)");/建立菜單項(xiàng)端口設(shè)置(P)");啟
25、動(dòng)服務(wù)(S)");停止服務(wù)(T)”);退出(X)”);JMenultemportitem=newJMenultem("JMenultemstartitem=newJMenultem("JMenultemstopitem=newJMenultem("JMenultemexititem=newJMenultem("JMenuhelpMenu=newJMenu("幫助(H)");JMenultemhelpitem=newJMenultem("幫助(H)”);/建立工具欄JToolBartoolBar=newJToolBa
26、r();/建立工具欄中的按鈕組件啟動(dòng)服務(wù)端偵聽啟動(dòng)服務(wù)端偵聽關(guān)閉服務(wù)端偵聽退出按鈕JButtonportSet;/JButtonstartServer;/JButtonstopServer;/JButtonexitButton;/框架的大小DimensionfaceSize=newDimension(400,600);ServerListenlistenThread;JPaneldownPanel;GridBagLayoutgirdBag;GridBagConstraintsgirdBagCon;/*服務(wù)端構(gòu)造函數(shù)*/publicChatServer()init();/初始化程序/添加框架的關(guān)
27、閉事件處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/設(shè)置框架的大小this.setSize(faceSize);/設(shè)置運(yùn)行時(shí)窗口的位置DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(int)(screenSize.width-faceSize.getWidth()/2,(int)(screenSize.height-faceSize.getHeight()/2);this.setResizabl
28、e(false);this.setTitle("聊天室服務(wù)端");/設(shè)置標(biāo)題/程序圖標(biāo)icon=getImage("icon.gif");this.setIconImage(icon);/show();/為服務(wù)菜單欄設(shè)置熱鍵V'serviceMenu.setMnemonic('V');/為端口設(shè)置快捷鍵為ctrl+pportItem.setMnemonic('P');portItem.setAccelerator(KeyEvent.VK_P,InputEvent.CTRL_MASK);/為啟動(dòng)服務(wù)快捷鍵為ctrl+
29、sstartItem.setMnemonic('S');startItem.setAccelerator(KeyEvent.VK_S,InputEvent.CTRL_MASK);/為端口設(shè)置快捷鍵為ctrl+TstopItem.setMnemonic('T');stopItem.setAccelerator(KeyEvent.VK_T,InputEvent.CTRL_MASK);/為退出設(shè)置快捷鍵為ctrl+xexitItem.setMnemonic('X');exitItem.setAccelerator(KeyEvent.VK_X,Input
30、Event.CTRL_MASK);/為幫助菜單欄設(shè)置熱鍵'H'helpMenu.setMnemonic('H');/為幫助設(shè)置快捷鍵為ctrl+phelpItem.setMnemonic('H');helpItem.setAccelerator(KeyEvent.VK_H,InputEvent.CTRL_MASK);/*程序初始化函數(shù)*/設(shè)置程序圖標(biāo)(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStro
31、ke.getKeyStrokepublicvoidinit()(ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout();/添加菜單欄serviceMenu.add(portItem);serviceMenu.add(startItem);serviceMenu.add(stopItem);serviceMenu.add(exitItem);jMenuBar.add(serviceMenu);helpMenu.add(helpItem);jMenuBar.add(helpMenu);setJMen
32、uBar(jMenuBar);/初始化按鈕portSet=newJButton("端口設(shè)置");startServer=newJButton("啟動(dòng)服務(wù)");stopServer=newJButton("停止服務(wù)");exitButton=newJButton("退出");/將按鈕添加到工具欄toolBar.add(portSet);toolBar.addSeparator();/添加分隔欄toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSep
33、arator();/添加分隔欄too舊ar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);/初始時(shí),令停止服務(wù)按鈕不可用stopServer.setEnabled(false);stopItem.setEnabled(false);/為菜單欄添加事件監(jiān)聽portItem.addActionListener(this);startItem.addActionListener(this);stopItem.addActionListener(this);exitItem.addActionListener(this);hel
34、pItem.addActionListener(this);/添加按鈕的事件偵聽portSet.addActionListener(this);startServer.addActionListener(this);stopServer.addActionListener(this);exitButton.addActionListener(this);combobox=newJComboBox();combobox.insertItemAt("所有人",0);combobox.setSelectedIndex(0);messageShow=newJTextArea();m
35、essageShow.setEditable(false);/添加滾動(dòng)條messageScrollPane=newJScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(newDimension(400,400);messageScrollPane.revalidate();showStatus=newJTextField(35);showStatus.setEdi
36、table(false);sysMessage=newJTextField(24);sysMessage.setEnabled(false);sysMessageButton=newJButton();sysMessageButton.setText("發(fā)送");/添加系統(tǒng)消息的事件偵聽sysMessage.addActionListener(this);sysMessageButton.addActionListener(this);sendToLabel=newJLabel("發(fā)送至:");messageLabel=newJLabel("發(fā)
37、送消息:”);downPanel=newJPanel();girdBag=newGridBagLayout();downPanel.setLayout(girdBag);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=0;girdBagCon.gridwidth=3;girdBagCon.gridheight=2;girdBagCon.ipadx=5;girdBagCon.ipady=5;JLabelnone=newJLabel("");girdBag.setConstraints
38、(none,girdBagCon);downPanel.add(none);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=2;girdBagCon.insets=newInsets(1,0,0,0);girdBagCon.ipadx=5;girdBagCon.ipady=5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon=newGridBagConstraints();girdB
39、agCon.gridx=1;girdBagCon.gridy=2;girdBagCon.anchor=GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);gi
40、rdBagCon=newGridBagConstraints();girdBagCon.gridx=1;girdBagCon.gridy=3;girdBag.setConstraints(sysMessage,girdBagCon);downPanel.add(sysMessage);girdBagCon=newGridBagConstraints();girdBagCon.gridx=2;girdBagCon.gridy=3;girdBag.setConstraints(sysMessageButton,girdBagCon);downPanel.add(sysMessageButton);
41、girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=4;girdBagCon.gridwidth=3;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);/關(guān)閉程序時(shí)的操作this.addWindowListener
42、(newWindowAdapter()publicvoidwindowClosing(WindowEvente)stopService();System.exit(0););/*事件處理*/publicvoidactionPerformed(ActionEvente)Objectobj=e.getSource();if(obj=startServer|obj=startItem)/啟動(dòng)服務(wù)端startService();elseif(obj=stopServer|obj=stopItem)/停止月艮務(wù)端intj=JOptionPane.showConfirmDialog(this,"
43、真的停止服務(wù)嗎?",”停止服務(wù)",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j=JOptionPane.YES_OPTION)stopService();elseif(obj=portSet|obj=portItem)/端口設(shè)置/調(diào)出端口設(shè)置的對(duì)話框PortConfportConf=newPortConf(this);portConf.show();elseif(obj=exitButton|obj=exitItem)/退出程序intj=JOptionPane.showConfirmDialog(this
44、,"真的要退出嗎?”,”退出”,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j=JOptionPane.YES_OPTION)stopService();System.exit(0);elseif(obj=helpitem)(/菜單欄中的幫助/調(diào)出幫助對(duì)話框HelphelpDialog=newHelp(this);helpDialog.show();elseif(obj=sysMessage|obj=sysMessageButton)(/發(fā)送系統(tǒng)消息sendSystemMessage();/*啟動(dòng)服務(wù)端*/publi
45、cvoidstartService()(try(serverSocket=newServerSocket(port,10);messageShow.append("服務(wù)端已經(jīng)啟動(dòng),在"+port+"端口偵聽.n");startServer.setEnabled(false);startitem.setEnabled(false);portSet.setEnabled(false);portitem.setEnabled(false);stopServer.setEnabled(true);stopitem.setEnabled(true);sysMess
46、age.setEnabled(true);catch(Exceptione)(/System.out.println(e);userLinkList=newUserLinkList();listenThread=newServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();/*關(guān)閉服務(wù)端*/4.2.2JCreatorJcreator是一個(gè)用于Java程序設(shè)計(jì)的集成開發(fā)環(huán)境,具有編輯、調(diào)試、運(yùn)行Java程序的功能。當(dāng)前最新版本是Jcreator3.1Q它乂分為LE和P
47、ro版本。LE版本功能上受到一些限制,是免費(fèi)版本。Pro版本功能最全,但這個(gè)版本是一個(gè)共享軟件。這個(gè)軟件比較小巧,對(duì)硬件要求不是很高,完全用C+寫的,速度快、效率高。具有語法著色、代碼自動(dòng)完成、代碼參數(shù)提示、工程向?qū)?、類向?qū)У裙δ堋5谝淮螁?dòng)時(shí)提示設(shè)置JavaJDK主目錄及JDKJavaDocB錄,軟件自動(dòng)設(shè)置好類路徑、編譯器及解釋器路徑,還可以在幫助菜單中使用JDKHelp。4.3本章小結(jié)本意介紹了系統(tǒng)的具體實(shí)現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要用到的函數(shù)和主界面的框架設(shè)計(jì)。第5章結(jié)束語本文討論了如何利用JAVA技術(shù)開發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點(diǎn)
48、。系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的聊天室可以達(dá)到基本的聊天要求,具有較高的研究價(jià)值。系統(tǒng)具有目前聊天室的基本功能:包括支持語氣選擇,支持私聊,可以給所有聊友發(fā)公共信息,具有速度快,高穩(wěn)定性,占用系統(tǒng)資源少,用戶界面友好等特點(diǎn)。通過畢業(yè)設(shè)計(jì),發(fā)現(xiàn)自己在理論研究和實(shí)際工作能力等方面都得到了提高,受益匪淺,同時(shí)在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時(shí)總結(jié)研究成果,這些無疑會(huì)對(duì)我今后的工作和學(xué)習(xí)帶來很大的幫助。致謝附錄源代碼importjava.awt.*;importjava.awt.event.*;importja
49、vax.swing.*;importjavax.swing.event.*;.*;importjava.io.*;/*聊天服務(wù)端的主框架類*/publicclassChatServerextendsJFrameimplementsActionListenerpublicstaticintport=8888;/服務(wù)端的偵聽端口ServerSocketserverSocket;/月艮務(wù)端SocketImageicon;/程序圖標(biāo)JComboBoxcombobox;/選擇發(fā)送消息的接受者JTextAreamessageShow;/艮務(wù)端的信息顯示JScrollPanemessageScrollPan
50、e;/信息顯示的滾動(dòng)條JTextFieldshowStatus;/顯示用戶連接狀態(tài)JLabelsendToLabel,messageLabel;JTextFieldsysMessage;/月艮務(wù)端消息的發(fā)送JButtonsysMessageButton;/服務(wù)端消息的發(fā)送按鈕UserLinkListuserLinkList;/用戶鏈表/建立菜單欄JMenuBarjMenuBar=newJMenuBar();/建立菜單組JMenuserviceMenu=newJMenu("服務(wù)(V)”);/建立菜單項(xiàng)JMenultemportitem=newJMenultem("端口設(shè)置(P
51、)");JMenultemstartitem=newJMenultem("啟動(dòng)服務(wù)(S)");JMenultemstopitem=newJMenultem("停止服務(wù)(T)”);JMenultemexititem=newJMenultem("退出(X)");JMenuhelpMenu=newJMenu("幫助(H)");JMenultemhelpitem=newJMenultem("幫助(H)");/建立工具欄JToolBartoolBar=newJToolBar();/建立工具欄中的按鈕組件J
52、ButtonportSet;/啟動(dòng)服務(wù)端偵聽JButtonstartServer;/啟動(dòng)服務(wù)端偵聽JButtonstopServer;/關(guān)閉服務(wù)端偵聽JButtonexitButton;/退出按鈕框架的大小DimensionfaceSize=newDimension(400,600);ServerListenlistenThread;JPaneldownPanel;GridBagLayoutgirdBag;GridBagConstraintsgirdBagCon;/*服務(wù)端構(gòu)造函數(shù)*/publicChatServer()init();/初始化程序/添加框架的關(guān)閉事件處理this.setDefa
53、ultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();設(shè)置框架的大小this.setSize(faceSize);設(shè)置運(yùn)行時(shí)窗口的位置DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(int)(screenSize.width-faceSize.getWidth()/2,(int)(screenSize.height-faceSize.getHeight()/2);this.setResizable(false);this.setTi
54、tle("聊天室服務(wù)端");/設(shè)置標(biāo)題程序圖標(biāo)icon=getImage("icon.gif");this.setIconImage(icon);/設(shè)置程序圖標(biāo)show();為服務(wù)菜單欄設(shè)置熱鍵V'serviceMenu.setMnemonic('V');為端口設(shè)置快捷鍵為ctrl+pportItem.setMnemonic('P');portItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK);/為啟動(dòng)服務(wù)快捷
55、鍵為ctrl+sstartItem.setMnemonic('S');startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK);為端口設(shè)置快捷鍵為ctrl+TstopItem.setMnemonic('T');stopItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK);為退出設(shè)置快捷鍵為ctrl+xexitItem.setMnemonic('
56、X');exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK);為幫助菜單欄設(shè)置熱鍵H'helpMenu.setMnemonic('H');/為幫助設(shè)置快捷鍵為ctrl+phelpItem.setMnemonic('H');helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK);/*程序初始化函數(shù)*/publicvoidinit(
57、)ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout();添加菜單欄serviceMenu.add(portItem);serviceMenu.add(startItem);serviceMenu.add(stopItem);serviceMenu.add(exitItem);jMenuBar.add(serviceMenu);helpMenu.add(helpItem);jMenuBar.add(helpMenu);setJMenuBar(jMenuBar);初始化按鈕portSet=newJ
58、Button("端口設(shè)置");startServer=newJButton("啟動(dòng)服務(wù)");stopServer=newJButton("停止服務(wù)”);exitButton=newJButton("退出”);將按鈕添加到工具欄toolBar.add(portSet);toolBar.addSeparator();/添加分隔欄toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSeparator();/添加分隔欄toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);初始時(shí),令停止服務(wù)按鈕不可用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全新第三方保證擔(dān)保合同2025年
- 2024年戶外廣告設(shè)施定期檢查與維修合同范本3篇
- 產(chǎn)品加工的合同范本2025年
- 房地產(chǎn)項(xiàng)目合作合同協(xié)議范本2025年
- 采購合同要素2025年
- 2024年度固定資產(chǎn)抵押合同模板及范本2篇
- 2024年冷鏈物流設(shè)施承包管理合同3篇
- 2024年債務(wù)轉(zhuǎn)讓與資產(chǎn)評(píng)估服務(wù)合同3篇
- 2024年度機(jī)械設(shè)備質(zhì)押融資合同協(xié)議3篇
- 2024年互聯(lián)網(wǎng)公司員工入職勞動(dòng)合同范本6篇
- 企業(yè)激勵(lì)員工所面臨的困境及對(duì)策
- GB 16804-1997氣瓶警示標(biāo)簽
- 國開作業(yè)《建筑制圖基礎(chǔ)》學(xué)習(xí)過程表現(xiàn)參考22
- 食品安全BRCGS包裝材料全球標(biāo)準(zhǔn)第六版管理手冊(cè)及程序文件
- 排列3,3D終極教程
- 高中政治必修二 1.1《公有制為主體 多種所有制經(jīng)濟(jì)共同發(fā)展》集體備課課件
- 鹽化工產(chǎn)業(yè)鏈
- DB62∕T 3176-2019 建筑節(jié)能與結(jié)構(gòu)一體化墻體保溫系統(tǒng)應(yīng)用技術(shù)規(guī)程
- 消費(fèi)者行為學(xué)50年:演化與顛覆
- T∕CTES 1035-2021 透明質(zhì)酸鈉紡織品 保濕性能的檢測與評(píng)價(jià)
- 煙草設(shè)備ppt課件
評(píng)論
0/150
提交評(píng)論