簡易網(wǎng)絡(luò)聊天軟件-畢業(yè)設(shè)計(jì)_第1頁
簡易網(wǎng)絡(luò)聊天軟件-畢業(yè)設(shè)計(jì)_第2頁
簡易網(wǎng)絡(luò)聊天軟件-畢業(yè)設(shè)計(jì)_第3頁
簡易網(wǎng)絡(luò)聊天軟件-畢業(yè)設(shè)計(jì)_第4頁
簡易網(wǎng)絡(luò)聊天軟件-畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、畢 業(yè) 設(shè) 計(jì)設(shè)計(jì)題目 簡易網(wǎng)絡(luò)聊天軟件摘 要隨著近年來計(jì)算機(jī)技術(shù)的快速發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價(jià)格,開發(fā)出更方便、更實(shí)用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影響了人們的聯(lián)系方式,使得人們可以在遠(yuǎn)隔千里之遙隨時(shí)通訊。過去的種種陳舊的聯(lián)系方式,已經(jīng)不能滿足現(xiàn)代生活的需要。既然Internet是當(dāng)前最熱門的技術(shù),作為網(wǎng)絡(luò)信息交流最直接的手段之一,開發(fā)聊天室就顯得特別重要。本文以開發(fā)基于Java語言的網(wǎng)絡(luò)聊天室為實(shí)踐基礎(chǔ),詳細(xì)介紹了聊天室的功能設(shè)計(jì)和具體的界面邏輯結(jié)構(gòu),包括聊天室的服務(wù)器管理系統(tǒng),還討論了群聊,私聊等功能的實(shí)現(xiàn)。本次

2、設(shè)計(jì)主要以Socket作為通訊的依賴和以O(shè)bject作為通訊的載體。除此之外,通訊根據(jù)一定的通訊協(xié)議的。界面方面主要采用Swing技術(shù)實(shí)現(xiàn)。為了提高效率的需要,采用了線程去解決。關(guān)鍵詞: 網(wǎng)絡(luò)聊天室 Java 群聊 私聊 Socket 線程目 錄1 緒論11.1 系統(tǒng)概述11.2 系統(tǒng)開發(fā)的意義21.3 可行性分析21.3.1 經(jīng)濟(jì)可行性21.3.2 技術(shù)可行性21.4 所開發(fā)的語言簡介21.5 本文技術(shù)介紹31.5.1 Swing編程31.5.2 線程編程31.5.3 C/S結(jié)構(gòu)工作模式簡介41.5.4 輸入輸出流51.5.5 TCP/IP協(xié)議52 系統(tǒng)總體分析與設(shè)計(jì)62.1 系統(tǒng)需求分析6

3、2.1.1系統(tǒng)服務(wù)端的功能分析62.1.2系統(tǒng)客戶端的功能分析62.1.3系統(tǒng)數(shù)據(jù)存儲(chǔ)方式的分析62.2 系統(tǒng)總體設(shè)計(jì)62.2.1系統(tǒng)總體用例圖62.2.2系統(tǒng)總體框架圖72.2.3系統(tǒng)服務(wù)端與客戶端的工作原理82.2.4系統(tǒng)服務(wù)端與客戶端的通訊協(xié)議92.2.5系統(tǒng)數(shù)據(jù)對象的設(shè)計(jì)103 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)123.1開發(fā)平臺(tái)123.2系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)133.2.1公共模塊的工具類的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)133.2.2數(shù)據(jù)模型層(Bean)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)153.2.3數(shù)據(jù)操作層(Dao)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)153.2.4業(yè)務(wù)邏輯與界面的實(shí)現(xiàn)層的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)184 系統(tǒng)關(guān)鍵技術(shù)的分析與設(shè)計(jì)224.1 服

4、務(wù)端與客戶端的連接224.2 服務(wù)線程的的設(shè)計(jì)224.3 協(xié)議的分析與定義245 系統(tǒng)展示與功能測試255.1 服務(wù)端的功能展示255.2 客戶端的功能展示275.3 日志文件的查看295.4 測試結(jié)果306 總結(jié)31參 考 文 獻(xiàn)32英 文 摘 要33致 謝34仲愷農(nóng)業(yè)技術(shù)學(xué)院畢業(yè)論文(設(shè)計(jì))成績評定表351 緒論1.1 系統(tǒng)概述Internet是目前世界上最大的計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò),它遍布全球,將世界各地各種規(guī)模的網(wǎng)絡(luò)連接成一個(gè)整體。作為Internet上一種先進(jìn)的,易于被人們所接受的信息檢索手段,World Wide Web(簡稱WWW)發(fā)展十分迅速,成為目前世界上最大的信息資源寶庫。據(jù)估計(jì),

5、目前Internet上已有上百萬個(gè)Web站點(diǎn),其內(nèi)容范圍跨越了教育科研、文化事業(yè)、金融、商業(yè)、新聞出版、娛樂、體育等各個(gè)領(lǐng)域,其用戶群十分龐大,因此,建設(shè)一個(gè)好的Web站點(diǎn)對于一個(gè)機(jī)構(gòu)的發(fā)展十分重要。由于近年來計(jì)算機(jī)技術(shù)的快速發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價(jià)格,開發(fā)出更方便、更實(shí)用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影響了人們的聯(lián)系方式,使得人們可以在遠(yuǎn)隔千里之遙隨時(shí)通訊。過去的種種陳舊的聯(lián)系方式,已經(jīng)不能滿足現(xiàn)代生活的需要。既然Internet是當(dāng)前最熱門的技術(shù),作為網(wǎng)絡(luò)信息交流最直接的手段之一,開發(fā)聊天室就顯得特別重要。本文以開

