(精品)企業(yè)內(nèi)部通信系統(tǒng)(2013年優(yōu)秀畢業(yè)設(shè)計(jì))_第1頁
(精品)企業(yè)內(nèi)部通信系統(tǒng)(2013年優(yōu)秀畢業(yè)設(shè)計(jì))_第2頁
(精品)企業(yè)內(nèi)部通信系統(tǒng)(2013年優(yōu)秀畢業(yè)設(shè)計(jì))_第3頁
(精品)企業(yè)內(nèi)部通信系統(tǒng)(2013年優(yōu)秀畢業(yè)設(shè)計(jì))_第4頁
(精品)企業(yè)內(nèi)部通信系統(tǒng)(2013年優(yōu)秀畢業(yè)設(shè)計(jì))_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本科畢業(yè)論文(設(shè)計(jì)) 企業(yè)內(nèi)部通信系統(tǒng)第一章概論31.1開發(fā)背景31.2 課題現(xiàn)狀31.3 畢業(yè)設(shè)計(jì)及論文的主要工作3第二章系統(tǒng)分析42.1 需求分析42.2 可行性分析42.21可行性要求42.22 成本可行性分析42.23 技術(shù)可行性分析4第三章系統(tǒng)設(shè)計(jì)53.1 系統(tǒng)目標(biāo)53.2 系統(tǒng)功能53.3 數(shù)據(jù)庫設(shè)計(jì)63.31數(shù)據(jù)庫分析63.32企業(yè)內(nèi)部通信系統(tǒng)的E-R圖63.33數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)73.4 主要模塊的設(shè)計(jì)83.41主窗體模塊設(shè)計(jì)83.42公共模塊設(shè)計(jì)83.43系統(tǒng)托盤模塊設(shè)計(jì)103.44系統(tǒng)工具模塊設(shè)計(jì)103.45用戶管理模塊設(shè)計(jì)113.46通信模塊設(shè)計(jì)12第四章詳細(xì)設(shè)計(jì)和代碼實(shí)現(xiàn)154.1主要模塊的實(shí)現(xiàn)過程154.2通信模塊的實(shí)現(xiàn)過程20第五章總結(jié)22致謝23參考文獻(xiàn)23Abstract23摘要: 本文設(shè)計(jì)一個(gè)類似飛鴿傳書的企業(yè)內(nèi)部通信系統(tǒng),系統(tǒng)基于UDP/IP協(xié)議,使用 Java Swing、Java Socket和JavaDB數(shù)據(jù)庫進(jìn)行開發(fā)。系統(tǒng)實(shí)現(xiàn)了信息通信、系統(tǒng)設(shè)置、文件傳輸、訪問公共資源、互訪對方主機(jī)五大功能。本系統(tǒng)結(jié)構(gòu)清晰、界面友好、操作簡單、通用性強(qiáng),可以大大提高了企業(yè)的工作效率。關(guān)鍵字:企業(yè)、信息通信、socket1概論1.1開發(fā)背景近幾年,隨著網(wǎng)絡(luò)的迅速發(fā)展和全球信息化速度的加快,網(wǎng)絡(luò)通信已經(jīng)不算是新鮮事物了,但大多數(shù)網(wǎng)絡(luò)通訊需要借助Internet上的服務(wù)器,這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問題,如浪費(fèi)網(wǎng)絡(luò)資源、遭遇到網(wǎng)絡(luò)攻擊、病毒的入侵等等。為了保證企業(yè)內(nèi)部的通信安全,減少員工溝通和交流工作中遇見的種種問題,由于互聯(lián)網(wǎng)上的網(wǎng)絡(luò)通信工具給企業(yè)內(nèi)部信息交流帶來的不便,所以為了方便企業(yè)內(nèi)部用戶之間的溝通、保證企業(yè)內(nèi)部局域網(wǎng)的安全,需要開發(fā)一個(gè)基于局域網(wǎng)的信息收發(fā)系統(tǒng)的即時(shí)通訊工具。1.2 課題現(xiàn)狀企業(yè)內(nèi)部通信系統(tǒng)是基于局域網(wǎng)的即時(shí)通信工具,可以說是一個(gè)internet通信工具的小規(guī)模版本,一般采用UDP或者TCP協(xié)議體系等來實(shí)現(xiàn),開發(fā)技術(shù)已經(jīng)比較成熟,國外的通信工具較有名的有ICQ、MSN Messenger、國產(chǎn)的QQ、新浪UC都實(shí)現(xiàn)了廣域網(wǎng)的即時(shí)通信。在最近幾年,國內(nèi)的局域網(wǎng)通信工具較有代表性有飛鴿傳書、飛秋,這兩款軟件的快速、實(shí)效、迷你、簡單的特點(diǎn)受到了廣大企業(yè)的好評。這些工具的實(shí)現(xiàn)方式具體細(xì)節(jié)不易得之,但它無非是利用各種平臺上的網(wǎng)絡(luò)通信接口,基于TCP/IP或者UDP/IP協(xié)議架構(gòu)下的軟件產(chǎn)品。對于一個(gè)企業(yè)內(nèi)網(wǎng),這些功能的實(shí)現(xiàn)相比于廣域網(wǎng)更加簡單。所以還是有很大研究價(jià)值的。2.系統(tǒng)分析2.1 需求功能分析本系統(tǒng)的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)一個(gè)企業(yè)內(nèi)部局域網(wǎng)通信系統(tǒng),企業(yè)內(nèi)部職工可以方便的進(jìn)行交流,可以大大的提高職工的工作效率。根據(jù)企業(yè)對局域網(wǎng)通信的需求,本系統(tǒng)主要包括信息通信、用戶搜索、訪問公共資源、訪問對方主機(jī)、系統(tǒng)設(shè)置五大功能。各功能概述:信息通信:信息通信是企業(yè)內(nèi)部通信系統(tǒng)的核心功能,它用于不同職工之間的通信,這種通信方式能夠?qū)崿F(xiàn)多個(gè)職工之間的通信,而不存在類似電話的占線問題,增加了任務(wù)分配的新方式,從而提高企業(yè)的工作效率。用戶搜索:用戶搜索用于搜索企業(yè)局域網(wǎng)內(nèi)的其他用戶,系統(tǒng)會根據(jù)用戶所設(shè)置的IP搜索范圍搜索所有計(jì)算機(jī)上的用戶。訪問公共資源:訪問公共資源用于實(shí)現(xiàn)企業(yè)內(nèi)部公共服務(wù)器上資源訪問的功能。訪問對方主機(jī):訪問對方主機(jī)用于兩人聊天情況下對對方主機(jī)的訪問和控制的功能。系統(tǒng)設(shè)置:系統(tǒng)設(shè)置用于設(shè)置用戶界面、公共路徑、公告欄等的功能。2.2數(shù)據(jù)庫分析該系統(tǒng)是一個(gè)桌面應(yīng)用程序,它不像web應(yīng)用那樣需要配置到指定的服務(wù)器上,所以數(shù)據(jù)庫和該系統(tǒng)應(yīng)存在于同一計(jì)算機(jī)中,這樣,不僅節(jié)省了開銷,而且還提高了系統(tǒng)的安全性。該系統(tǒng)所用數(shù)據(jù)庫為JAVADB數(shù)據(jù)庫。由于該數(shù)據(jù)庫的運(yùn)行環(huán)境平臺要求較低,一般的電腦都可以滿足它的硬件條件。企業(yè)內(nèi)部通信系統(tǒng)的E-R圖該系統(tǒng)的實(shí)體包括用戶和窗口位置兩個(gè)實(shí)體,分別記錄著通信窗口的絕對位置和用戶的信息。 用戶實(shí)體用戶實(shí)體主要包括IP信息、PC名稱、用戶信息、系統(tǒng)信息等,它記錄了搜索到的用戶和所有的用戶信息。用戶實(shí)體的E-R圖如下。 用戶實(shí)體頭 像提示文本用戶信息IP地 址主機(jī)名稱 圖1用戶實(shí)體E-R圖窗體位置實(shí)體窗體位置實(shí)體記錄著窗體最后的移動(dòng)位置和窗體大小等信息,主要包括窗體位置的橫坐標(biāo)和豎坐標(biāo)(下圖用X、Y軸坐標(biāo)表示)、窗體的高度和寬度。它的E-R圖如下所示:X坐標(biāo)窗口實(shí)體Y坐標(biāo)窗體高度窗體寬度圖2窗體位置E-R圖2.3 可行性分析2.3.1 技術(shù)可行性分析局域網(wǎng)通信系統(tǒng)的技術(shù)已經(jīng)非常成熟,首先,從硬件上講,計(jì)算機(jī)硬件速度現(xiàn)在已經(jīng)不是問題,高速便捷的網(wǎng)絡(luò)已經(jīng)十分普遍,這些為本系統(tǒng)的運(yùn)行打下堅(jiān)實(shí)的基礎(chǔ)。從軟件的角度上講,數(shù)據(jù)庫技術(shù)已經(jīng)相當(dāng)成熟(目前用得比較多的有SQL Server, JavaDB等),并且處理能力也非常強(qiáng),這為海量數(shù)據(jù)的存儲和處理打下了堅(jiān)實(shí)的基礎(chǔ),同時(shí),使用java開發(fā)圖形界面程序也相當(dāng)普遍。有了這些技術(shù)的支持,我們成功開發(fā)一個(gè)局域網(wǎng)通信系統(tǒng)沒有任何技術(shù)風(fēng)險(xiǎn)。2.3.2 經(jīng)濟(jì)可行性分析經(jīng)濟(jì)可行性主要是對項(xiàng)目的經(jīng)濟(jì)效益進(jìn)行評價(jià)。本系統(tǒng)開發(fā)完成后可縮減工作時(shí)間,提高工作效率,而且簡單易操作,不需對使用人員進(jìn)行培訓(xùn),不管是在資金上還是效率上都能達(dá)到預(yù)期的效果。本系統(tǒng)開發(fā)經(jīng)費(fèi)對于企業(yè)在經(jīng)濟(jì)上是可以接受的,并且本系統(tǒng)實(shí)施后可以顯著提高工作效率,有助于企業(yè)的信息化管理,所以為該企業(yè)內(nèi)部通信系統(tǒng)在經(jīng)濟(jì)上是可行的。3.系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)目標(biāo)系統(tǒng)根據(jù)企業(yè)對內(nèi)部通信系統(tǒng)的要求,本系統(tǒng)可以實(shí)現(xiàn)以下目標(biāo)。 操作簡單、界面簡潔美觀。 更方便訪問企業(yè)公共資源。 及時(shí)顯示企業(yè)公共信息。 在通信窗口顯示對方IP信息。 局域網(wǎng)內(nèi)網(wǎng)用戶自動(dòng)搜索。 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。 3.2 系統(tǒng)功能系統(tǒng)功能結(jié)構(gòu)圖如下:企業(yè)信息通信系統(tǒng)信息通信系統(tǒng)設(shè)置用戶搜索訪問公共資源訪問對方主機(jī)圖 3系統(tǒng)功能結(jié)構(gòu)圖3.3 數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)在該系統(tǒng)中的數(shù)據(jù)庫db_EQ包含兩個(gè)數(shù)據(jù)表,分別為用戶信息表tb_users和窗體位置信息表tb_location。 用戶信息表用戶信息表用來保存企業(yè)內(nèi)的通信用戶,表tb_users如下所示:1.用戶信息表tb_users字段名數(shù)據(jù)類型是否為空是否主鍵默認(rèn)值描 述I PVarchar(16)NOYES用戶IPHostVarchar(30)YESNONULL主機(jī)名稱NameVarchar(20)YESNONULL姓 名TooltipVarchar(50)YESNONULL提示文本IconVarchar(50)YESNONULL頭像圖標(biāo) 窗體位置信息表窗體位置表用來保存窗體的位置和大小,表tb_location如下所示:2.窗體位置信息表tb_location字段名數(shù)據(jù)類型是否為空是否主鍵默認(rèn)值描 述xLocationIntYESNONULLX軸坐標(biāo)yLocationIntYESNONULLY軸坐標(biāo)heightIntYESNONULL窗體高度widthIntYESNONULL窗體寬度3.4 主要模塊的設(shè)計(jì)本系統(tǒng)分六個(gè)模塊:主窗體模塊、公共模塊、系統(tǒng)托盤模塊、系統(tǒng)工具模塊、用戶管理模塊和通信模塊,其中通信模塊是本系統(tǒng)的核心模塊。3.4.1主窗體模塊設(shè)計(jì)主窗體界面是本系統(tǒng)的用戶列表,它由用戶列表、系統(tǒng)選項(xiàng)卡、公告提示等組成。其中系統(tǒng)選項(xiàng)卡用于切換不同的管理界面,包括系統(tǒng)設(shè)計(jì)和系統(tǒng)工具界面。主窗體的設(shè)計(jì)效果圖如下所示:圖4 主窗體界面示意圖3.4.2公共模塊設(shè)計(jì)在本系統(tǒng)的項(xiàng)目空間中,有部分模塊是公用的,或者多個(gè)模塊甚至整個(gè)系統(tǒng)的配置信息是被多個(gè)模塊重復(fù)調(diào)用完成業(yè)務(wù)的邏輯。其中有關(guān)數(shù)據(jù)庫的操作、連接數(shù)據(jù)庫、創(chuàng)建本機(jī)IP的默認(rèn)用戶(并添加到數(shù)據(jù)庫中)、從數(shù)據(jù)庫中獲取窗體位置和大小、添加或刪除指定用戶、更新用戶信息等。3.4.3系統(tǒng)托盤模塊設(shè)計(jì)系統(tǒng)托盤模塊用于定義系統(tǒng)欄圖標(biāo)。本系統(tǒng)的主窗體是繼承對話框窗體編寫的,該窗體在系統(tǒng)任務(wù)欄不會顯示任務(wù)標(biāo)題,如果主窗體最小化之后將會隱藏,這時(shí)必須使用快捷鍵或者系統(tǒng)托盤中的圖標(biāo)執(zhí)行顯示窗體的命令。系統(tǒng)托盤包含相應(yīng)的菜單,右鍵點(diǎn)擊會彈出選擇菜單,菜單包括三個(gè)選項(xiàng),分別是:“訪問服務(wù)器”、“打開”、“退出”。圖示如下: 圖5系統(tǒng)托盤示意圖3.4.4系統(tǒng)工具模塊設(shè)計(jì)本系統(tǒng)的工具模塊起到維護(hù)系統(tǒng)的作用,包括更換程序外觀、。設(shè)置IP范圍、用戶搜索和系統(tǒng)更新、設(shè)置系統(tǒng)公告路徑、設(shè)置公共程序路徑、系統(tǒng)登錄等功能。在該系統(tǒng)第一次運(yùn)行的時(shí),用戶搜索功能可以搜索內(nèi)部網(wǎng)絡(luò)中所有正在運(yùn)行的計(jì)算機(jī)。本系統(tǒng)工具模塊中使用了Java的LookAndFeel外觀技術(shù),不同的外觀中控件的外觀也會不同,就比如我們常用的電腦中,windows經(jīng)典樣式和windowsXP樣式外觀的按鈕、列表、菜單、工具欄甚至窗體的外觀都不相同。在本系統(tǒng)中提供了“當(dāng)前系統(tǒng)”和“JAVA默認(rèn)值”兩個(gè)外觀選項(xiàng),其中“JAVA默認(rèn)值”是Swing默認(rèn)的外觀,不需要特別設(shè)置,而“當(dāng)前系統(tǒng)”外觀需要使用相應(yīng)的方法獲取當(dāng)前系統(tǒng)的外觀名稱,然后將該外觀應(yīng)用于默認(rèn)的外觀。效果圖如下所示:圖6系統(tǒng)工具界面示意圖3.4.5用戶管理模塊設(shè)計(jì)用戶管理模塊類似于聊天軟件的好友列表,其中包含所有用戶信息,另外在用戶名稱上單擊鼠標(biāo)右鍵,會彈出相應(yīng)的管理菜單,在該菜單中包含“添加用戶”、“更名”、“刪除用戶”、“信使群發(fā)(在沒有多選用戶的情況下無法進(jìn)行信使群發(fā))”、“訪問主機(jī)資源”和“訪問公共程序”,其中“訪問主機(jī)資源”是訪問該用戶的共享文件夾。相應(yīng)的運(yùn)行效果如下:圖7用戶管理界面示意圖3.4.6通信模塊設(shè)計(jì)通信模塊是本系統(tǒng)中的核心模塊,它用于局域網(wǎng)內(nèi)的用戶之間的通信,而卻這種通信方式能夠?qū)崿F(xiàn)多個(gè)用戶之間的通信,不會存在像我們打電話一樣時(shí)的占線問題,增加了任務(wù)分配的方式。本模塊可以使用UDP協(xié)議和信史兩種方式發(fā)送信息。我們通常所說的通信工具,都是采用的客戶機(jī)/服務(wù)器(C/S)架構(gòu)的,C/S結(jié)構(gòu)是這樣的一種結(jié)構(gòu):它包括一個(gè)客戶機(jī)(或前端),一個(gè)服務(wù)器(或稱后端),客戶機(jī)的作用是訪問和處理遠(yuǎn)程服務(wù)器上的數(shù)據(jù),服務(wù)器的作用是接收和處理客戶機(jī)的數(shù)據(jù)請求。有時(shí),可能有多個(gè)客戶向同一個(gè)服務(wù)器同時(shí)請求服務(wù),這就需要服務(wù)器決定怎樣處理這些請求。Client/Server結(jié)構(gòu)是當(dāng)前數(shù)據(jù)庫應(yīng)用程序中極為流行的一種方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來,任何客戶機(jī)都可以通過訪問服務(wù)器而獲得所需的信息。Client/Server模型最終可歸結(jié)為一種“請求/應(yīng)答”關(guān)系。一個(gè)請求總是首先被客戶發(fā)出,然后服務(wù)器總是被動(dòng)地接收請求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請求之前,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個(gè)客戶提出請求后,服務(wù)進(jìn)程被“喚醒”并且為客戶提供服務(wù),對客戶的請求做出所需要的應(yīng)答。其工作示意圖如下:圖8 C/S模式下的網(wǎng)絡(luò)拓?fù)鋱D但是本系統(tǒng)如果要做成C/S架構(gòu)的話,需要在局域網(wǎng)內(nèi)設(shè)置一個(gè)服務(wù)器,而在企業(yè)局域網(wǎng)內(nèi),網(wǎng)絡(luò)結(jié)構(gòu)不是集中式的而是分布式的,可能沒有一臺機(jī)器來充當(dāng)服務(wù)器這個(gè)角色,同樣用服務(wù)器會增加本系統(tǒng)的設(shè)置難度,不符合本系統(tǒng)方便、快捷的特色,同時(shí)增加服務(wù)器后,所有數(shù)據(jù)都會經(jīng)過服務(wù)器保存處理,需要有專人看管維護(hù)服務(wù)器,顯得更麻煩。所以本系統(tǒng)采用每個(gè)程序自己既充當(dāng)客戶機(jī),又充當(dāng)服務(wù)器,自己來維護(hù)網(wǎng)絡(luò)上的用戶列表,每兩個(gè)客戶端進(jìn)行連接的時(shí)候都直接連通而不用增設(shè)服務(wù)器中轉(zhuǎn)。示意圖如下:圖9 無公共服務(wù)器模式下的網(wǎng)絡(luò)拓?fù)鋱D當(dāng)然,上述圖示只是通信數(shù)據(jù)的一個(gè)流向示意圖,不是真正的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),也就是說其中的服務(wù)器可能只是裝了服務(wù)器軟件的一臺普通工作站。在底層的數(shù)據(jù)流向中,也就是網(wǎng)絡(luò)的物理連結(jié),并非我們這個(gè)軟件所能決定的,我們的所做都是在一個(gè)透明的數(shù)據(jù)通信層之上的。在該模塊中,使用基于UDP協(xié)議的數(shù)據(jù)報(bào)和套接字實(shí)現(xiàn)計(jì)算機(jī)之間的信息通信。UDP(User Datagram Protocol)協(xié)議就是“用戶數(shù)據(jù)報(bào)協(xié)議”,它是一種無連接的協(xié)議,在該協(xié)議進(jìn)行數(shù)據(jù)傳輸時(shí),發(fā)送方只需要知道對方的IP地址和端口號就可以發(fā)送數(shù)據(jù)了,并不需要進(jìn)行連接,當(dāng)遠(yuǎn)程主機(jī)端口號出于監(jiān)聽狀態(tài)時(shí),則UDP必須出于連接狀態(tài)。通信的聊天界面運(yùn)行效果如下所示:圖10 聊天界面示意圖4.詳細(xì)設(shè)計(jì)和代碼實(shí)現(xiàn)4.1主窗體模塊的實(shí)現(xiàn)過程主窗體實(shí)現(xiàn)部分包括創(chuàng)建主窗體和記錄窗體位置。其中創(chuàng)建主窗體的步驟如下:(1)創(chuàng)建JXCFrame類,在類中創(chuàng)建窗體的對象,為窗體添加選項(xiàng)卡面板,并添加用戶列表、系統(tǒng)工具、系統(tǒng)設(shè)置3個(gè)選項(xiàng)卡和狀態(tài)欄標(biāo)簽、公告按鈕等屬性。在構(gòu)造方法中初始化窗體上的控件。數(shù)據(jù)庫操作類、首選項(xiàng)對象等屬性,為窗體添加時(shí)間監(jiān)聽器、為公告信息按鈕添加監(jiān)聽器等。(2)初始化Socket服務(wù)器,指定端口為1111,如初始化失敗,則提示服務(wù)器端口被占用或本軟件已運(yùn)行,并退出本系統(tǒng)。用于接收其他用戶發(fā)送的通信信息。關(guān)鍵代碼如下:try / 啟動(dòng)通訊服務(wù)端口ss = new DatagramSocket(1111); catch (SocketException e2) if (e2.getMessage().startsWith(Address already in use)showMessageDialog(服務(wù)端口被占用,或者本軟件已經(jīng)運(yùn)行。);System.exit(0);(3) checkPlacard方法,用于檢測系統(tǒng)公告,當(dāng)公告路徑中存在系統(tǒng)公告是,將從文件中獲取完整信息,調(diào)用pushMessage()方法將信息壓入公告信息棧中。關(guān)鍵代碼如下:private void checkpacard() / 檢測公告信息方法String placardDir = preferences.get(placardPath, null);if (placardDir = null) pushMessage(未設(shè)置公告路徑);return;File placard = new File(placardDir);try if (placard.exists() & placard.isFile() StringBuilder placardStr = new StringBuilder();Scanner sc = new Scanner(new FileInputStream(placard);while (sc.hasNextLine() placardStr.append(sc.nextLine();pushMessage(placardStr.toString(); catch (FileNotFoundException e) pushMessage(公告路徑錯(cuò)誤,或公告文件不存在);(4)initUserInfoButton()方法用于初始化本地用戶信息,并在主窗體左上角顯示本地用戶的頭像和名稱,會在用戶更改本地用戶名稱時(shí)同步更新。(5) main()方法,本方法首先獲取用戶設(shè)置的界面外觀,然后調(diào)用UIManager類設(shè)置指定的外觀,生成主窗體對象。最后初始化服務(wù)器端口和系統(tǒng)欄圖標(biāo)。以下為關(guān)鍵代碼:public static void main(String args) try String laf = preferences.get(lookAndFeel, java默認(rèn));/獲取用戶選擇的外觀if (laf.indexOf(當(dāng)前系統(tǒng))-1)UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/設(shè)置外觀EQ frame = new EQ();frame.setVisible(true);/顯示窗體frame.SystemTrayInitial();/ 初始化系統(tǒng)欄frame.server();/啟動(dòng)服務(wù)端口frame.checkPlacard();/檢測系統(tǒng)公告 catch (Exception e) e.printStackTrace(); 記錄窗體的位置步驟如下:為窗體添加監(jiān)聽器,當(dāng)改變窗體的位置和大小時(shí),將調(diào)用saveLocation()方法將窗體和位置大小保存到數(shù)據(jù)庫中。saveLocation(),該方法中調(diào)用了DAO類中的updateLocation將窗體的位置和大小保存到數(shù)據(jù)庫中。4.2公共模塊的實(shí)現(xiàn)過程公共模塊包括數(shù)據(jù)庫操作類和系統(tǒng)工具類。其中DAO類主要負(fù)責(zé)有關(guān)數(shù)據(jù)庫的操作,該類在構(gòu)造方法中驅(qū)動(dòng)并連接數(shù)據(jù)庫,然后將構(gòu)造方法設(shè)置為private私有屬性,通過靜態(tài)的getdao()獲取DAO類的實(shí)例對象,這是簡單的單例模式。在連接數(shù)據(jù)庫時(shí),可以指定create參數(shù)為true直接創(chuàng)建數(shù)據(jù)庫,但在此之前需要調(diào)用dbExist()方法判斷數(shù)據(jù)庫是否存在。Resource類是企業(yè)內(nèi)部通信系統(tǒng)中的工具類,該類中的方法都是靜態(tài)的,可以直接調(diào)用,而不用創(chuàng)建Resource類的實(shí)例對象。這些工具方法包括搜索用戶的方法、登錄公共資源的方法、信使群發(fā)的方法和單條信息發(fā)送的方法。4.3系統(tǒng)工具模塊的實(shí)現(xiàn)過程(1)createSysToolPanel()方法,用于創(chuàng)建系統(tǒng)工具選項(xiàng)卡,在該選項(xiàng)卡中包括界面選擇、用戶搜索和系統(tǒng)操作3部分,其中系統(tǒng)操作用于程序更新,它們都被添加到系統(tǒng)工具面板中,createSysToolPanel()方法必須設(shè)置好面板的布局和初始化工作。(2)在createSysToolPanel()方法中創(chuàng)建界面選擇部分,該部分以列表控件顯示了兩種外觀選擇,當(dāng)用戶選擇其中以種外觀并單擊“確定”按鈕之后,選擇外觀會保存到首選項(xiàng)中,然后提示重新運(yùn)行本軟件。(3)在createSysToolPanel()方法中創(chuàng)建用戶搜索部分,包括搜索列表、搜索進(jìn)度條和“搜索新用戶”3個(gè)控件,當(dāng)單擊“搜索新用戶”按鈕時(shí),系統(tǒng)會根據(jù)用戶在系統(tǒng)設(shè)置界面所設(shè)置的IP搜索范圍搜索所有計(jì)算機(jī)信息,并創(chuàng)建相應(yīng)的用戶對象,然后保存到數(shù)據(jù)庫中。(4)創(chuàng)建“搜索新用戶”按鈕的事件監(jiān)聽器SearchUserActionListener類,調(diào)用Resource工具類的searchUsers()方法搜索指定IP范圍內(nèi)的所有用戶。系統(tǒng)工具類中的searchUsers()方法,該方法用于搜索局域網(wǎng)內(nèi)的通信用戶,也就是搜索企業(yè)內(nèi)的所有職工。本方法將獲取用戶指定的IP范圍,并在該范圍內(nèi)搜索所有可以訪問的計(jì)算機(jī),如果用戶沒有指定IP范圍,系統(tǒng)默認(rèn)的是-55。該方法的關(guān)鍵代碼如下:try for (int l = ipsInt0; l = ipeInt0; l+) boolean b0 = l ipeInt0; / 記錄第一層循環(huán)的條件int k = l != ipsInt0 ? 0 : ipsInt1; / 從第二次循環(huán)以后k賦值0for (; b0 ? k 256 : k = ipeInt1; k+) boolean b1 = b0 | k ipeInt1; / 記錄第二層循環(huán)的條件int j = k != ipsInt1 ? 0 : ipsInt2; / 從第二次循環(huán)以后j賦值0for (; b1 ? j 256 : j = ipeInt2; j+) boolean b2 = b1 | b1 ? j 256 : j ipeInt2;int i = j != ipsInt2 ? 0 : ipsInt3;for (; b2 ? i 256 : i = ipeInt3; i+) if(!button.isSelected()progressBar.setIndeterminate(false);return;Thread.sleep(100);/線程休息100毫秒String ip = l + . + k + . + j + . + i;progressBar.setString(正在搜索: + ip);/取消進(jìn)度條的滾動(dòng)if (tree.addUser(ip, search)/添加新用戶model.addElement(添加+ ip + );catch(Exception e) e.printStackTrace();4.4系統(tǒng)托盤模塊的實(shí)現(xiàn)過程在JDK6.0中,AWT新增加了SystemTray類和TrayIcon類,它們可以在系統(tǒng)托盤區(qū)創(chuàng)建一個(gè)托盤程序。SystemTray類表示桌面右下角的系統(tǒng)托盤,系統(tǒng)托盤由運(yùn)行在桌面上的所有應(yīng)用程序共享,可以使用getSystemTray()方法獲取系統(tǒng)托盤對象,該方法總是對每個(gè)應(yīng)用程序返回相同的實(shí)例。并不是所有的操作系統(tǒng)都支持系統(tǒng)托盤,如果當(dāng)前系統(tǒng)不支持托盤的話,該方法將自動(dòng)拋出異常。為避免程序出現(xiàn)錯(cuò)誤,在獲取系統(tǒng)托盤實(shí)例之前,需要檢查系統(tǒng)托盤是否支持。可以調(diào)用isSupport()來實(shí)現(xiàn)。Systemtray類可以包含一個(gè)或多個(gè)TrayIcon類的實(shí)例,即系統(tǒng)欄圖標(biāo),可以使用add()將它們添加到托盤,TrayIcon對象由圖像、彈出菜單和一組相關(guān)監(jiān)聽器組成。創(chuàng)建系統(tǒng)托盤的關(guān)鍵代碼如下:try String title = EQ通訊軟件;/系統(tǒng)欄提示文本的標(biāo)題String company = 吉林省XXX科技有限公司;/系統(tǒng)欄提示文本SystemTray sysTray = SystemTray.getSystemTray();/獲取系統(tǒng)托盤對象Image image = Toolkit.getDefaultToolkit().getImage(EQ.class.getResource(/icons/sysTray.png);/ 系統(tǒng)欄圖標(biāo)trayicon = new TrayIcon(image, title + n + company, createMenu(); /創(chuàng)建系統(tǒng)欄圖標(biāo)對象trayicon.setImageAutoSize(true);/設(shè)置自動(dòng)大小trayicon.addActionListener(new SysTrayActionListener();/添加監(jiān)聽器sysTray.add(trayicon);/添加系統(tǒng)欄圖標(biāo)到系統(tǒng)托盤trayicon.displayMessage(title, company, MessageType.INFO); catch (Exception e) e.printStackTrace();4.5用戶管理模塊的實(shí)現(xiàn)過程管理模塊實(shí)現(xiàn)步驟如下:(1)創(chuàng)建UserTreeRanderer類,該類繼承Jpanel類成為一個(gè)面板控件,同時(shí)該類也實(shí)現(xiàn)了TreeCellRenderer接口成為樹節(jié)點(diǎn)的渲染器。該類的構(gòu)造方法接受3個(gè)圖標(biāo)參數(shù),分別用于樹節(jié)點(diǎn)的打開、關(guān)閉和葉節(jié)點(diǎn)的圖標(biāo)。(2)在UserTreeRanderer類中的getTreeCellRendererComponent()方法,渲染樹節(jié)點(diǎn)的界面樣式。本方法獲取主窗體的寬度,并使用該寬度設(shè)置節(jié)點(diǎn)的寬度,是節(jié)點(diǎn)與窗體同寬度,當(dāng)選擇某個(gè)節(jié)點(diǎn)時(shí),該方法將使用指定顏色繪制節(jié)點(diǎn)的邊框,以突出該節(jié)點(diǎn)被選擇的效果。(3)創(chuàng)建ChatTree類,該類繼承Jtree自定義的樹控件,并且使用了之前定義的UserTreeRanderer樹節(jié)點(diǎn)渲染器, sortUsers()方法,此方法是一個(gè)內(nèi)部線程,該線程獲取本地的IP地址,使用該地址從數(shù)據(jù)庫中獲取本地用戶對象,并將本地用戶設(shè)置在用戶列表首位。然后從數(shù)據(jù)庫中獲取其它用戶對象。使第一個(gè)用戶處于被選擇狀態(tài),并更新狀態(tài)欄的用戶人數(shù)。關(guān)鍵代碼如下:private synchronized void sortUsers() /排序用戶列表new Thread(new Runnable() public void run() try Thread.sleep(100);root.removeAllChildren();String ip = InetAddress.getLocalHost().getHostAddress(); /獲取本地IPUser localUser = dao.getUser(ip);/從數(shù)據(jù)庫中獲取自己的信息if (localUser != null) / 把自己顯示在首位DefaultMutableTreeNode node = new DefaultMutableTreeNode(localUser);root.add(node);userMap = dao.getUsers();Iterator iterator = userMap.iterator();while (iterator.hasNext() / 遍歷用戶集合User user = iterator.next();if(user.getIp().equals(localUser.getIp()continue;root.add(new DefaultMutableTreeNode(user);/添加用戶到根節(jié)點(diǎn)treeModel.reload();ChatTree.this.setSelectionRow(0);/使第一個(gè)節(jié)點(diǎn)被選擇if (eq != null)eq.setStatic(總?cè)藬?shù): + getRowCount();/更新狀態(tài)欄標(biāo)簽 catch (Exception e) e.printStackTrace();).start();(4)在ChatTree中的delUser()方法,用于刪除當(dāng)前用戶列表中選擇的用戶對象。該方法首先獲取選擇的樹節(jié)點(diǎn),從該節(jié)點(diǎn)中獲取綁定的用戶對象,經(jīng)用戶確認(rèn)后刪除用戶信息,最后調(diào)用根節(jié)點(diǎn)的remove()方法刪除該用戶節(jié)點(diǎn)。另外是addUser()方法,用于在用戶列表中添加新用戶。本方法首先使用傳遞的IP參數(shù)到數(shù)據(jù)庫中獲取對應(yīng)的用戶對象,如成功獲取,說明數(shù)據(jù)庫已存在該用戶,系統(tǒng)會提示“已存在”,當(dāng)確定該IP可以訪問后,為該IP地址創(chuàng)建一個(gè)新的用戶并添加到數(shù)據(jù)庫中。關(guān)鍵代碼如下:public boolean addUser(String ip, String opration) / 添加用戶try if (ip = null)return false;User oldUser = dao.getUser(ip);/從數(shù)據(jù)庫中獲取IP相同用戶if (oldUser = null) / 如果數(shù)據(jù)庫中不存在該用戶InetAddress addr = InetAddress.getByName(ip);/該用戶可以訪問if (addr.isReachable(1500) String host = addr.getHostName();/獲取它的主機(jī)名稱root.add(new DefaultMutableTreeNode(new User(host, ip);User newUser = new User();/創(chuàng)建新用戶對象newUser.setIp(ip); /設(shè)置IPnewUser.setHost(host);/設(shè)置主機(jī)名稱newUser.setName(host);/設(shè)置用戶姓名newUser.setIcon(1.gif);/設(shè)置頭像dao.addUser(newUser);/添加該用戶到數(shù)據(jù)庫中sortUsers();/用于重新加載用戶列表if (!opration.equals(search)JOptionPane.showMessageDialog(EQ.frame, 用戶 + host+ 添加成功, 添加用戶,JOptionPane.INFORMATION_MESSAGE);return true; else /如果該用戶IP不可訪問if (!opration.equals(search)JOptionPane.showMessageDialog(EQ.frame, 檢測不到用戶IP:+ ip, 錯(cuò)誤添加用戶, JOptionPane.ERROR_MESSAGE);/對話框提示錯(cuò)誤return false; else /如果數(shù)據(jù)庫中存在該IP用戶if (!opration.equals(search) /并且不是系統(tǒng)自動(dòng)搜索JOptionPane.showMessageDialog(EQ.frame, 已經(jīng)存在用戶IP + ip,不能添加用戶, JOptionPane.WARNING_MESSAGE);/提示已存在!return false; catch (Exception e) e.printStackTrace();return false;4.6通信模塊的實(shí)現(xiàn)過程(1) 創(chuàng)建TelFrame類,在該類中集成Jframe類實(shí)現(xiàn)Swing的窗體,定義窗體需要的所有控件,列入發(fā)送按鈕、接受信息的文本框、輸入發(fā)送信息的文本框、信使按鈕以及各種滾動(dòng)面板等,定義訪問數(shù)據(jù)庫的DAO實(shí)例,在通信窗口右側(cè)顯示的用戶列表使用Dao實(shí)例從數(shù)據(jù)庫中獲取。(2)getInstance()方法,用于獲取唯一的窗體實(shí)例。該方法創(chuàng)建的所有窗體實(shí)例都會保存到Map集合類的實(shí)例中,窗體的實(shí)例對象會一直保存在這個(gè)集合類中,并且用戶再次打開已存在的窗體時(shí),將直接從集合類中獲取,不再創(chuàng)建新的窗體實(shí)例。關(guān)鍵代碼如下:public static synchronized TelFrame getInstance(DatagramSocket ssArg,DatagramPacket dp, ChatTree treeArg) String tmpIp = dp.getAddress().getHostAddress();/獲取數(shù)據(jù)報(bào)的IP地址if (!instance.containsKey(tmpIp) /如果集合中不存在該用戶窗體TelFrame frame = new TelFrame(ssArg, dp, treeArg);/創(chuàng)建窗體實(shí)例instance.put(tmpIp, frame);/將窗體實(shí)例保存到集合中frame.receiveInfo(treeArg);/接受信息if (!frame.isVisible() /如果窗體處于隱藏狀態(tài)frame.setVisible(true);/顯示窗體frame.setState(JFrame.NORMAL);frame.toFront();/將窗體放置在最前端return frame; else /如果集合中包含該用戶窗體TelFrame frame = instance.get(tmpIp);/從集合中獲取該窗體實(shí)例frame.setBufs(dp.getData();frame.receiveInfo(treeArg);/接受信息if (!frame.isVisible() frame.setVisible(true);/顯示窗體frame.setState(JFrame.NORMAL);frame.toFront();return frame;(3)在構(gòu)造方法中初始化TelFrame類的所有控件屬性,該構(gòu)造方法接收DatagramSocket、DatagramPacket和chatTree類的三個(gè)參數(shù),他們分別是數(shù)據(jù)socket服務(wù)、數(shù)據(jù)報(bào)和用戶列表的實(shí)例對象。(4)receiveInfo()方法,用于接收其它用戶發(fā)送的通信信息。該方法中首先從數(shù)據(jù)報(bào)中獲取發(fā)送信息的用戶IP地址,然后從數(shù)據(jù)庫中獲取該IP用戶的姓名,同時(shí)將這些用戶IP、用戶姓名和發(fā)送時(shí)間以藍(lán)色字體顯示到信息文本框中,最后將數(shù)據(jù)報(bào)中的通信信息文本追加到信息文本框中。代碼如下:private void receiveInfo(final ChatTree tree) / 接收信息if (buf.length 0) String rText = new String(buf).replace( + (char) 0, );String hostAddress = dp.getAddress().getHostAddress();String info = dao.getUser(hostAddress).getName();info = info + ( + new Date().tolocaleString()+”)”appendReceiveText(info, Color.BLUE);appendReceiveText(rText + n, null);(5)創(chuàng)建“發(fā)送”按鈕的事件監(jiān)聽器sendActionListener類,它實(shí)現(xiàn)了ActionListener接口,擁有處理按鈕事件的能力,它在actionPerformed()方法中獲取數(shù)據(jù)報(bào)中的通信信息。創(chuàng)建MessageButtonAction內(nèi)部類,該類是“信使”按鈕的事件監(jiān)聽器。當(dāng)用戶輸入通信信息并單擊“信使”按鈕時(shí),監(jiān)聽器則調(diào)用sendMessage()方法將通信信息以系統(tǒng)信使方式發(fā)送到對方的計(jì)算機(jī)。關(guān)鍵代碼如下:class sendActionListener implements ActionListener public void actionPerformed(final ActionEvent e) String sendInfo = getSendInfo();/獲取發(fā)送信息if (sendInfo = null)return;insertUserInfoToReceiveText(tree);appendReceiveText(sendInfo + n, null);/添加到信息文本框byte tmpBuf = sendInfo.getBytes();DatagramPacket tdp = null; /創(chuàng)建數(shù)據(jù)報(bào)try tdp = new DatagramPacket(tmpBuf, tmpBuf.length,new InetSocketAddress(ip, 1111);/初始化數(shù)據(jù)報(bào)ss.send(tdp); /發(fā)送數(shù)據(jù)報(bào) catch (SocketException e2) e2.printStackTrace(); catch (IOException e1) e1.printStackTrace();JOptionPane.showMessageDialog(TelFrame.this, e1.getMessage();sendText.setText(null);/清空發(fā)送文本框sendText.requestFocus(); /使發(fā)送文本框獲得焦點(diǎn)if (messageMode.isSelected()/如果選擇了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論