版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 題 目 基于JAVA的聊天室設(shè)計(jì)與實(shí)現(xiàn) </p><p> 計(jì)算機(jī)與信息工程 系 計(jì)算機(jī)科學(xué)與技術(shù) 專(zhuān)業(yè)</p><p> 學(xué) 號(hào) </p><p> 學(xué)生姓名
2、 </p><p> 指導(dǎo)教師 </p><p> 起訖日期 2011. 10 ~ 2012. 4 </p><p> 工作地點(diǎn) </p><p><b> 目 錄</b>
3、;</p><p><b> 緒論1</b></p><p> 1課題總體介紹2</p><p> 1.1項(xiàng)目開(kāi)發(fā)的目的2</p><p> 1.2項(xiàng)目開(kāi)發(fā)的意義2</p><p><b> 2總體設(shè)計(jì)3</b></p><p&
4、gt; 2.1應(yīng)用需求分析3</p><p> 2.2模塊具體分析4</p><p> 2.2.1 服務(wù)器端模塊分析4</p><p> 2.2.2 客戶(hù)端模塊分析4</p><p> 2.2.3 數(shù)據(jù)庫(kù)模塊分析4</p><p> 2.3聊天室的具體實(shí)現(xiàn)5</p><
5、p> 2.3.1 登錄界面的實(shí)現(xiàn)5</p><p> 2.3.2注冊(cè)界面的實(shí)現(xiàn)5</p><p> 2.3.3 聊天界面的實(shí)現(xiàn)5</p><p> 2.3.4服務(wù)器界面的實(shí)現(xiàn)6</p><p> 2.3.5 服務(wù)器驗(yàn)證登錄的實(shí)現(xiàn)6</p><p> 2.3.6 聊天功能的實(shí)現(xiàn)6</p
6、><p> 3聊天室的詳細(xì)設(shè)計(jì)7</p><p> 3.1開(kāi)發(fā)環(huán)境的配置7</p><p> 3.2開(kāi)發(fā)的過(guò)程7</p><p> 3.3聊天室功能的測(cè)試8</p><p><b> 結(jié) 論10</b></p><p><b> 參考文獻(xiàn)
7、11</b></p><p><b> 致 謝12</b></p><p><b> 附 錄13</b></p><p> 基于JAVA的聊天室設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 隨著網(wǎng)絡(luò)
8、的快速發(fā)展,網(wǎng)絡(luò)儼然已經(jīng)成為了我們了解世界和關(guān)注世界各地新動(dòng)態(tài)的一個(gè)主要途徑了。因此伴隨著網(wǎng)絡(luò)而必然產(chǎn)生的一些軟件也越來(lái)越多,而能夠?qū)崿F(xiàn)即時(shí)通信的聊天軟件也是隨之誕生,且深受用戶(hù)們喜愛(ài)。而MSN,ICQ,還有國(guó)內(nèi)的QQ等大型聊天軟件也成為了人們網(wǎng)絡(luò)生活中的一部分。</p><p> 本文中主要闡述的是java聊天室的設(shè)計(jì)過(guò)程,以及聊天功能的實(shí)現(xiàn)。前臺(tái)采用的java語(yǔ)言采用C/S架構(gòu)來(lái)設(shè)計(jì)聊天室,而后臺(tái)則采用SQ
9、L Server2005 創(chuàng)建的數(shù)據(jù)庫(kù)和表格來(lái)管理用戶(hù)的信息。然后利用這2種工具的結(jié)合來(lái)完成聊天室的設(shè)計(jì)。</p><p> 【關(guān)鍵詞】網(wǎng)絡(luò) 聊天室 即時(shí)通信 JAVA</p><p> Chat room Design with realization based on JAVA</p><p><b> Abstract</b>
10、</p><p> With the rapid development of network, the network has become in a major way for us to understand the world . So with the network and inevitable has some software is also more and more, and can rea
11、lize instant communication chat software is also comes and loved by uses. So MSN, ICQ, QQ and other large chat software has become a part of the people’s life for network.</p><p> This article mainly elabor
12、ated in the chat room of the design process is Java, and the realization of the function of chat. The front desk of the Java language using C/S architecture to design a chat room, and the back desk, using the database an
13、d SQL Server2005 create form to manage customer information. Finally, using the combination of these two tools to complete the design of the chat room.</p><p> 【Key words】network Chat room Instant communi
14、cation JAVA</p><p><b> 緒論</b></p><p> 隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來(lái)越離不開(kāi)信息網(wǎng)絡(luò)的支持,而聊天室是人們最常見(jiàn),最直接的網(wǎng)上交流的方式。</p><p> 本系統(tǒng)利用Java實(shí)現(xiàn)基于C/S模式的聊天程序。聊天室共分為服務(wù)器端和客戶(hù)端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶(hù)端發(fā)來(lái)的消息
15、,客戶(hù)端需登錄到服務(wù)端才可以實(shí)現(xiàn)正常的聊天功能。服務(wù)器端的主要實(shí)現(xiàn)在特定端口上進(jìn)行偵聽(tīng),等待客戶(hù)端連接;用戶(hù)可以配置服務(wù)端的偵聽(tīng)端口,默認(rèn)端口為9999;向已經(jīng)連接到服務(wù)端的用戶(hù)發(fā)送系統(tǒng)消息??蛻?hù)端的主要功能為:連接到已經(jīng)開(kāi)啟服務(wù)的服務(wù)端;用戶(hù)可以配置要連接的端口號(hào);用戶(hù)可以配置連接后顯示的用戶(hù)的賬號(hào);當(dāng)服務(wù)器端開(kāi)啟的話(huà),用戶(hù)可以隨時(shí)登錄,用戶(hù)可以向所有人或某一個(gè)人發(fā)送消息。從而客戶(hù)與客戶(hù)之間以及客戶(hù)與服務(wù)器之間可以簡(jiǎn)單方便地進(jìn)行通信。
16、</p><p> 主要使用Sun公司提供Java語(yǔ)言、jdk開(kāi)發(fā)環(huán)境及套接字通信socket技術(shù),并利用MyEclipse來(lái)進(jìn)行開(kāi)發(fā),來(lái)是實(shí)現(xiàn)對(duì)服務(wù)器端和客戶(hù)端之間相互交流的功能。</p><p><b> 課題總體介紹</b></p><p><b> 項(xiàng)目開(kāi)發(fā)的目的</b></p><p&g
17、t; 本課題的研究主要目的是可以加深我們對(duì)java編程思想的理解,讓我們養(yǎng)成一個(gè)良好的項(xiàng)目開(kāi)發(fā)的編程習(xí)慣,同時(shí)也是對(duì)我們所學(xué)的java編程的一個(gè)綜合提高。而對(duì)聊天室的開(kāi)發(fā)也可以更好的理解C/S架構(gòu)開(kāi)發(fā)的原理,能夠更加熟練的使用多線程、異常處理、Socket編程、輸入輸出流的使用。</p><p><b> 項(xiàng)目開(kāi)發(fā)的意義 </b></p><p> 根據(jù)當(dāng)前網(wǎng)絡(luò)
18、的需求,網(wǎng)絡(luò)聊天越來(lái)越受各種網(wǎng)民所青睞。因此開(kāi)發(fā)網(wǎng)絡(luò)聊天是相當(dāng)有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪問(wèn)量,同時(shí)可以留著訪客,更重要的是讓訪客透過(guò)聊天室實(shí)時(shí)的互相交流。而本人也學(xué)習(xí)過(guò)JAVA語(yǔ)言,對(duì)網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗(yàn)自己對(duì)JAVA語(yǔ)言的掌握程度,本人就決定以《Java聊天室》為畢業(yè)設(shè)計(jì),希望通過(guò)這一次能進(jìn)一步提高本人的網(wǎng)絡(luò)開(kāi)發(fā)編程的能力。</p><p><b> 總體
19、設(shè)計(jì)</b></p><p><b> 應(yīng)用需求分析</b></p><p> 利用Java實(shí)現(xiàn)基于C/S模式的聊天程序,聊天系統(tǒng)不外乎兩個(gè)方面,服務(wù)器端和客戶(hù)端。服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶(hù)端發(fā)來(lái)的消息,客戶(hù)端需登錄到服務(wù)端才可以實(shí)現(xiàn)正常的聊天功能。簡(jiǎn)單分析一下兩個(gè)方面所要完成的任務(wù),對(duì)設(shè)計(jì)這個(gè)程序來(lái)說(shuō),等于完成了一半。首先來(lái)看一下服務(wù)器端的任務(wù):&
20、lt;/p><p> 服務(wù)器端的主要功能如下:</p><p> ?。?)在特定端口上進(jìn)行偵聽(tīng),等待客戶(hù)端連接。</p><p> ?。?)用戶(hù)可以配置服務(wù)端的偵聽(tīng)端口,默認(rèn)端口為9999。</p><p> (3)向已經(jīng)連接到服務(wù)端的用戶(hù)發(fā)送系統(tǒng)消息。</p><p> ?。?)可以啟動(dòng)和關(guān)閉服務(wù)器。</p&g
21、t;<p> 以上就是服務(wù)器端最主要任務(wù)。不難看出,服務(wù)器端的任務(wù)并不復(fù)雜。</p><p> 客戶(hù)端的主要功能如下:</p><p> ?。?)連接到已經(jīng)開(kāi)啟服務(wù)的服務(wù)端。</p><p> ?。?)用戶(hù)可以注冊(cè)賬號(hào)。</p><p> ?。?)用戶(hù)可以通過(guò)注冊(cè)好的賬號(hào)登陸聊天室。</p><p>
22、 ?。?)用戶(hù)可以向所有人或某一個(gè)人發(fā)送消息。</p><p> 相對(duì)服務(wù)器而言,客戶(hù)端的任務(wù)也不很復(fù)雜,有了以上的簡(jiǎn)單分析,可以知道,解決上述問(wèn)題,即完成了該聊天系統(tǒng)的核心。</p><p> 聊天室設(shè)計(jì)好了,同時(shí)還需要數(shù)據(jù)庫(kù)的支持,數(shù)據(jù)庫(kù)的功能就是對(duì)用戶(hù)注冊(cè)的賬號(hào)和密碼進(jìn)行管理,當(dāng)用戶(hù)登錄時(shí)可以進(jìn)行驗(yàn)證。</p><p><b> 模塊具體分析&
23、lt;/b></p><p> 模塊分析示意圖如圖2.1所示:</p><p><b> 圖2.1模塊分析</b></p><p> 2.2.1 服務(wù)器端模塊分析</p><p> 服務(wù)器與客戶(hù)間通過(guò)套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡(jiǎn)單,Java API為處理套接口的通信提供了
24、一個(gè)類(lèi)java.net.Socket,使得編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)器采用多線程以滿(mǎn)足多用戶(hù)的請(qǐng)求,并通過(guò)創(chuàng)建一個(gè)ServerSocket對(duì)象來(lái)監(jiān)聽(tīng)來(lái)自客戶(hù)的連接請(qǐng)求,默認(rèn)端口為8888,然后無(wú)限循環(huán)調(diào)用accept()方法接受客戶(hù)程序的連接。</p><p> 2.2.2 客戶(hù)端模塊分析</p><p> 客戶(hù)通過(guò)Socket(InetAddress,port)建立與服務(wù)器的連接
25、。服務(wù)器與客戶(hù)都通過(guò)構(gòu)造對(duì)象流來(lái)建立輸入輸出流,然后雙方通過(guò)該輸入輸出流來(lái)相互傳遞信息,一旦收到客戶(hù)方的連接請(qǐng)求,服務(wù)器accept()方法返回一個(gè)新建的Socket對(duì)象??蛻?hù)端然后向服務(wù)器發(fā)送消息,服務(wù)器收到來(lái)自客戶(hù)的請(qǐng)求后,針對(duì)不同的消息處理請(qǐng)求。</p><p> 2.2.3 數(shù)據(jù)庫(kù)模塊分析</p><p> 數(shù)據(jù)庫(kù)用于管理用戶(hù)的信息,當(dāng)用戶(hù)在注冊(cè)界面成功注冊(cè)了賬號(hào),就存在數(shù)據(jù)庫(kù)
26、的用戶(hù)表里面,當(dāng)新用戶(hù)注冊(cè)時(shí),將新賬號(hào)與數(shù)據(jù)庫(kù)中的賬號(hào)比較來(lái)驗(yàn)證賬號(hào)是否純?cè)?,也可以?yàn)證賬號(hào)密碼是否正確。</p><p><b> 聊天室的具體實(shí)現(xiàn)</b></p><p> 2.3.1 登錄界面的實(shí)現(xiàn)</p><p> 登陸界面如圖2.2所示:</p><p> 圖2.2聊天室的登陸界面</p>
27、<p> 該界面用到了3個(gè)Jlabel,分別是“聊天室登錄器”、“賬號(hào)”、“密碼”。用到了1個(gè)JTextFilet,1個(gè)JpasswordField,和2個(gè)Jbuttton(登錄和注冊(cè))。然后用網(wǎng)格包布局來(lái)管理這些控件。當(dāng)填寫(xiě)了正確的賬號(hào)和密碼后點(diǎn)擊登錄按鈕可以進(jìn)入聊天界面,錯(cuò)誤則提示“用戶(hù)名或密碼錯(cuò)誤”:點(diǎn)擊注冊(cè)按鈕則可以進(jìn)入注冊(cè)賬號(hào)的界面。</p><p> 2.3.2注冊(cè)界面的實(shí)現(xiàn)<
28、/p><p> 注冊(cè)界面的實(shí)現(xiàn)如圖2.3所示:</p><p><b> 圖2.3注冊(cè)界面</b></p><p> 該界面主要用的了4個(gè)Jlabel分別是4個(gè)填寫(xiě)文字的部分,然后一個(gè)JtextField和2個(gè)JpasswordField,用來(lái)填寫(xiě)要注冊(cè)的賬號(hào)和密碼。這些控件被放入第一個(gè)Jpanel中,然后放于Jframe的居中部分。然后2
29、個(gè)按鈕放在了第二個(gè)jpanel中,放于jframe的南邊。</p><p> 2.3.3 聊天界面的實(shí)現(xiàn)</p><p> 聊天界面的實(shí)現(xiàn)如圖2.4所示:</p><p><b> 圖2.4聊天界面</b></p><p> 該界面的控件很少,用一個(gè)JtextArea來(lái)顯示用戶(hù)們的聊天內(nèi)容,該空間放在了居中部分
30、。然后是在南邊有一個(gè)JtextField用來(lái)填寫(xiě)用戶(hù)想說(shuō)的話(huà),然后點(diǎn)擊唯一的Jbutton(發(fā)送),就可以發(fā)送自己說(shuō)的話(huà)了。</p><p> 2.3.4服務(wù)器界面的實(shí)現(xiàn)</p><p> 服務(wù)器界面的實(shí)現(xiàn)如圖2.5所示:</p><p> 圖2.5服務(wù)器界面</p><p> 該界面只用到了2個(gè)Jbutton,用來(lái)啟動(dòng)和關(guān)閉服務(wù)器
31、。</p><p> 2.3.5 服務(wù)器驗(yàn)證登錄的實(shí)現(xiàn)</p><p> 當(dāng)用戶(hù)點(diǎn)擊了登錄界面的登錄按鈕之后,用戶(hù)填寫(xiě)的賬號(hào)和密碼會(huì)發(fā)送到服務(wù)器進(jìn)行驗(yàn)證,如果賬號(hào)密碼正確,則向客戶(hù)端發(fā)送登錄成功的信息;如果賬號(hào)密碼不正確,則向客戶(hù)端發(fā)送信息并以客戶(hù)端為父窗口彈出子窗口提示說(shuō):“賬號(hào)或密碼錯(cuò)誤!”。</p><p> 2.3.6 聊天功能的實(shí)現(xiàn)</p>
32、;<p> 用戶(hù)在聊天界面點(diǎn)擊發(fā)送按鈕后,消息發(fā)送到服務(wù)器,服務(wù)器的消息進(jìn)行分析,如果是私聊,分析出發(fā)送這和接收者后,將消息轉(zhuǎn)發(fā)給接收者。如果是發(fā)送給所有人,就遍歷管理服務(wù)器連接所有人線程的hashmap,得到連接所有人的線程,將消息發(fā)送給所有人,而客戶(hù)端則遍歷管理所有人的聊天界面的hashmap,得到所有人的聊天界面,將消息發(fā)送到所有人的界面上。</p><p><b> 聊天室的詳
33、細(xì)設(shè)計(jì)</b></p><p><b> 開(kāi)發(fā)環(huán)境的配置</b></p><p> JDK(Java Development kit)是 SUN公司提供的一套Java開(kāi)發(fā)環(huán)境,通常稱(chēng)之為它主要包括了一些常用的JDK工具、執(zhí)行時(shí)需要的函數(shù)庫(kù)、與C連接時(shí)所需的文件及一些Java應(yīng)用程序范例等。</p><p> JDK可以從SUN
34、公司的網(wǎng)站http://java.sun.com或國(guó)內(nèi)一些常用的資料下載網(wǎng)站免費(fèi)下載而得。下載完畢便可安裝JDK。</p><p> 在安裝完JDK之后,必須配置環(huán)境變量classpath和path,JDK才能夠正常運(yùn)行。</p><p> ①.在環(huán)境變量中新建名為classpath的環(huán)境變量(如已經(jīng)存在則只要修改),值為:E:\Program Files\Java\jdk1.6.0_
35、10\lib</p><p> ?、?classpath指明Java虛擬機(jī)要裝載類(lèi)的路徑,“.” 表示當(dāng)前目錄 </p><p> ?、?在環(huán)境變量中新建名為path的環(huán)境變量(如已經(jīng)存在則只要修改),值為:E:\Program Files\Java\jdk1.6.0_10\jre\bin</p><p> ?、?path指明了操作系統(tǒng)查找JDK工具如javac、j
36、ava等文件的路徑</p><p> Sun公司為程序開(kāi)發(fā)者提供了編譯、測(cè)試、執(zhí)行程序等一套完備的工具體系,它們被集中存放在主目錄的bin目錄下。</p><p><b> 開(kāi)發(fā)的過(guò)程</b></p><p> 開(kāi)發(fā)的過(guò)程不是盲目的,要有清晰的思路。分好工作區(qū),建好要用到的包,如:界面就寫(xiě)在名為view的包里面,后臺(tái)運(yùn)行的類(lèi)就寫(xiě)在mode
37、l包里面等。</p><p> 類(lèi)視圖1如圖3.1所示:</p><p><b> 圖3.1類(lèi)視圖1</b></p><p> 這是服務(wù)器端的開(kāi)發(fā),model層中的類(lèi)是在后臺(tái)運(yùn)行的程序,view層中的類(lèi)是服務(wù)器界面,啟動(dòng)服務(wù)器其實(shí)是調(diào)用的Server類(lèi),這個(gè)類(lèi)才是真正的服務(wù)器。而SerConClientThread類(lèi)是服務(wù)器連接客戶(hù)端的
38、線程類(lèi),它的作用是接收客戶(hù)端發(fā)來(lái)的消息并且轉(zhuǎn)發(fā)出去。ManageClientThread類(lèi)是管理服務(wù)器連接客戶(hù)端線程的類(lèi),這個(gè)類(lèi)用HashMap將服務(wù)器連接客戶(hù)端的所有線程管理了起來(lái),方便調(diào)用。</p><p> 同樣在客戶(hù)端的開(kāi)發(fā)也是有良好的分層結(jié)構(gòu),如圖3.2所示:</p><p><b> 圖3.2類(lèi)視圖2</b></p><p>
39、 其中view層是3個(gè)界面類(lèi),Chat是聊天界面類(lèi),ClientLogin是登陸界面類(lèi),Register是登陸界面類(lèi)。在這里我給大家介紹一下這些類(lèi)得功能,在model層中的ClientConServer類(lèi)是客戶(hù)端第一次連接服務(wù)器要調(diào)用的類(lèi),也就是登陸時(shí)要調(diào)用的類(lèi),將登陸的信息發(fā)給服務(wù)器驗(yàn)證,同時(shí)創(chuàng)建一個(gè)連接服務(wù)器的線程。而ClientUser類(lèi)是客戶(hù)端用戶(hù)類(lèi),當(dāng)用戶(hù)點(diǎn)擊登錄是會(huì)調(diào)用這個(gè)類(lèi),然后由這個(gè)類(lèi)調(diào)用ClientConServer
40、類(lèi)。 </p><p> 在tools層中,這里和之前服務(wù)器端的model基本上是一個(gè)原理,服務(wù)器端管理了服務(wù)器連接客戶(hù)端的線程,這里也是用ManageClientConServerThread類(lèi)來(lái)管理客戶(hù)端連接服務(wù)器端的線程的類(lèi)ClientConServerThread。這里的客戶(hù)端連接服務(wù)器的線程類(lèi)ClientConServerThread是用來(lái)讀取從服務(wù)器發(fā)來(lái)的消息,并顯示數(shù)來(lái)的。ManageChat則是
41、將所有用戶(hù)的聊天界面放在一個(gè)hashmap里管理起來(lái),當(dāng)遍歷這個(gè)hashmap時(shí),就可以將消息顯示在所有用戶(hù)的聊天界面了。然后可以看見(jiàn)在服務(wù)器端和客戶(hù)端都有一個(gè)common包,這個(gè)是公共包,里面放的是一些javaBean,里面有一些無(wú)參數(shù)的構(gòu)造器。它的存在使得客戶(hù)端與服務(wù)器端的信息交互成為了可能。其中Message類(lèi)里是發(fā)送信息時(shí)用到的構(gòu)造器,MessageType類(lèi)里面是服務(wù)器驗(yàn)證登錄后返回的信息,User類(lèi)里面則是用戶(hù)賬號(hào)和密碼的構(gòu)
42、造器。</p><p> 而完成上面的所有類(lèi)中的代碼,也是有一定的開(kāi)發(fā)順序的,首先是完成4個(gè)界面的開(kāi)發(fā)。 </p><p> 然后是實(shí)現(xiàn)各個(gè)界面上的控件的功能和客戶(hù)端與服務(wù)器的鏈接功能,先完成服務(wù)器,設(shè)置端口號(hào),完成啟動(dòng)服務(wù)器的功能;接著就是客戶(hù)端連接服務(wù)器的功能,再完成服務(wù)器對(duì)消息的驗(yàn)證和對(duì)線程的創(chuàng)建和管理。</p><p> 最后就是客戶(hù)端對(duì)消息的發(fā)送和接
43、收以及服務(wù)器端對(duì)消息的接收驗(yàn)證和轉(zhuǎn)發(fā)。</p><p><b> 聊天室功能的測(cè)試</b></p><p><b> ?。?)工作過(guò)程</b></p><p> 首先啟動(dòng)服務(wù)器,如果啟動(dòng)成功,會(huì)再控制臺(tái)打印出“在9999端口監(jiān)聽(tīng)”,然后再運(yùn)行用戶(hù)登錄的類(lèi)點(diǎn)擊注冊(cè)賬號(hào),賬號(hào)注冊(cè)成功后再回到登錄界面進(jìn)行登錄,點(diǎn)擊登錄按鈕就
44、可以進(jìn)入聊天室了。</p><p><b> ?。?)測(cè)試方法</b></p><p> 根據(jù)工作過(guò)程,來(lái)啟動(dòng)程序,如果在啟動(dòng)某一程序時(shí)出現(xiàn)了錯(cuò)誤,先查看錯(cuò)誤信息,然后再啟動(dòng)的程序的類(lèi)里面尋找問(wèn)題,并多使用System.out.printl方法來(lái)打印一些提示的話(huà)語(yǔ),方便自己知道程序運(yùn)行到了哪一步,是從哪里開(kāi)始程序沒(méi)再運(yùn)行了,通過(guò)這樣的測(cè)試方法就可以慢慢的找到錯(cuò)誤的根
45、源,從而不斷完善聊天室的功能。</p><p> ?。?)聊天功能的測(cè)試</p><p> 在測(cè)試聊天的功能時(shí),主要是站在用戶(hù)的角度,看看聊天的功能是否真的實(shí)現(xiàn),因此,當(dāng)程序全部都成功啟動(dòng)后,就可以注冊(cè)幾個(gè)賬號(hào),同時(shí)登陸2到3個(gè)進(jìn)入聊天室,讓他們相互聊天,在私聊和群聊里面都發(fā)送一些消息,看看是否達(dá)到了預(yù)期的效果。</p><p><b> 結(jié) 論<
46、;/b></p><p> (一)畢業(yè)設(shè)計(jì)的總結(jié)和展望</p><p> 本聊天室實(shí)現(xiàn)了簡(jiǎn)單的實(shí)時(shí)聊天功能,經(jīng)過(guò)細(xì)心的調(diào)試和排錯(cuò)解決了絕大部分的問(wèn)題。但幾乎每一個(gè)計(jì)算機(jī)程序都會(huì)有這樣那樣的不足,尤其是未經(jīng)過(guò)精心維護(hù)的非商業(yè)軟件。即使是作為操作系統(tǒng)的各種版本的Windows也時(shí)常會(huì)發(fā)生許多類(lèi)型的錯(cuò)誤和漏洞。本聊天系統(tǒng)程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計(jì)課題來(lái)說(shuō),尤其在開(kāi)始初期,感覺(jué)邏輯復(fù)雜
47、,難以控制,因此至今還有許多未能解決的缺陷。</p><p> 目前本聊天系統(tǒng)還有待完善的功能列表如下:</p><p> ?。?)因?yàn)樵O(shè)想中是在顯示聊天信息的地方點(diǎn)擊說(shuō)話(huà)人的賬號(hào)就可以直接與其私聊,但是也實(shí)現(xiàn)不了這個(gè)功能,所以私聊功能也暫時(shí)擱淺,只完成了群聊的功能。</p><p> ?。?)聊天系統(tǒng)缺乏各種屏蔽發(fā)言、發(fā)送表情、踢人等功能;</p>
48、<p> (3)因?yàn)殡娔X無(wú)法連接數(shù)據(jù)源,導(dǎo)致數(shù)據(jù)庫(kù)不能被程序使用,所以注冊(cè)功能最終也沒(méi)有實(shí)現(xiàn)。</p><p> ?。?)也沒(méi)有詳細(xì)考慮到服務(wù)器端對(duì)的聊天室管理功能。</p><p> 盡管畢業(yè)設(shè)計(jì)到現(xiàn)在已接近尾聲,但是對(duì)于上述的缺陷,本人還會(huì)不斷對(duì)聊天系統(tǒng)進(jìn)一步的完善它,期望在今后的日子里憑借自身的技術(shù)把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。</p><p&
49、gt;<b> ?。ǘ┙?jīng)驗(yàn)和感想</b></p><p> ?。?)通過(guò)這次畢業(yè)設(shè)計(jì)獲得的寶貴經(jīng)驗(yàn)</p><p> 經(jīng)驗(yàn)一:通過(guò)本次課題,我對(duì)C/S架構(gòu)的設(shè)計(jì)流程有了一個(gè)更深刻的認(rèn)識(shí),清晰的感覺(jué)到了服務(wù)器端與客戶(hù)端之間的交互過(guò)程,</p><p> 經(jīng)驗(yàn)二:這次的課題讓我對(duì)以前掌握的不太好的Socket編程,輸入輸出流的使用和多線程的使
50、用有了更好的了解。</p><p> 經(jīng)驗(yàn)三:這次的課題讓我掌握了一些以前不知道的知識(shí),比如hashmap是不能直接遍歷的,需要用到迭代器Iterator來(lái)實(shí)現(xiàn)。</p><p> 經(jīng)驗(yàn)四:通過(guò)這次的課題,我對(duì)以前擱置很久的數(shù)據(jù)庫(kù)知識(shí)又進(jìn)行了一遍新的回顧,雖然大多只是回顧了添刪改查和幾個(gè)約束的知識(shí)。</p><p> ?。?)完成畢業(yè)設(shè)計(jì)的感想</p>
51、;<p> Java聊天室作為畢業(yè)設(shè)計(jì),是本人目前做過(guò)的最大的程序。雖然大學(xué)期間在設(shè)計(jì)過(guò)一個(gè)簡(jiǎn)單的ASP聊天室設(shè)計(jì),并且經(jīng)過(guò)反復(fù)的調(diào)試修改也達(dá)到了一定的精確性,但接手這個(gè)題目時(shí)仍感覺(jué)十分棘手,但最終還是堅(jiān)持完成了這個(gè)任務(wù)。</p><p> 平時(shí)自己也常到其它聊天室進(jìn)行聊天,因此,自己也曾想過(guò)以后學(xué)會(huì)了電腦就一定親自設(shè)計(jì)一款聊天系統(tǒng),如今,總算實(shí)現(xiàn)了自己的夢(mèng)想。</p><p
52、> 在學(xué)習(xí)期間,本人還通過(guò)網(wǎng)上的各種JAVA源碼進(jìn)行學(xué)習(xí)與研究,我原以為這樣的設(shè)計(jì)水平將無(wú)法完成畢業(yè)設(shè)計(jì),但當(dāng)掌握了大部分應(yīng)用技巧時(shí),剩下的聊天系統(tǒng)思路的設(shè)計(jì)就顯得不是最大的障礙了。</p><p> 我在三個(gè)月內(nèi)寫(xiě)完這個(gè)程序,經(jīng)過(guò)了很多次的調(diào)試,終于完成了現(xiàn)在的程序。原先認(rèn)為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和肯鉆研的勇氣,就一定會(huì)完成,甚至達(dá)到意想不到的效果。</p><p
53、><b> 參考文獻(xiàn)</b></p><p> [1]王養(yǎng)廷.JAVA.SE應(yīng)用程序設(shè)計(jì)[M] .機(jī)械工業(yè)出版社,2007. 1~3</p><p> [2]張利國(guó).JAVA軟件開(kāi)發(fā)大師[M].科學(xué)出版社,2008.3~4</p><p> [3]李剛.瘋狂JAVA[M].人民郵電出版社,2010.4~6</p>
54、<p> [4]孫衛(wèi)琴.JAVA面向?qū)ο缶幊蘙M].電子工業(yè)出版社,2006.4~6</p><p> [5]Katthy Sierra.深入淺出JAVA程序設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2006.4~6</p><p> [6]Bruce Eckel. Think in java 4[M]. 機(jī)械工業(yè)出版社,2008.5~8</p><p>
55、; [7] 沃爾斯. Spring in action[M].人民郵電出版社,2005.5~7</p><p> [8]楊繼平. SQL Server2000自學(xué)教程[M].清華大學(xué)出版社,2000.7~35</p><p> [9]陳曼紅. 數(shù)據(jù)庫(kù)系統(tǒng)原理與自學(xué)應(yīng)用技術(shù)[M].機(jī)械工業(yè)出版社,2010.28~33</p><p> [10]王強(qiáng).
56、SQL Server數(shù)據(jù)庫(kù)原理及應(yīng)用[M]. 清華大學(xué)出版社,2003.28~33</p><p><b> 致 謝</b></p><p> 緊張而忙碌的畢業(yè)設(shè)計(jì)就要結(jié)束了,在完成了系統(tǒng)的功能設(shè)計(jì)后,我感到由衷的喜悅和自豪。在我做畢業(yè)設(shè)計(jì)期間,許多老師,同學(xué)和朋友給我無(wú)私的關(guān)懷和幫助,尤其是我的導(dǎo)師尤新華老師。在此,我要向他們表示衷心的感謝。</p>
57、<p> 首先,我要感謝學(xué)校的老師在畢業(yè)設(shè)計(jì)期間給了我悉心的關(guān)懷與幫助,并且給了我許多關(guān)鍵的,建設(shè)性的指導(dǎo)。</p><p> 這次的畢業(yè)設(shè)計(jì)讓我受益匪淺。可以這樣說(shuō),用計(jì)算機(jī)來(lái)解決繁重而低效的手工管理工作,計(jì)算機(jī)發(fā)展史上的必然。在理論課的學(xué)習(xí)中,我掌握了基礎(chǔ)課和專(zhuān)業(yè)課的理論知識(shí),也曾經(jīng)做過(guò)一些小的程序設(shè)計(jì),但真正動(dòng)手設(shè)計(jì)一個(gè)這種聊天類(lèi)的軟件,還是第一次。在這次的畢業(yè)設(shè)計(jì)中,我曾遇到了許多困難,
58、而在克服這些困難的過(guò)程中,我的各方面的能力又有了很大的提高,使我的理論知識(shí)更好的與實(shí)踐相結(jié)合,增強(qiáng)了專(zhuān)業(yè)技能的可實(shí)踐性。從調(diào)研,需求分析到查找資料,結(jié)構(gòu)設(shè)計(jì),詳細(xì)設(shè)計(jì)以及調(diào)試程序。我終于設(shè)計(jì)出了一個(gè)比較完整的,周密的,可使用的聊天系統(tǒng)。通過(guò)這次的畢業(yè)設(shè)計(jì),我真正了解了軟件工程設(shè)計(jì)的整個(gè)過(guò)程,既鞏固了以前的理論知識(shí),也為我以后的工作奠定了良好的基礎(chǔ)。</p><p> 當(dāng)然,由于時(shí)間的短促,我所完成的系統(tǒng)并不是盡
59、善盡美的,還有待進(jìn)一步的修改和完善。最后,請(qǐng)?jiān)试S我再一次向畢業(yè)期間無(wú)私幫助過(guò)我的老師,同學(xué)和朋友表示最衷心的感謝。</p><p><b> 附錄</b></p><p> ?。?)登錄界面源代碼:</p><p> package com.client.view;</p><p> import javax.sw
60、ing.*;</p><p> import com.client.model.ClientUser;</p><p> import com.client.tools.ManageChat;</p><p> import com.client.common.*;</p><p> import java.awt.*;</p&
61、gt;<p> import java.awt.event.*;</p><p> public class ClientLogin extends JFrame implements ActionListener {</p><p><b> //定義上面的組件</b></p><p> JLabel jbl1;<
62、/p><p> JPanel jpl1;</p><p> JLabel jbl2,jbl3;</p><p> JTextField jtf;</p><p> JPasswordField jpf;</p><p><b> //定義下面的組件</b></p><p&
63、gt; JPanel jpl2;</p><p> JButton jb1,jb2;</p><p> public static void main(String[] args) {</p><p> // TODO Auto-generated method stub</p><p> ClientLogin cl=new Cl
64、ientLogin();</p><p><b> }</b></p><p> public ClientLogin()</p><p><b> {</b></p><p> jpl1=new JPanel();</p><p> jpl2=new JPanel
65、();</p><p> jbl1=new JLabel("聊天室登陸器",JLabel.CENTER);</p><p> jbl2=new JLabel("賬號(hào)",JLabel.CENTER);</p><p> jbl3=new JLabel("密碼",JLabel.CENTER);</p
66、><p> jtf=new JTextField();</p><p> jpf=new JPasswordField();</p><p> jb1=new JButton("登錄");</p><p> jb1.addActionListener(this);</p><p> jb2=n
67、ew JButton("注冊(cè)");</p><p> jb2.addActionListener(this);</p><p> GridBagLayout gbl=new GridBagLayout();</p><p> GridBagConstraints gc1=new GridBagConstraints();//創(chuàng)建約束對(duì)象&l
68、t;/p><p> jpl1.setLayout(gbl);</p><p> gc1.fill=GridBagConstraints.BOTH;//設(shè)置fill約束,當(dāng)控件的大小小于單元格時(shí),填充單元格</p><p> gc1.weightx=0;</p><p> gc1.weighty=1;</p><p>
69、; gc1.insets=new Insets(10,10,10,10);</p><p> gc1.gridwidth=GridBagConstraints.REMAINDER;//下一個(gè)組件將是這行的最后一個(gè)組件</p><p> gbl.setConstraints(jbl1, gc1);//第一行填完,共一個(gè)組件</p><p> GridBagCo
70、nstraints gc2=new GridBagConstraints();</p><p> gc2.fill=GridBagConstraints.BOTH;</p><p> gc2.weightx=1;</p><p> gc2.weighty=1;</p><p> gbl.setConstraints(jbl2, gc2
71、);</p><p> gc2.weightx=3;</p><p> gc2.weighty=1;</p><p> gc2.insets=new Insets(0,0,0,10);</p><p> gc2.gridwidth=GridBagConstraints.REMAINDER;</p><p>
72、gbl.setConstraints(jtf, gc2);</p><p> GridBagConstraints gc3=new GridBagConstraints();</p><p> gc3.fill=GridBagConstraints.BOTH;</p><p> gc3.weightx=1;</p><p> gc3.
73、weighty=1;</p><p> gbl.setConstraints(jbl3, gc3);</p><p> gc3.weightx=3;</p><p> gc3.weighty=1;</p><p> gc3.insets=new Insets(0,0,10,10);</p><p> gc3.
74、gridwidth=GridBagConstraints.REMAINDER;</p><p> gbl.setConstraints(jpf, gc3);</p><p> jpl1.add(jbl1);</p><p> jpl1.add(jbl2);</p><p> jpl1.add(jtf);</p><
75、p> jpl1.add(jbl3);</p><p> jpl1.add(jpf);</p><p> jpl2.add(jb1);</p><p> jpl2.add(jb2);</p><p> this.add(jpl1,"Center");</p><p> this.ad
76、d(jpl2,"South");</p><p> this.setSize(300,200);</p><p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> this.setVisible(true);</p><p><b>
77、; }</b></p><p><b> @Override</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> // TODO Auto-generated method stub</p><p> if(e.get
78、Source()==jb1)</p><p><b> {</b></p><p> ClientUser clientUser=new ClientUser();</p><p> User u=new User();</p><p> u.setUserId(jtf.getText().trim());<
79、;/p><p> u.setPasswd(new String(jpf.getPassword()));</p><p> if(clientUser.checkUser(u))</p><p><b> {</b></p><p> Chat chat=new Chat(u.getUserId());</p&
80、gt;<p> //把聊天界面加入到管理類(lèi)</p><p> ManageChat.addChat(u.getUserId(),chat);</p><p> this.dispose();</p><p><b> }</b></p><p><b> else</b>&l
81、t;/p><p><b> {</b></p><p> JOptionPane.showMessageDialog(this,"用戶(hù)名密碼錯(cuò)誤");</p><p><b> }</b></p><p><b> }</b></p>&l
82、t;p> else if(e.getSource()==jb2)</p><p><b> {</b></p><p> new Register();</p><p> this.dispose();</p><p><b> }</b></p><p>&
83、lt;b> }</b></p><p><b> }</b></p><p> ?。?)注冊(cè)界面的源代碼:</p><p> package com.client.view;</p><p> import javax.swing.*;</p><p> import
84、java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.sql.*;</p><p> public class Register extends JFrame implements ActionListener {</p><p> JPanel jpl1
85、,jpl2;</p><p> JLabel jbl1,jbl2,jbl3,jbl4;</p><p> JTextField jtf;</p><p> JPasswordField jpf1,jpf2;</p><p> JButton jb1,jb2;</p><p> public static vo
86、id main(String[] args) {</p><p> // TODO Auto-generated method stub</p><p> Register rgt=new Register();</p><p><b> }</b></p><p> public Register()</
87、p><p><b> {</b></p><p> jpl1=new JPanel();</p><p> jpl2=new JPanel();</p><p> jbl1=new JLabel("注冊(cè)聊天賬號(hào)",JLabel.CENTER);</p><p> jbl2
88、=new JLabel("輸入賬號(hào)",JLabel.CENTER);</p><p> jbl3=new JLabel("輸入密碼",JLabel.CENTER);</p><p> jbl4=new JLabel("確認(rèn)密碼",JLabel.CENTER);</p><p> jtf=new JTe
89、xtField();</p><p> jpf1=new JPasswordField();</p><p> jpf2=new JPasswordField();</p><p> jb1=new JButton("確定");</p><p> jb1.addActionListener(this);</p
90、><p> jb2=new JButton("取消");</p><p> jb2.addActionListener(this);</p><p> GridBagLayout gbl=new GridBagLayout();</p><p> GridBagConstraints gc1=new GridBagCo
91、nstraints();//創(chuàng)建約束對(duì)象</p><p> jpl1.setLayout(gbl);</p><p> gc1.fill=GridBagConstraints.BOTH;//設(shè)置fill約束,當(dāng)控件的大小小于單元格時(shí),填充單元格</p><p> gc1.weightx=0;</p><p> gc1.weighty=
92、1;</p><p> gc1.insets=new Insets(10,10,10,10);</p><p> gc1.gridwidth=GridBagConstraints.REMAINDER;//下一個(gè)組件將是這行的最后一個(gè)組件</p><p> gbl.setConstraints(jbl1, gc1);//第一行填完,共一個(gè)組件</p>
93、<p> GridBagConstraints gc2=new GridBagConstraints();</p><p> gc2.fill=GridBagConstraints.BOTH;</p><p> gc2.weightx=1;</p><p> gc2.weighty=1;</p><p> gbl.se
94、tConstraints(jbl2, gc2);</p><p> gc2.weightx=3;</p><p> gc2.weighty=1;</p><p> gc2.insets=new Insets(0,0,10,10);</p><p> gc2.gridwidth=GridBagConstraints.REMAINDER;
95、</p><p> gbl.setConstraints(jtf, gc2);</p><p> GridBagConstraints gc3=new GridBagConstraints();</p><p> gc3.fill=GridBagConstraints.BOTH;</p><p> gc3.weightx=1;<
96、/p><p> gc3.weighty=1;</p><p> gbl.setConstraints(jbl3, gc3);</p><p> gc3.weightx=3;</p><p> gc3.weighty=1;</p><p> gc3.insets=new Insets(0,0,10,10);<
97、/p><p> gc3.gridwidth=GridBagConstraints.REMAINDER;</p><p> gbl.setConstraints(jpf1, gc3);</p><p> GridBagConstraints gc4=new GridBagConstraints();</p><p> gc4.fill=Gr
98、idBagConstraints.BOTH;</p><p> gc4.weightx=1;</p><p> gc4.weighty=1;</p><p> gbl.setConstraints(jbl4, gc4);</p><p> gc4.weightx=3;</p><p> gc4.weighty
99、=1;</p><p> gc4.insets=new Insets(0,0,10,10);</p><p> gc4.gridwidth=GridBagConstraints.REMAINDER;</p><p> gbl.setConstraints(jpf2, gc4);</p><p> jpl1.add(jbl1);<
100、/p><p> jpl1.add(jbl2);</p><p> jpl1.add(jtf);</p><p> jpl1.add(jbl3);</p><p> jpl1.add(jpf1);</p><p> jpl1.add(jbl4);</p><p> jpl1.add(jpf
101、2);</p><p> jpl2.add(jb1);</p><p> jpl2.add(jb2);</p><p> this.add(jpl1,"Center");</p><p> this.add(jpl2,"South");</p><p> this.se
102、tSize(300,260);</p><p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> this.setVisible(true);</p><p><b> }</b></p><p><b> @Override&
103、lt;/b></p><p> public void actionPerformed(ActionEvent e) {</p><p> // TODO Auto-generated method stub</p><p> Connection ct = null;</p><p> Statement sm=null;&l
104、t;/p><p> if(e.getSource()==jb1)</p><p><b> {</b></p><p><b> try {</b></p><p><b> //加載驅(qū)動(dòng)</b></p><p> Class.forName(&q
105、uot;sun.jdbc.odbc.JdbcOdbcDriver");</p><p><b> //得到連接數(shù)據(jù)源</b></p><p><b> try {</b></p><p> ct=DriverManager.getConnection("jdbc:odbc:mychat"
106、);</p><p> } catch (SQLException e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStackTrace();</p><p><b> }</b></p><p><
107、;b> try {</b></p><p> sm=ct.createStatement();</p><p> } catch (SQLException e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStackTrace()
108、;</p><p><b> }</b></p><p><b> try {</b></p><p> ResultSet rs=sm.executeQuery("select * from chat1");</p><p> while(rs.next())</
109、p><p><b> {</b></p><p> String userId=rs.getString(1);</p><p> String passwd=rs.getString(2);</p><p> if(userId.equals(this.jtf.getText()))</p><
110、p><b> {</b></p><p> JOptionPane.showMessageDialog(this,"用戶(hù)名已存在,請(qǐng)重新注冊(cè)!");</p><p> }else if((this.jpf1.getText()).equals(this.jpf2.getText()))</p><p><b
111、> {</b></p><p> JOptionPane.showMessageDialog(this,"密碼不一致,請(qǐng)重新注冊(cè)!");</p><p><b> }else</b></p><p><b> {</b></p><p> //把填寫(xiě)的
112、內(nèi)容寫(xiě)入數(shù)據(jù)庫(kù)</p><p><b> }</b></p><p><b> }</b></p><p> } catch (SQLException e1) {</p><p> // TODO Auto-generated catch block</p><p>
113、; e1.printStackTrace();</p><p><b> }</b></p><p> } catch (ClassNotFoundException e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStack
114、Trace();</p><p><b> }finally{</b></p><p><b> //關(guān)閉</b></p><p><b> try {</b></p><p> sm.close();</p><p> ct.close();
115、</p><p> } catch (SQLException e1) {</p><p> // TODO Auto-generated catch block</p><p> e1.printStackTrace();</p><p><b> }</b></p><p><b
116、> }</b></p><p> }else if(e.getSource()==jb2)</p><p><b> {</b></p><p> this.dispose();</p><p><b> }</b></p><p><b&g
117、t; }</b></p><p><b> }</b></p><p> ?。?)聊天界面的源代碼:</p><p> package com.client.view;</p><p> import javax.swing.*;</p><p> import com.c
118、lient.tools.*;</p><p> import com.client.common.*;</p><p> import com.client.model.*;</p><p> import java.util.*;</p><p> import java.awt.*;</p><p> i
119、mport java.awt.event.*;</p><p> import java.io.*;</p><p> public class Chat extends JFrame implements ActionListener {</p><p> public static void main(String[] args) {</p>
120、<p> //Chat chat=new Chat();</p><p><b> }</b></p><p> JTextArea jta;</p><p> JTextField jtf;</p><p> JButton jb;</p><p> JPanel jpl
121、;</p><p> String ownerId;</p><p> public Chat(String ownerId)</p><p><b> {</b></p><p> this.ownerId=ownerId;</p><p> jta=new JTextArea();&
122、lt;/p><p> jtf=new JTextField(15);</p><p> jb=new JButton("發(fā)送");</p><p> jb.addActionListener(this);</p><p> jpl=new JPanel();</p><p> jpl.add(
123、jtf);</p><p> jpl.add(jb);</p><p> this.add(jta,"Center");</p><p> this.add(jpl,"South");</p><p> this.setTitle(ownerId);</p><p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- java聊天室畢業(yè)論文
- 聊天室(java)-畢業(yè)論文
- 畢業(yè)論文 java聊天室的設(shè)計(jì)
- 基于java聊天室設(shè)計(jì)與實(shí)現(xiàn)
- java聊天室的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——課程論文
- java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- Java聊天室的設(shè)計(jì)與實(shí)現(xiàn).doc
- 基于java網(wǎng)頁(yè)版聊天室的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于java的聊天室的設(shè)計(jì)與實(shí)現(xiàn)—客戶(hù)端
- java聊天室設(shè)計(jì)
- 畢業(yè)論文---多人聊天室設(shè)計(jì)
- 基于web的聊天室畢業(yè)論文
- 基于java網(wǎng)絡(luò)聊天室設(shè)計(jì)
- java局域網(wǎng)聊天室系統(tǒng)畢業(yè)論文
- java聊天室的設(shè)計(jì)與實(shí)現(xiàn) 開(kāi)題報(bào)告
- 基于web的聊天室畢業(yè)論文
- 畢業(yè)論文asp聊天室
- 基于java的網(wǎng)絡(luò)聊天室
評(píng)論
0/150
提交評(píng)論