6、發(fā)基于Java語言的網(wǎng)絡(luò)聊天室為實(shí)踐基礎(chǔ),詳細(xì)介紹了聊天室的功能設(shè)計(jì)和具體的頁面邏輯結(jié)構(gòu),包括聊天室的服務(wù)器管理系統(tǒng),還討論了群聊、私聊等功能的實(shí)現(xiàn)。  聊天室是一個(gè)通過國際互聯(lián)信息網(wǎng)絡(luò)進(jìn)行多人通訊的系統(tǒng)。在這個(gè)信息極其發(fā)達(dá)的時(shí)代,目前我們可以用來進(jìn)行信息交流的方法非常多,比如電報(bào)、電話、電子郵件等通訊手段,這些或者不方便或者有局限性或者有費(fèi)用的問題,比如電話就是屬于費(fèi)用比較高的一種方式,而且一般情況下不能進(jìn)行多人會(huì)談,那么一個(gè)需要幾個(gè)人一起討論的會(huì)議就不能舉行,一般情況下都需要花費(fèi)大量的人力物力把這幾個(gè)人聚集到同一地點(diǎn)才能進(jìn)行討論。非但費(fèi)時(shí)費(fèi)力費(fèi)錢而且效果也不一定很好。電子郵件則不

7、是一種及時(shí)聯(lián)系的手段,需要一定時(shí)間才能到達(dá),只能作為一種輔助交流的手段。但是,聊天室就能很好的解決這個(gè)問題,我們不需要聚集在同一地點(diǎn),各自在不同的地點(diǎn)就可以在聊天室中發(fā)言,大家互相討論。它費(fèi)用低廉,信息交流速度快,只有這樣,才能在這個(gè)涌動(dòng)的社會(huì)中加強(qiáng)聯(lián)系,創(chuàng)造出更多的財(cái)富。  本課題開發(fā)了一個(gè)聊天室,它擁有聊天室的基本功能1.2 系統(tǒng)開發(fā)的意義本局域網(wǎng)聊天軟件適合于同一局域網(wǎng)中的不同主機(jī)間進(jìn)行通信。一些要求保密的工作,辦公室并不連接互聯(lián)網(wǎng),因此諸如QQ之類的聊天軟件不能使用,此時(shí)就需要有一款局域網(wǎng)聊天軟件,讓同一辦公室的辦公人員能實(shí)現(xiàn)通信,能夠進(jìn)行聊天。本軟件分為服務(wù)器端和客戶端兩種

8、不同的狀態(tài)。同時(shí)使用局域網(wǎng)聊天軟件的用戶,其一選擇服務(wù)器端,另一用戶選擇客戶端,客戶端通過連接服務(wù)器端的IP地址連接到服務(wù)器主機(jī),一旦連接成功,便可彼此之間發(fā)送信息,進(jìn)行聊天。1.3 可行性分析1.3.1 經(jīng)濟(jì)可行性該簡易局域網(wǎng)聊天程序作為本人的畢業(yè)設(shè)計(jì),硬件設(shè)備只需一臺(tái)連接到互聯(lián)網(wǎng)的計(jì)算機(jī),以便我在開發(fā)過程中所遇到問題可以上網(wǎng)搜查資料,還有就是需要閱讀一些關(guān)于Java、Socket 、TCP/IP開發(fā)方面的書籍來參考。1.3.2 技術(shù)可行性 該簡易局域網(wǎng)聊天程序是一個(gè)可視化界面操作的,主要是文件系統(tǒng)對數(shù)據(jù)進(jìn)行存儲(chǔ)、更新和維護(hù)。使用MyEclipse6.5為開發(fā)平臺(tái),它的Swing編程可以實(shí)現(xiàn)

9、系統(tǒng)的可視化同時(shí)它為我們提供了許多接口技術(shù)。1.3.3 開發(fā)可行性該系統(tǒng)開發(fā)語言為Java,開發(fā)平臺(tái)為Window XP下的MyEclipse6.5編程環(huán)境,后臺(tái)數(shù)據(jù)支持采用文件系統(tǒng)。1.4 所開發(fā)的語言簡介Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言(以下簡稱Java語言)和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、Internet計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷

