版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)(含代碼)
- Java課程設(shè)計(jì)---JAVA聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)(含代碼).doc
- java課程設(shè)計(jì)---java聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)
- java課程設(shè)計(jì)---聊天室系統(tǒng)
- java課程設(shè)計(jì)--聊天室系統(tǒng)
- java網(wǎng)絡(luò)聊天室課程設(shè)計(jì)
- java課程設(shè)計(jì)之簡(jiǎn)單聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-java聊天室
- java課程設(shè)計(jì)報(bào)告---利用java實(shí)現(xiàn)簡(jiǎn)單聊天室
- java網(wǎng)絡(luò)聊天室畢業(yè)課程設(shè)計(jì)報(bào)告(內(nèi)附代碼)
- java聊天室設(shè)計(jì)
- java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- java聊天室的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——課程論文
- java聊天室程序(java)
- Java聊天室的設(shè)計(jì)與實(shí)現(xiàn).doc
- 基于java聊天室設(shè)計(jì)與實(shí)現(xiàn)
- java網(wǎng)絡(luò)聊天室課程設(shè)計(jì)說(shuō)明書(shū)(含源程序)
- 基于java網(wǎng)絡(luò)聊天室設(shè)計(jì)
- java聊天室的設(shè)計(jì)與實(shí)現(xiàn) 開(kāi)題報(bào)告
評(píng)論
0/150
提交評(píng)論