10、更新。Java平臺(tái)由Java虛擬機(jī)(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分和擴(kuò)展部分。在硬件或操作系統(tǒng)平臺(tái)上安裝一個(gè)Java平臺(tái)之后,Java應(yīng)用程序就可運(yùn)行。現(xiàn)在Java平臺(tái)已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中運(yùn)行。Java應(yīng)用編程接口已經(jīng)從1.1x版發(fā)展到1.2版。目前常用的Java平臺(tái)基于Java1.4,最近版本為Java1.7。Java分為三個(gè)

11、體系JavaSE(Java2 Platform Standard Edition),JavaEE(Java 2 Platform,Enterprise Edition),JavaME(Java 2 Platform Micro Edition)。1.5 本文技術(shù)介紹本系統(tǒng)是采用Java中Swing為客戶機(jī)/服務(wù)器(C/S結(jié)構(gòu))應(yīng)用系統(tǒng)程序的前端開發(fā)的工具,基于Java的多線程開發(fā),采用輸入輸出流操作文件系統(tǒng),保存數(shù)據(jù)信息, 下面簡單介紹一下主要應(yīng)用到的相關(guān)技術(shù)。1.5.1 Swing編程Swing是目前Java中不可缺少的窗口工具組,是用戶建立圖形化用戶界面(GUI)程序的強(qiáng)大工具。Java

12、Swing組件自動(dòng)產(chǎn)生各種事件來響應(yīng)用戶行為。如當(dāng)用戶點(diǎn)擊按鈕或選擇菜單項(xiàng)目時(shí),Swing組件會(huì)產(chǎn)生一個(gè)ActionEvent。Swing組件會(huì)產(chǎn)生許多事件,如ActionEvents,ChangeEvents,ItemEvents等,來響應(yīng)用戶的鼠標(biāo)點(diǎn)擊行為,列表框中值的改變,計(jì)時(shí)器的開始計(jì)時(shí)等行為。在Java Swing編程中,通過注冊監(jiān)聽器,我們可以監(jiān)聽事件源產(chǎn)生的事件,從而在事件處理程序中處理我們所需要處理的用戶行為。 Java Swing中處理各組件事件的一般步驟是: (1) 新建一個(gè)組件(如JButton)。 (2) 將該組件添加到相應(yīng)的面板(如JPanel)。 (3) 注冊監(jiān)聽器

13、以監(jiān)聽事件源產(chǎn)生的事件(如通過ActionListener來響應(yīng)用戶點(diǎn)擊按鈕)。 (4)定義處理事件的方法(如在ActionListener中的actionPerformed中定義相應(yīng)方法)。 以上步驟我們可以用多種方法實(shí)現(xiàn)。但人們通常用二種方法。第一種方法是只利用一個(gè)監(jiān)聽器以及多個(gè)if語句來決定是哪個(gè)組件產(chǎn)生的事件;第二種方法是使用多個(gè)內(nèi)部類來響應(yīng)不同組件產(chǎn)生的各種事件,其具體實(shí)現(xiàn)又分兩種方式,一種是匿名內(nèi)部類,一種是一般內(nèi)部類。 1.5.2 線程編程在Java中創(chuàng)建線程有兩種方法:使用Thread類和使用Runnable接口。在使用Runnable接口時(shí)需要建立一個(gè)Thread實(shí)例。因此,

14、無論是通過Thread類還是Runnable接口建立線程,都必須建立Thread類或它的子類的實(shí)例。Java中線程的一些主要方法:(1)run()和start()把需要并行處理的代碼放在run()方法中,start()方法啟動(dòng)線程將自動(dòng)調(diào)用 run()方法.。(2)sleep() 線程(即調(diào)用該方法的線程)暫停執(zhí)行一段時(shí)間,讓其他線程有機(jī)會(huì)繼續(xù)執(zhí)行,但它并不釋放對象鎖。(3)join() 方法使調(diào)用該方法的線程在此之前執(zhí)行完畢,也就是等待調(diào)用該方法的線程執(zhí)行完畢后再往下繼續(xù)執(zhí)行。(4)wait()和notify()、notifyAll();wait()方法使當(dāng)前線程暫停執(zhí)行并釋放對象鎖標(biāo)志,讓

15、其他線程可以進(jìn)入Synchronized數(shù)據(jù)塊,當(dāng)前線程被放入對象等待池中。當(dāng)調(diào)用 notify()方法后,將從對象的等待池中移走一個(gè)任意的線程并放到鎖標(biāo)志等待池中,只有鎖標(biāo)志等待池中的線程能夠獲取鎖標(biāo)志;如果鎖標(biāo)志等待池中沒有線程,則notify()不起作用。 notifyAll()則從對象等待池中移走所有等待那個(gè)對象的線程并放到鎖標(biāo)志等待池中。(注意 這三個(gè)方法都是java.lang.Ojbect的方法!)“Synchronized”這個(gè)關(guān)鍵字用于保護(hù)共享數(shù)據(jù),當(dāng)然前提是要分清哪些數(shù)據(jù)是共享數(shù)據(jù)。每個(gè)對象都有一個(gè)鎖標(biāo)志,當(dāng)一個(gè)線程訪問該對象時(shí),被Synchronized修飾的數(shù)據(jù)將被“上鎖

16、”,阻止其他線程訪問。當(dāng)前線程訪問完這部分?jǐn)?shù)據(jù)后釋放鎖標(biāo)志,其他線程就可以訪問了。1.5.3 C/S結(jié)構(gòu)工作模式簡介C/S結(jié)構(gòu)的基本原則是將計(jì)算機(jī)運(yùn)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成,即“功能分布”原則??蛻舳送瓿蓴?shù)據(jù)處理、數(shù)據(jù)表示、用戶接口等功能;服務(wù)器端完成DBMS的核心功能。(1) C/S主要技術(shù)特征按功能劃分。服務(wù)器是服務(wù)的提供者,客戶機(jī)是消費(fèi)者; 共享資源。一個(gè)服務(wù)器可以在同一時(shí)刻為多個(gè)客戶機(jī)提供服務(wù);不對稱協(xié)議。在客戶機(jī)與服務(wù)器之間存在一種多對一的主從關(guān)系;定位透明性;基于消息的交換;可擴(kuò)展行。C/S可以水平或垂直地?cái)U(kuò)展。(2) 本文C/S結(jié)構(gòu)采用簡單的兩層C/S結(jié)構(gòu),如

17、下圖:圖1 兩層C/S結(jié)構(gòu)1.5.4 輸入輸出流Java語言的輸入輸出功能是十分強(qiáng)大而靈活的。在Java類庫中,IO部分的內(nèi)容是很龐大的,因?yàn)樗婕暗念I(lǐng)域很廣泛:標(biāo)準(zhǔn)輸入輸出,文件的操作,網(wǎng)絡(luò)上的數(shù)據(jù)流,字符串流,對象流,zip文件流.Java中主要的一些輸入輸出流有(1)InputStream 字節(jié)輸入流(2)OutputStream字節(jié)輸出流(3)ObjectOutputStream專門寫對象的流(4)ObjectIntputStream讀取對象流格式(5)Reader 字符輸入流(6)Writer 字符輸出流1.5.5 TCP/IP協(xié)議TCP/IP(Transmission Contro

18、l Protocol/Internet Protocol的簡寫,中文譯名為傳輸控制協(xié)議/互聯(lián)網(wǎng)絡(luò)協(xié)議)協(xié)議是Internet最基本的協(xié)議,簡單地說,就是由底層的IP協(xié)議和TCP協(xié)議組成的。網(wǎng)際協(xié)議(IP)負(fù)責(zé)將消息從一個(gè)主機(jī)傳送到另一個(gè)主機(jī)。為了安全消息在傳送的過程中被分割成一個(gè)個(gè)的小包。 傳輸控制協(xié)議(TCP)負(fù)責(zé)收集這些信息包,并將其按適當(dāng)?shù)拇涡蚍藕脗魉停诮邮斩耸盏胶笤賹⑵湔_地還原。傳輸協(xié)議保證了數(shù)據(jù)包在傳送中準(zhǔn)確無誤。2 系統(tǒng)總體分析與設(shè)計(jì)簡易網(wǎng)絡(luò)聊天軟件主要有服務(wù)器與客戶端兩個(gè)子系統(tǒng)組成的系統(tǒng),服務(wù)器主要提供了服務(wù)管理,配置管理,用戶管理,在線用戶管理,日志管理等功能;而客戶端就有

19、注冊用戶,登錄,退出,添加好友,刪除好友,查找用戶,公共聊天,私聊等功能。2.1 系統(tǒng)需求分析2.1.1系統(tǒng)服務(wù)端的功能分析 服務(wù)端應(yīng)該具有服務(wù)管理,配置管理,用戶管理,在線用戶管理,日志管理等功能;以下對這些功能做一些概要的分析(1)服務(wù)管理:具有開啟服務(wù)器,關(guān)閉服務(wù)器,顯示系統(tǒng)信息,記錄系統(tǒng)日志等功能;(2)配置管理:具有讀取配置文件,更新配置文件,設(shè)置配置,恢復(fù)默認(rèn)配置等功能;(3)用戶管理:具有用戶添加,用戶查詢,用戶修改,用戶刪除等功能;(4)在線用戶管理:具有在線用戶查詢,廣播系統(tǒng)消息等功能;(5)日志管理:具有顯示用戶操作信息,記錄用戶日志,查看用戶日志等功能;2.1.2系統(tǒng)客戶

20、端的功能分析 客戶端應(yīng)該具有用戶注冊,用戶登錄,用戶退出等功能;以下對這些功能做一些概要的分析(1)用戶注冊:用戶填寫個(gè)人資料后就可以嘗試向服務(wù)器發(fā)送注冊新用戶的請求,如果注冊成功,服務(wù)器就返回該新用戶的信息,否則就返回失敗原因。(2)用戶登錄:用戶輸入用戶JQ,密碼后就可以嘗試登錄,如果登錄成功就可以進(jìn)行聊天,添加好友,刪除好友,查找用戶等操作了。(3)用戶退出:用戶登錄完成操作后就可以選擇退出登錄了。2.1.3系統(tǒng)數(shù)據(jù)存儲(chǔ)方式的分析 考慮到系統(tǒng)的靈活性,本系統(tǒng)設(shè)計(jì)了兩個(gè)數(shù)據(jù)存儲(chǔ)方式,一種是數(shù)據(jù)庫存儲(chǔ)方式;一種是文件存儲(chǔ)方式。后來考慮到系統(tǒng)移植方便,就選擇了文件存儲(chǔ)方式先實(shí)現(xiàn),因?yàn)檫@樣移植系

21、統(tǒng)不需要安裝數(shù)據(jù)庫,只需要利用文件系統(tǒng)就可以了,數(shù)據(jù)庫存儲(chǔ)方式就當(dāng)作是以后的一種擴(kuò)展吧。2.2 系統(tǒng)總體設(shè)計(jì)2.2.1系統(tǒng)總體用例圖 圖2 系統(tǒng)總體用例圖2.2.2系統(tǒng)總體框架圖 圖3 系統(tǒng)總體框架圖2.2.3系統(tǒng)服務(wù)端與客戶端的工作原理Socket()建立流式套接字返回套接字號(hào)sBind()把套接字s與本地地址相連接Listen()通知TCP/IP,服務(wù)器準(zhǔn)備好接受連接Accept()接受連接,得到第二個(gè)套接字nsReceive()與Send()在ns上讀寫數(shù)據(jù),直到結(jié)束Closet()關(guān)閉套接字nsCloset()關(guān)閉最初套接字sSocket()建立流式套接字,返回套接字號(hào)sConnect

22、()把套接字s與遠(yuǎn)程主機(jī)相連Receive()與Send()在ns上讀寫數(shù)據(jù)Close()關(guān)閉套接字s,結(jié)束TCP/IP對話服 務(wù) 端客 戶 端圖4系統(tǒng)服務(wù)端與客戶端的工作原理2.2.4系統(tǒng)服務(wù)端與客戶端的通訊協(xié)議服務(wù)端與客戶端的通訊是通過ObjectOutputStream(對象輸出流),ObjectInputStream(對象輸入流)兩個(gè)流過實(shí)現(xiàn)的。所以定義了以下一個(gè)JQMessage類來作為傳輸?shù)臄?shù)據(jù)載體。JQMessage的定義具體如圖5:圖5傳輸?shù)臄?shù)據(jù)載體JQMessage的具體定義雖然有了JQMessage這個(gè)類作為傳輸?shù)妮d體,但是這是還不夠的,我們必須要有統(tǒng)一的協(xié)議,于是就定義了

23、以下的一個(gè)傳輸協(xié)議(如圖6):圖6傳輸協(xié)議2.2.5系統(tǒng)數(shù)據(jù)對象的設(shè)計(jì)(1)好友類(FriendUser):用戶登錄后,發(fā)送好友的到相應(yīng)的用戶到客戶端屬性名類型說明jqunmInteger好友的jq號(hào)碼nickNameString好友的用戶昵稱signatureString好友的個(gè)性簽名photoInteger好友的圖片號(hào)stateInteger好友的狀態(tài)(2)日志類(Log):用來保存用戶操作信息的屬性名類型說明idInteger日志idtypeInteger日記類型useridInteger用戶idnicknameString用戶昵稱whatString什么事ipString用戶的IP地址

24、timeDate該事發(fā)生的時(shí)間(3)用戶登錄類(LoginUser):用來表示用戶登錄時(shí)傳輸?shù)臄?shù)據(jù)對象屬性名類型說明jqnumInteger登錄的jq號(hào)碼typeString登錄的密碼stateInteger登錄的狀態(tài)(4)頭像類(Portrait):用來表示用戶的頭像號(hào)碼與路徑屬性名類型說明numInteger頭像的號(hào)碼pathString頭像的路徑(5)公共聊天信息類(PublicRecord):用來表示用戶的公共聊天時(shí)的相關(guān)信息屬性名類型說明fromUserFriendUser從哪個(gè)好友中發(fā)送sendTimeDate發(fā)送的時(shí)間readTimeDate收到的時(shí)間contentString聊

25、天信息的內(nèi)容(6)好友私聊信息類(Record):用來表示用戶的好友之間私聊時(shí)的相關(guān)信息屬性名類型說明idInteger聊天信息的idfromidInteger發(fā)送者的jq號(hào)碼toidInteger接收者的jq號(hào)碼sendTimeDate發(fā)送的時(shí)間readTimeDate收到的時(shí)間idReadBoolean是否己經(jīng)收到contentString聊天信息的內(nèi)容pathNameString保存聊天信息的路徑isSendBoolean是否是發(fā)送的信息(7)注冊用戶類(RegUser):用來表示用戶注冊時(shí)的相關(guān)信息屬性名類型說明jqnumInteger注冊的jq號(hào)碼realnameString用戶的真

26、實(shí)名字nicknameString用戶的昵稱passwordString用戶的密碼(8)用戶類(User):用來表示用戶保存的相關(guān)信息屬性名類型說明idInteger用戶的idjqunmInteger用戶的jq號(hào)碼realnameString用戶的真實(shí)名字nicknameString用戶的昵稱sexInteger用戶的性別ageInteger用戶的年齡passwordString用戶的密碼signatureString用戶的個(gè)性簽名emailString用戶的eamilphotoInteger用戶的相片號(hào)碼stateInteger用戶的狀態(tài)listFriendVector<Integer

27、>用戶的好友jq號(hào)碼集合registerTimeDate用戶的注冊時(shí)間(9)用戶性別類(UserSex):用來表示用戶性別的相關(guān)信息屬性名類型說明typeInteger類型為0代表男,1代表女nameString“男”或者“女”(10)用戶狀態(tài)類(UserState):用來表示用戶狀態(tài)的相關(guān)信息屬性名類型說明stateInt狀態(tài)的數(shù)字表示sNameString狀態(tài)的名字jqnumInteger用戶的jq號(hào)碼(11)傳輸信息類(JQMessage):客戶端與服務(wù)端的傳輸消息類屬性名類型說明typeInteger操作的類型objObject傳輸?shù)木唧w操作對象數(shù)據(jù)3 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)3.1開

28、發(fā)平臺(tái)1) 硬件平臺(tái)l CPU:P4 1.8GHz;l 內(nèi)存:256MB以上;l 彩顯:17英寸高分辨率(分辨率1024x768或以上);l 顯卡:64M以上的顯卡;l 硬盤:80G IDE以上7200轉(zhuǎn);2) 軟件平臺(tái)l 操作系統(tǒng):Windows XP;l 開發(fā)環(huán)境:JDK6.0l 開發(fā)工具:MyEclipse6.5;3.2系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)本系統(tǒng)的實(shí)現(xiàn)主要采用了三層模式去開發(fā):數(shù)據(jù)模型層(Bean);數(shù)據(jù)操作層(Dao);業(yè)務(wù)邏輯與界面的實(shí)現(xiàn)層。除此以處,還有一個(gè)公共的工具類模塊。3.2.1公共模塊的工具類的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)公共模塊的工具類都是一些靜態(tài)的方法,它們的作用就是幫助其他的類能夠

29、更好地實(shí)現(xiàn)功能。工具類有以下的幾個(gè),如圖7圖7工具類工具類的說明:(1)DateDeal類:日期處理類。主要有幾個(gè)日期處理的方法,根據(jù)不同的需求得到不同格式的日期格式。類名稱DateDeal類描述日期處理類。包描述Tools函數(shù)描述public static String getCurrentDate()將當(dāng)前日期返回"yyyy-MM-dd"的字符串表現(xiàn)形式。public static String getCurrentTime()將當(dāng)前日期返回"yyyy年MM月dd日 HH:mm:ss"的字符串表現(xiàn)形式。public static String get

30、Date(Date date)將Date的日期返回"yyyy-MM-dd HH:mm:ss"的字符串表現(xiàn)形式。public static String getDate2(Date date)根據(jù)當(dāng)前日期返回不同形式的字符串形式。如果與當(dāng)前時(shí)間所在年月日相同,則返回"HH:mm:ss"形式,否則返回"yyyy-MM-dd HH:mm:ss"。(2)FileDeal類:文件處理類。主要有根據(jù)后綴名與文件判斷該文件是否屬于某種文件。類名稱FileDeal類描述文件信息處理類包描述Tools函數(shù)描述public static boolean

31、isKindOFType(File file,String suffixName)根據(jù)文件的后綴名判斷文件是否屬于某種類型的public static BufferedImage getICON(String fileName)加載BufferedImage對象。(3)GetParameter類:獲取參數(shù)類。主要有獲得屬性文件;保存屬性文件;回復(fù)缺省值;取得缺省值的配置文件等方法。類名稱GetParameter類描述獲取參數(shù)。包描述Tools函數(shù)描述public static Properties getProp() throws Exception獲得屬性文件。public static b

32、oolean saveProp(String keys,String values) throws IOException保存屬性文件。public static boolean setDefault() throws IOException回復(fù)缺省值public static Properties getDefault() throws IOException取得缺省值的配置文件。(4)JQCreater類:JQ號(hào)生成器類。主要有產(chǎn)生JQ號(hào)碼;返回保存JQ號(hào)碼的文件;JQ號(hào)碼是否為屏蔽的JQ號(hào)碼;返回允許注冊否等方法。類名稱JQCreater類描述JQ號(hào)生成器類。包描述Tools函數(shù)描述pr

33、ivate RandomAccessFile getFile() throws FileNotFoundException,IOException返回保存JQ號(hào)碼的文件。public Integer createJQ() throws FileNotFoundException, IOException產(chǎn)生JQ號(hào)碼private boolean isAllowed(Integer num)JQ號(hào)碼是否為屏蔽的JQ號(hào)碼。private boolean isAllowReged(Integer num) throws FileNotFoundException, IOException返回允許注冊

34、否public Integer createID() throws FileNotFoundException, IOException產(chǎn)生User用戶IDpublic void saveIDJQ(int id,int num) throws IOException保存用戶的id和JQ號(hào)碼(5)RandomUtil類:數(shù)學(xué)類-隨機(jī)數(shù)生成類。主要有生成a-b的隨機(jī)數(shù);返回0-a的隨機(jī)數(shù)的方法。類名稱RandomUtil類描述數(shù)學(xué)類-隨機(jī)數(shù)生成類包描述Tools函數(shù)描述public static int randomInt(int a,int b)生成a-b的隨機(jī)數(shù)public static in

35、t randomInt(int a)返回0-a的隨機(jī)數(shù)。(6)SetFont類:設(shè)置字體類。主要有使用UIManager設(shè)置某些組件的缺省字體的方法。類名稱SetFont類描述設(shè)置字體類。包描述Tools函數(shù)描述public static void setFont(Font font)使用UIManager設(shè)置某些組件的缺省字體。3.2.2數(shù)據(jù)模型層(Bean)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)模型層(Bean)主要是用來表示數(shù)據(jù)模型的一些對象類。在該層中主要定義了與各種數(shù)據(jù)信息相關(guān)的類,并且每個(gè)類中都會(huì)有相應(yīng)的屬性,也有各種屬性的獲取與設(shè)置的方法,不但如此,在這些類中,有些還改寫了hashCode()方法

36、與equals()方法,以達(dá)到數(shù)據(jù)唯一的的效果,也改寫了toString ()方法,以方便保存文件時(shí)的輸出。數(shù)據(jù)模型層中主要的文件概況如圖8圖8數(shù)據(jù)模型層中的文件概況3.2.3數(shù)據(jù)操作層(Dao)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)操作層主要有一個(gè)總的接口,然后根據(jù)不同的需要,實(shí)現(xiàn)了這個(gè)總的接口而得到不同的實(shí)現(xiàn)類。(1)接口類的設(shè)計(jì)主要有查詢?nèi)?;添加一個(gè)對象;刪除一個(gè)對象;更新一個(gè)對象;根據(jù)id查詢對象。其設(shè)計(jì)如圖9圖9接口DAO的設(shè)計(jì)(2)LogDaoByFile類的主要實(shí)現(xiàn)了接口Dao,并且根據(jù)需要適當(dāng)?shù)靥砑恿艘恍儆谧约旱姆椒?。如圖10圖10 LogDaoDAOByFile類的設(shè)計(jì)(3)UserDao

37、ByFile類的主要實(shí)現(xiàn)了接口Dao,并且根據(jù)需要適當(dāng)?shù)靥砑恿艘恍儆谧约旱姆椒?。如圖11圖11 UserDAOByFile類的設(shè)計(jì)(4)RecordDaoByFile類的主要實(shí)現(xiàn)了接口Dao,并且根據(jù)需要適當(dāng)?shù)靥砑恿艘恍儆谧约旱姆椒?。如圖12圖12 RecordDAOByFile類的設(shè)計(jì)3.2.4業(yè)務(wù)邏輯與界面的實(shí)現(xiàn)層的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)(1)服務(wù)端的設(shè)計(jì)與實(shí)現(xiàn)服務(wù)端具有服務(wù)管理,配置管理,用戶管理,在線用戶管理,日志管理等功能;以下對服務(wù)管理與用戶管理做一些詳細(xì)的設(shè)計(jì)分析。1)服務(wù)管理的主要功能是,開啟服務(wù)器,并且監(jiān)聽客戶端,如果有客戶端連接成功,就開啟服務(wù)線程為其服務(wù),并且是不停地監(jiān)聽著客

38、戶端的連接??偭鞒虉D與類設(shè)計(jì)圖,分別如圖13,圖14圖13 服務(wù)管理的流程圖圖14 服務(wù)管理的類設(shè)計(jì)圖2)用戶管理的主要功能是顯示用戶,查找用戶,添加用戶,修改用戶,刪除用戶等,該類的功能框架圖與類設(shè)計(jì)圖分別如圖15,圖16圖15 用戶管理的功能圖圖16 用戶管理的類設(shè)計(jì)圖(2)客戶端的設(shè)計(jì)與實(shí)現(xiàn)客戶端具有用戶注冊,用戶登錄,用戶退出等功能;以下對用戶注冊和用戶登錄做一個(gè)詳細(xì)的設(shè)計(jì)分析。1)用戶注冊的主要功能就是讓用戶填寫個(gè)人資料后嘗試申請新用戶,其流程圖如圖17圖17用戶注冊的流程圖2)用戶登錄的主要功能就是讓嘗試登錄,登錄成功后就可以繼續(xù)其他的操作了。其流程圖如圖18圖18用戶登錄的流程圖

39、4 系統(tǒng)關(guān)鍵技術(shù)的分析與設(shè)計(jì)4.1 服務(wù)端與客戶端的連接服務(wù)端主要的是ServicePane這個(gè)服務(wù)管理類,該類實(shí)現(xiàn)了Runnable類,并且實(shí)現(xiàn)了其中的run方法,所以該服務(wù)管理類是一個(gè)線程類。其中run方法中的設(shè)計(jì)如圖19圖19 run方法的設(shè)計(jì)客戶端主要是開啟一個(gè)Socket的端口,并嘗試與服務(wù)端的連接。連接成功后再根據(jù)用戶的需求去做相關(guān)的操作,代碼如下:tryclient = new Socket(serverIp,serverPort);catch(Exception e)e.printStackTrace();4.2 服務(wù)線程的的設(shè)計(jì)在服務(wù)端與客戶端順利連接上之后,服務(wù)端就會(huì)開啟一

40、個(gè)服務(wù)線程為其服務(wù),這也是整個(gè)服務(wù)端工作的關(guān)鍵。以下就是服務(wù)線程的主要代碼Overridepublic void run() if(Server.isFileWay)try while(isServiceRun && ois!=null && oos!=null)/是一個(gè)阻塞的方法Object obj = ois.readObject();if(obj instanceof JQMessage)JQMessage message = (JQMessage)obj;int type = message.getType();switch(type)case 10:/

41、處理登錄dealRegiter(message);break;case 20:/登錄DealLogin(message);break;case 24:/退出dealQuit(message);break;case 30:/處理發(fā)送私人聊天信息dealMessage(message);break;case 32:/處理發(fā)送公共聊天信息dealPublicMessage(message);break;case 40:/處理發(fā)送查找在線用戶數(shù)dealFindOnlineUserNum();break;case 42:/處理查找在線用戶dealFindOnlineUser();break;case 4

42、4:/添加好友的要求dealAddUser(message);break;case 47:/查找的在線用戶的要求(公共聊天時(shí)的請求)dealPublicFindOnlineUser();break;case 49:/服務(wù)端發(fā)送刪除好友的請求dealDeleteFriend(message);break;case 50:/表示客戶端用戶更改了狀態(tài)(要求服務(wù)器更新狀態(tài))updateUserState(jqnum, (Integer)message.getObj();break;case 51:/表示客戶端用戶要求更新在線用戶sendAllPublicFindOnlineUser();break;e

43、lsewriteSysLog("客戶端"+getClientIP()+"發(fā)送錯(cuò)誤的數(shù)據(jù)信息到服務(wù)端"); catch (IOException e) /邏輯的慎密這里容易忽略removeClientForException(this);closeClient();/更新每個(gè)人的在線用戶 catch (ClassNotFoundException e) removeClientForException(this);closeClient();elsewriteSysLog("注意:系統(tǒng)暫不支持?jǐn)?shù)據(jù)庫方式!請使用文件方式保存數(shù)據(jù)!");/

44、讓客戶端退出letClientQuit();4.3 協(xié)議的分析與定義整個(gè)簡易網(wǎng)絡(luò)聊天軟件的工作之所以能夠正常地運(yùn)作,通訊協(xié)議就處于一個(gè)很重要的地位。就是因?yàn)橛兄ㄓ崊f(xié)議,服務(wù)端與客戶端都有了遵循的原則。協(xié)議定義如圖20圖20 通訊協(xié)議的定義5 系統(tǒng)展示與功能測試5.1 服務(wù)端的功能展示(1)開啟服務(wù)端,開啟服務(wù)監(jiān)聽客戶端的連接,如圖21圖21 通訊協(xié)議的定義(2)配置管理模塊功能顯示,如圖22圖22 配置管理模塊(3)用戶管理模塊的功能顯示,如圖23圖23 用戶管理模塊(4)在線用戶管理模塊的功能顯示,如圖24圖24 在線用戶管理模塊(5)日志管理模塊的功能顯示,如圖25圖25 日志管理模塊5

45、.2 客戶端的功能展示(1)客戶端的登錄界面的功能顯示,如圖26圖26 登錄界面(2)登錄后的主操作界面的功能顯示,如圖27圖27 主操作界面(3)用戶注冊的功能顯示,如圖28圖28 用戶注冊5.3 日志文件的查看(1)系統(tǒng)正常運(yùn)行之后,就會(huì)出現(xiàn)如圖29的一些文件夾與文件,其中l(wèi)eaveRecords文件夾是用來保存用戶的離線信息的;logs是用來保存用戶的操作日記的;userRecords文件夾是用來保存用戶的聊天記錄的;users文件夾是用來保存每個(gè)用戶的信息的;log.txt文件是系統(tǒng)的日記文件;Sperties則是系統(tǒng)的配置文件。圖29 系統(tǒng)生成的文件夾(2)系統(tǒng)日志

46、文件的查看,如圖30 圖30 系統(tǒng)日記文件(3)用戶日志文件的查看,如圖31圖31 用戶日記文件5.4 測試結(jié)果經(jīng)過以上的一些功能顯示與功能的測試,以及通過查看系統(tǒng)日文件,用戶日記文件,可以知道整個(gè)簡易網(wǎng)絡(luò)聊天軟件是可以正常運(yùn)行了。6 總結(jié) 此次畢業(yè)設(shè)計(jì)是我們從大學(xué)畢業(yè)生走向未來重要的一步。從最初的選題,開題到分析,編碼,直到完成設(shè)計(jì)。其間,查找資料,老師指導(dǎo),與同學(xué)交流,反復(fù)測試修改代碼,每一個(gè)過程都是對自己能力的一次檢驗(yàn)和充實(shí)。 通過這次實(shí)踐,我了解了多方面的Java知識(shí),熟悉了Socket通訊的原理,也懂得了線程(Thread)的實(shí)現(xiàn)。這次實(shí)踐中所用到的知識(shí)有些是課本上所學(xué)過的,有些是課

47、外自學(xué)的。也因?yàn)檫@樣,使我在鞏固學(xué)校所學(xué)的知識(shí)之余,也增加了一些課外的學(xué)習(xí)經(jīng)驗(yàn)。不過這次實(shí)踐最重要的還是鍛煉了自己的設(shè)計(jì)實(shí)踐能力,培養(yǎng)了自己獨(dú)立設(shè)計(jì)能力。此次畢業(yè)設(shè)計(jì)是對我專業(yè)知識(shí)和專業(yè)基礎(chǔ)知識(shí)一次實(shí)際檢驗(yàn)和鞏固,同時(shí)也是走向工作崗位前的一次熱身。 畢業(yè)設(shè)計(jì)收獲很多,比如學(xué)會(huì)了查找相關(guān)資料相關(guān)標(biāo)準(zhǔn),分析數(shù)據(jù),提高了自己的自我分析能力與自我學(xué)習(xí)能力。在設(shè)計(jì)過程中常常會(huì)遇到一些問題解決不了的,我會(huì)就上網(wǎng)搜查資料或者與同學(xué)交流,請教指導(dǎo)老師。經(jīng)過這些努力,最后還是把這些問題給解決了。 雖然在整個(gè)畢業(yè)設(shè)計(jì)的實(shí)踐中,過程是漫長而艱苦的。但是經(jīng)過努力最后還是把這個(gè)畢業(yè)設(shè)計(jì)給完成了,看到自己設(shè)計(jì)的作品可以正

48、常地工作起來,自己也會(huì)感到欣慰,那些設(shè)計(jì)過程的辛酸自然而然地拋之腦后了。 但是畢業(yè)設(shè)計(jì)也暴露出自己專業(yè)基礎(chǔ)的很多不足之處。比如缺乏綜合應(yīng)用專業(yè)知識(shí)的能力,對材料的不了解,等等。這次實(shí)踐是對自己大學(xué)四年所學(xué)的一次大檢閱,使我明白自己知識(shí)還很淺薄,雖然馬上要畢業(yè)了,但是自己的求學(xué)之路還很長,以后更應(yīng)該在工作中學(xué)習(xí),努力使自己 成為一個(gè)對社會(huì)有所貢獻(xiàn)的人,為社會(huì)建設(shè)添上自己的微薄之力。參 考 文 獻(xiàn)1 張海藩. 軟件工程導(dǎo)論(第5版). 北京:清華大學(xué)出版社,2008.22 吳功宜. 計(jì)算機(jī)網(wǎng)絡(luò)(第3版). 北京:清華大學(xué)出版社,2007.33 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu). 北京:清華大學(xué)出版社,2

49、006.84 Bruce Eckel 著,陳昊鵬 譯. Java編程思想. 北京:機(jī)械工業(yè)出版社,2008.15 潘曉雷,于浚泊,王丹等譯. Java2入門經(jīng)典. 北京:機(jī)械工業(yè)出版社,2007.46 吳亞峰,紀(jì)超. Java SE6.0. 北京:人民郵電出版社,2007.117 Gary Cornell著,葉乃文等譯. Java核心技術(shù). 北京:機(jī)械工業(yè)出版社,2008.78 孫衛(wèi)琴. Java面向?qū)ο缶幊? 北京:電子工業(yè)出版社,2006.79 陳剛. Eclipse從入門到精通(第2版). 北京:清華大學(xué)出版社,2007.710 周恒民譯. Java TCP/IP Socket編程. 北京:機(jī)械工業(yè)出版社,2009.211 孫衛(wèi)琴. Java網(wǎng)絡(luò)編程精解. 北京:電子

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論