




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、畢業(yè)設(shè)計(jì)設(shè)計(jì)題目: 學(xué)生姓名: 學(xué)院名稱: 專(zhuān)業(yè)名稱: 班級(jí)名稱: 學(xué) 號(hào): 指導(dǎo)教師: 教師職稱: 學(xué) 歷: 目 錄1 前言51.1 課題選題背景51.2需求分析51.3系統(tǒng)設(shè)計(jì)的要點(diǎn)62 涉及的相關(guān)技術(shù)及協(xié)議62.1 Java語(yǔ)言62.2 C/S模式介紹73 系統(tǒng)需求分析83.1可行性分析83.2 系統(tǒng)功能需求83.3 系統(tǒng)性能需求83.4 即時(shí)信息加密和鑒別93.5 即時(shí)通訊系統(tǒng)需求94 系統(tǒng)設(shè)計(jì)94.1即時(shí)聊天系統(tǒng)的實(shí)施原理104.2軟件設(shè)計(jì)流程114.3功能模塊劃分114.4 數(shù)據(jù)庫(kù)概要設(shè)計(jì)125 詳細(xì)設(shè)計(jì)135.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)135.1.2 主服務(wù)器類(lèi)的設(shè)計(jì)135.1.2
2、 登錄驗(yàn)證模塊155.1.3 注冊(cè)處理模塊155.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)165.2.1 用戶注冊(cè)模塊165.2.2 用戶登錄175.2.3 在線用戶顯示設(shè)計(jì)185.2.4 聊天信息發(fā)送與接收195.3 數(shù)據(jù)庫(kù)設(shè)計(jì)206 結(jié)論21致謝23參考文獻(xiàn)24附錄25基于Java即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要: 網(wǎng)絡(luò)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開(kāi)發(fā)主要包括一個(gè)網(wǎng)絡(luò)聊天服務(wù)器程序和一個(gè)網(wǎng)絡(luò)聊天客戶程序兩個(gè)方面。前者通過(guò)Socket套接字建立服務(wù)器,
3、服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來(lái)信息,并能刷新用戶列表。后者通過(guò)與服務(wù)器建立連接,來(lái)進(jìn)行客戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過(guò)直接繼承Thread類(lèi)來(lái)建立多線程。開(kāi)發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來(lái)實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過(guò)分析這些情況,該聊天工具采用Eclipse為基本開(kāi)發(fā)環(huán)境和java語(yǔ)言進(jìn)行編寫(xiě),首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修
4、正和改進(jìn),直到形成可行系統(tǒng)關(guān)鍵詞:即時(shí)通訊系統(tǒng) B/S C/S MySQL Socket SwingAbstract: The rapid development of computer network technology today, more immediate means of communication by people of all ages. Real-time chat tool in achieving the transmission of video and audio i
5、nformation, so that members can collaborate remotely intuitive, real audio and visual communication at the same time, use of multimedia technology, it can also help users to work in all kinds of information processing. Study of this issue is to support the exchange of internal network systems - netw
6、ork instant messaging system. The system uses Java programming language. System uses the C / S structure mode, support for LAN and Internet. The system uses the waterfall model of software development projects were discussed system requirements analysis, outline design, detailed design and coding, a
7、nd run and test the whole system. Finally, the paper concluded. Keywords:Instant Messager; System; B/S C/S MYSQL Socket Swing1 前言目前國(guó)內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國(guó)內(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)備。1.1 課題選題背景隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)成為人們?nèi)粘=涣鞯囊环N重要工具。它通
8、信速度快,成本低,更重要的是方便人們信息的交流和資料的傳遞,所以開(kāi)發(fā)一個(gè)易于操作并擁有友好界面的聊天工具可以較好地解決現(xiàn)實(shí)生活中通信費(fèi)用高昂以及電話的單線程通信等問(wèn)題1。QQ聊天系統(tǒng)是一款基于互聯(lián)網(wǎng)的即時(shí)通信系統(tǒng),它允許人們利用英特網(wǎng)技術(shù)實(shí)時(shí)地傳送信息,并且能讓用戶選擇性地接受或拒絕其他用戶的信息。由于QQ有著出色的通信性能并且其用戶普及度較高,因此本課題在模仿QQ的前提下,設(shè)計(jì)了一款具有聊天功能及其他附加功能的軟件目前即時(shí)聊天系統(tǒng)種類(lèi)眾多,功能也較為齊全。該課題現(xiàn)在所研究的即時(shí)通訊系統(tǒng),其目標(biāo)是定位于企業(yè)內(nèi)部網(wǎng)絡(luò),解決企業(yè)或單位的溝通及協(xié)同的問(wèn)題,提高工作效率。企業(yè)內(nèi)部員工可以利用該通訊系統(tǒng)
9、隨時(shí)隨地發(fā)送文字消息、進(jìn)行多人群聊、消息群發(fā)、傳送文件、音頻視頻對(duì)話等。系統(tǒng)包括客戶端程序和服務(wù)器端程序,支持局域網(wǎng)和Internet。企業(yè)內(nèi)部員工之間可以在內(nèi)部網(wǎng)覆蓋的任何地點(diǎn)、任何時(shí)間進(jìn)行即時(shí)交流,真正實(shí)現(xiàn)企業(yè)內(nèi)部協(xié)同工作。使您不必花費(fèi)大量的時(shí)間、金錢(qián)聚集到一個(gè)地方,通過(guò)網(wǎng)絡(luò),就能實(shí)現(xiàn)面對(duì)面的溝通,提高了效率。MSN、QQ等公共消息系統(tǒng),由于聊天對(duì)象及內(nèi)容的不可控,若在企業(yè)內(nèi)部使用,可能會(huì)降低工作效率。而該即時(shí)通訊系統(tǒng)將自己的服務(wù)器端安裝在企業(yè)內(nèi),并且人員的創(chuàng)建是由系統(tǒng)管理員來(lái)完成,因此很好的解決了這個(gè)問(wèn)題。隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)成為人們?nèi)粘=涣鞯囊环N重要工具。它通信速
10、度快,成本低,更重要的是方便人們信息的交流和資料的傳遞,所以開(kāi)發(fā)一個(gè)易于操作并擁有友好界面的聊天工具可以較好地解決現(xiàn)實(shí)生活中通信費(fèi)用高昂以及電話的單線程通信等問(wèn)題1。QQ聊天系統(tǒng)是一款基于互聯(lián)網(wǎng)的即時(shí)通信系統(tǒng),它允許人們利用英特網(wǎng)技術(shù)實(shí)時(shí)地傳送信息,并且能讓用戶選擇性地接受或拒絕其他用戶的信息。由于QQ有著出色的通信性能并且其用戶普及度較高,因此本課題在模仿QQ的前提下,設(shè)計(jì)了一款具有聊天功能及其他附加功能的軟件1.2需求分析聊天系統(tǒng)最重要的是服務(wù)器端和客戶端兩個(gè)方面。服務(wù)器端有兩個(gè)主要任務(wù):(1)服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行監(jiān)聽(tīng),判斷是否有客戶端連接請(qǐng)求或斷開(kāi)連
11、接。(2)服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息給客戶端??蛻舳艘瓿傻墓ぷ鳎?1)與服務(wù)器端建立通信通道,向服務(wù)器端發(fā)送信息。(2)接收來(lái)自服務(wù)器的應(yīng)答信息。解決了上述的4個(gè)問(wèn)題,也就完成了聊天系統(tǒng)的核心任務(wù)。1.3系統(tǒng)設(shè)計(jì)要點(diǎn)聊天系統(tǒng)的設(shè)計(jì)主要是提供滿足用戶雙方直接進(jìn)行實(shí)時(shí)聊天的服務(wù),在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):(1)實(shí)現(xiàn)思想在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),用戶通過(guò)客戶端程序登錄到特定服務(wù)器,即可與登錄在同一服務(wù)器上的用戶進(jìn)行交流,這是一個(gè)面向連接的通信過(guò)程。因此,要在TCP/I
12、P環(huán)境下4-5,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。(2)服務(wù)器端工作流程服務(wù)器端通過(guò)socket()系統(tǒng)創(chuàng)建一個(gè)ServerSocket來(lái)對(duì)客戶端進(jìn)行接收,并與指定的本地端口綁定bind(),就可以在端口進(jìn)行監(jiān)聽(tīng)listen()。Map<String,socket>用以存儲(chǔ)用戶姓名和對(duì)應(yīng)的Socket。通過(guò)ChatRoomServerThread線程類(lèi)來(lái)處理不同請(qǐng)求。如果有客戶端連接請(qǐng)求,則給出一個(gè)相應(yīng)的Socket,將客戶端地址賦給這個(gè)Socket。登錄成功的用戶就可以在服務(wù)器上聊天。(3)客戶端工作流程客戶端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過(guò)這個(gè)S
13、ocket來(lái)發(fā)送和接收數(shù)據(jù)即可。2 涉及的相關(guān)技術(shù)及協(xié)議為了保證課題能正常實(shí)施,先來(lái)分析一下課題所需要的相關(guān)技術(shù)和協(xié)議。2.1 Java語(yǔ)言經(jīng)過(guò)認(rèn)真的討論分析,綜合各種計(jì)算機(jī)高級(jí)語(yǔ)言的特征和適應(yīng)范圍,最終決定選擇純面向?qū)ο蟮腏ava語(yǔ)言來(lái)完成畢業(yè)論文的設(shè)計(jì),下面就技術(shù)可行性方面,對(duì)Java語(yǔ)言作一簡(jiǎn)要介紹。Sun公司的口號(hào)就是“網(wǎng)絡(luò)就是計(jì)算機(jī)”,Java能使所有東西從桌面計(jì)算平穩(wěn)的轉(zhuǎn)變?yōu)榛诰W(wǎng)絡(luò)的計(jì)算,它是專(zhuān)門(mén)為此而建立的,并顯然是為了完成這個(gè)任務(wù)而來(lái)的。使用Java語(yǔ)言,可以相對(duì)輕松的一天編寫(xiě)一個(gè)有條理的網(wǎng)絡(luò)程序。今天,Java的網(wǎng)絡(luò)功能正在飛躍發(fā)展,不斷有新的特性增加到這個(gè)有價(jià)值的基礎(chǔ)上,
14、JavaSoft實(shí)驗(yàn)室正在不斷努力使Java更加完善。就Java語(yǔ)言的主要特點(diǎn),本人歸納如下:Java程序設(shè)計(jì)的開(kāi)發(fā)過(guò)程與運(yùn)行環(huán)境Java是解釋型的高級(jí)編程語(yǔ)言,所以Java程序的開(kāi)發(fā)通常需要經(jīng)過(guò)編寫(xiě)源程序、編譯生成字節(jié)碼和運(yùn)行三個(gè)過(guò)程。這里要提到,Java應(yīng)用程序的開(kāi)發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個(gè)部分。Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼字節(jié)碼。這一編譯過(guò)程同C/C+的編譯有些不同。當(dāng)C編譯器編譯生成一個(gè)對(duì)象的代碼時(shí),該代碼是為在某一特定硬件平臺(tái)運(yùn)行而產(chǎn)生的。因此,在編譯過(guò)程中,編譯程序通過(guò)查表將所有對(duì)符號(hào)的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。Java編譯器卻
15、不將對(duì)變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過(guò)程中的內(nèi)存布局,而是將這些符號(hào)引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過(guò)程中創(chuàng)立內(nèi)存布局,然后再通過(guò)查表來(lái)確定一個(gè)方法所在的地址。這樣就有效的保證了Java的可移植性和安全性?!?】2.2 C/S模式介紹20世紀(jì)90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計(jì)算模式為客戶機(jī)/服務(wù)器模式,簡(jiǎn)稱為C/S模式,它實(shí)際上就是把主機(jī)終端模式中原來(lái)全部集中在主機(jī)部分的任務(wù)一分為二,保留在主機(jī)上的部分負(fù)責(zé)集中處理和匯總運(yùn)算,成為服務(wù)器;而下放到終端的部分負(fù)責(zé)為用戶提供友好的交互界面,稱為客戶機(jī)?!?】相對(duì)于以前的模式,C/S模式最大的改進(jìn)是不再把所有軟件都裝進(jìn)一臺(tái)
16、計(jì)算機(jī),而是把應(yīng)用系統(tǒng)分成兩個(gè)不同的角色和兩個(gè)不同的地位:一般在運(yùn)算能力較強(qiáng)的計(jì)算機(jī)上安裝服務(wù)器端程序,而在一般的PC上安裝客戶機(jī)程序。正是由于個(gè)人PC機(jī)的出現(xiàn)使客戶機(jī)/服務(wù)器模式成為可能,因?yàn)镻C機(jī)具有一定的運(yùn)算能力,用它代替了上面第一種模式的啞終端后,就可以把主機(jī)端的一部分工作放在客戶機(jī)端完成,從而減輕了主機(jī)的負(fù)擔(dān),也增加了系統(tǒng)對(duì)用戶的響應(yīng)速度和響應(yīng)能力。客戶機(jī)和服務(wù)器之間通過(guò)相應(yīng)的網(wǎng)絡(luò)協(xié)議來(lái)進(jìn)行通訊??蛻魴C(jī)向服務(wù)器發(fā)出數(shù)據(jù)請(qǐng)求,服務(wù)器將數(shù)據(jù)傳送給客戶機(jī)進(jìn)行計(jì)算,計(jì)算完畢,計(jì)算結(jié)果可返回給服務(wù)器。這種模式的優(yōu)點(diǎn)充分利用了客戶機(jī)的性能,使計(jì)算能力大大提高;另外,由于客戶機(jī)和服務(wù)器之間的通訊是
17、通過(guò)網(wǎng)絡(luò)協(xié)議進(jìn)行的,是一種邏輯的聯(lián)系,因此物理上在客戶機(jī)和服務(wù)器兩端是易于擴(kuò)充的。C/S模式是目前占主流的網(wǎng)絡(luò)計(jì)算模式。該模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù)(過(guò)程如下):(1)打開(kāi)一個(gè)通信通道同時(shí)通知本地主機(jī),服務(wù)器愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。(2)等待某個(gè)客戶請(qǐng)求到達(dá)該端口。(3)接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。(4)返回第二步,等待另一客戶請(qǐng)求。(5)關(guān)閉該服務(wù)器??蛻舳耍?1)打開(kāi)一個(gè)通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。(2)向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求。(3)請(qǐng)求結(jié)束后關(guān)閉通信通道并
18、終止。分布運(yùn)算和分布管理是客戶機(jī)/服務(wù)器模式的特點(diǎn)。最后選擇了C/S模式。3 系統(tǒng)需求分析前面兩章介紹了課題的選題背景和相關(guān)的技術(shù)基礎(chǔ)和協(xié)議。在本章中將討論一下即時(shí)通訊系統(tǒng)的需求分析。3.1可行性分析經(jīng)濟(jì)可行性:由于本系統(tǒng)的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)能運(yùn)行Java軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。 技術(shù)可行性: 本系統(tǒng)的開(kāi)發(fā)利用Microsoft SQL Server2000作為本系統(tǒng)的數(shù)據(jù)庫(kù),它是一個(gè)支持多用戶的新型數(shù)據(jù)庫(kù),適用于大中規(guī)模的數(shù)據(jù)量需求。學(xué)校校園網(wǎng)的建設(shè)也為新系統(tǒng)服務(wù)器/客
19、戶端的結(jié)構(gòu)提供了硬件的支持。使用Java作為系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā)環(huán)境,它提供完善的指令控制語(yǔ)句、類(lèi)與對(duì)象的支持及豐富的數(shù)據(jù)類(lèi)型,給開(kāi)發(fā)高性能系統(tǒng)提供的保障為開(kāi)發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對(duì)新系統(tǒng)的擴(kuò)展與修改。 運(yùn)行可行性: 本系統(tǒng)為一個(gè)小型的局域網(wǎng)聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的電腦無(wú)論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。 綜上所述,本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。3.2 系統(tǒng)功能需求本系統(tǒng)主要通過(guò)客戶端,服務(wù)器端來(lái)體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端 1.處理用
20、戶注冊(cè) 2.處理用戶登錄 3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過(guò)濾非法內(nèi)容 4.處理用戶得到信息 5.處理用戶退出6. 服務(wù)器踢人。7. 保存服務(wù)器日志.8.保存用戶聊天信息。(2)客戶端 1.用戶注冊(cè)界面及結(jié)果 2.用戶登錄界面及結(jié)果 3.用戶發(fā)送信息界面及結(jié)果 4.用戶得到信息界面及結(jié)果 5.用戶退出界面及結(jié)果3.3 即時(shí)消息的安全需求A發(fā)送即時(shí)消息M給B,有以下幾種情況和相關(guān)需求:(1)如果無(wú)法發(fā)送,A必須接到確認(rèn);(2)如果M被投遞了,B只能接受M一次;(3)協(xié)議必須為B提供方法檢查A發(fā)送了這條信息;(4)協(xié)議必須允許B使用另一條即時(shí)信息,回復(fù)信息;(5)協(xié)議必須為A提供方
21、法保證沒(méi)有其他個(gè)體C可以篡改M;3.4 即時(shí)信息加密和鑒別(1)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被監(jiān)聽(tīng)或者破壞;(2)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被重排序或者回放;(3)協(xié)議必須提供方法保證通知和即時(shí)消息被正確的實(shí)體閱讀;(4)協(xié)議必須允許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時(shí)通訊系統(tǒng)需求3.5.1 注冊(cè)需求(1)即時(shí)通訊系統(tǒng)擁有多個(gè)賬戶,允許多個(gè)用戶注冊(cè);(2)一個(gè)用戶可以注冊(cè)多個(gè)ID;(3)注冊(cè)所使用的帳號(hào)類(lèi)型為字母ID。3.5.2 通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3)用戶可以加密/解密消息等
22、。4 系統(tǒng)設(shè)計(jì)在這里我們將該即時(shí)通訊系統(tǒng)命名為CHAT,現(xiàn)在對(duì)該系統(tǒng)進(jìn)行總體設(shè)計(jì)。采用客戶機(jī)/服務(wù)器(C/S)的模式來(lái)設(shè)計(jì),是一個(gè)2層的C/S結(jié)構(gòu):應(yīng)用程序服務(wù)器應(yīng)用程序客戶端,其分層機(jī)構(gòu)如圖1所示。圖1 2層C/S結(jié)構(gòu)示意圖客戶層也叫做應(yīng)用表示層,也就是我們說(shuō)的客戶端,這是應(yīng)用程序的用戶接口部分。給即時(shí)通訊工具設(shè)計(jì)一個(gè)客戶層具有很多優(yōu)點(diǎn),這是因?yàn)榭蛻魧訐?dān)負(fù)著用戶與應(yīng)用間的對(duì)話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直接地進(jìn)行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫(xiě)顯示控制和數(shù)據(jù)檢查程序就可以了,而不會(huì)影響其他兩層。服務(wù)層又叫做功能層,相當(dāng)于應(yīng)用
23、的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過(guò)的檢索結(jié)果數(shù)據(jù),它也是一次性傳送給表示層的。在應(yīng)用設(shè)計(jì)中,必須避免在表示層和功能層之間進(jìn)行多次的數(shù)據(jù)交換,這就需要盡可能進(jìn)行一次性的業(yè)務(wù)處理,達(dá)到優(yōu)化整體設(shè)計(jì)的目的。4.1即時(shí)聊天系統(tǒng)的實(shí)施原理4.1.1 工作方式和技術(shù)原理典型的IM工作方式如下:登陸CHAT通訊服務(wù)器,獲取一個(gè)自建立的歷史的交流對(duì)象列表(同事列表),然后自身標(biāo)志為在線狀態(tài),當(dāng)好友列表中的某人在任何時(shí)候登錄上線并試圖通過(guò)你的計(jì)算機(jī)聯(lián)系你時(shí),IM系統(tǒng)會(huì)發(fā)一個(gè)消息提醒你,然
24、后你能與他建立一個(gè)聊天會(huì)話通道進(jìn)行各種消息如鍵入文字、通過(guò)語(yǔ)音等的交流,從技術(shù)上來(lái)說(shuō),聊天系統(tǒng)的基本技術(shù)原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器,服務(wù)器通過(guò)讀取用戶數(shù)據(jù)庫(kù)來(lái)驗(yàn)證用戶身份,如果驗(yàn)證通過(guò),登記用戶A的IP地址、IM客戶端軟件的版本號(hào)及使用的TCP/UDP端口號(hào),然后返回用戶A登錄成功的標(biāo)志,此時(shí)用戶A在IM系統(tǒng)中的狀態(tài)為在線(Online Presence)。第二步,根據(jù)用戶A存儲(chǔ)在IM服務(wù)器上的好友列表(Buddy List),服務(wù)器將用戶A在線的相關(guān)信息發(fā)送給也同時(shí)在線的IM好友的PC機(jī),這些信息包括在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)
25、號(hào)等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務(wù)器把用戶A存儲(chǔ)在服務(wù)器上的好友列表及相關(guān)信息回送到他的客戶端機(jī),這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號(hào)等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)。4.1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過(guò)服務(wù)器發(fā)送過(guò)來(lái)的用戶B的IP地址、TCP端口號(hào)等信息,直接向用戶B的PC機(jī)發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復(fù)到用戶A的PC機(jī),這樣雙方的即時(shí)文字消息就不再I(mǎi)M服務(wù)器中轉(zhuǎn),而是直接通過(guò)網(wǎng)絡(luò)進(jìn)行點(diǎn)對(duì)點(diǎn)的通訊,
26、即對(duì)等通訊方式(Peer To Peer)?!?】(2)在線代理通訊用戶A與用戶B的點(diǎn)對(duì)點(diǎn)通訊由于防火墻、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢,IM服務(wù)器將會(huì)主動(dòng)提供消息中轉(zhuǎn)服務(wù),即用戶A和用戶B的即時(shí)消息全部先發(fā)送到IM服務(wù)器,再由服務(wù)器轉(zhuǎn)發(fā)給對(duì)方。4.2軟件設(shè)計(jì)流程因?yàn)樵撓到y(tǒng)其需求是十分明確的,所以該系統(tǒng)的開(kāi)發(fā)流程采用瀑布模型進(jìn)行設(shè)計(jì),分為幾大步驟:先進(jìn)行需求分析,再是系統(tǒng)設(shè)計(jì),然后是詳細(xì)設(shè)計(jì)與編碼,其次是軟件的測(cè)試,最后是軟件的運(yùn)行和維護(hù)。【6】在實(shí)際過(guò)程中這些步驟經(jīng)常是重疊和彼此間有信息交換,它不是一個(gè)簡(jiǎn)單線性過(guò)程,而是包括開(kāi)發(fā)步驟的多個(gè)反復(fù)。如圖2所示。需求分析系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)與編碼軟
27、件測(cè)試軟件運(yùn)行與維護(hù)圖2 即時(shí)通訊系統(tǒng)開(kāi)發(fā)流程圖4.3功能模塊劃分該即時(shí)聊天工具按如下過(guò)程完成通信:(1)客戶向服務(wù)器注冊(cè),告知服務(wù)器該客戶監(jiān)聽(tīng)某主題;(2)客戶注冊(cè)之后,向服務(wù)器發(fā)送消息;(3)服務(wù)器再把消息發(fā)送給所有監(jiān)聽(tīng)此主題的客戶。根據(jù)以上描述,該系統(tǒng)功能模塊圖請(qǐng)見(jiàn)圖3。即時(shí)聊天系統(tǒng)服務(wù)器端客戶端建立連接存儲(chǔ)數(shù)據(jù)監(jiān)聽(tīng)用戶新建用戶登 錄通訊交流圖3 通訊系統(tǒng)的功能模塊4.3.1 服務(wù)器端由圖3可知服務(wù)器端完成至少3大功能:建立連接、存儲(chǔ)數(shù)據(jù)和監(jiān)聽(tīng)客戶。這3大功能的具體含義如下:(1)建立一個(gè)ServerSocket連接,不斷偵聽(tīng)是否有客戶端連接或者斷開(kāi)連接。(2)服務(wù)器端是一個(gè)信息發(fā)送中心
28、,所有客戶端的信息都傳到服務(wù)器端,再由服務(wù)器根據(jù)要求分發(fā)出去。(3)數(shù)據(jù)庫(kù)數(shù)據(jù)操作包括將用戶信息存儲(chǔ)到數(shù)據(jù)庫(kù)等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送新建用戶的信息,接收來(lái)自服務(wù)器的信息進(jìn)行注冊(cè)。(2)用戶登錄:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送信息,完成用戶登錄。(3)通信交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。4.4 數(shù)據(jù)庫(kù)概要設(shè)計(jì)因?yàn)楸鞠到y(tǒng)采用的是2級(jí)C/S結(jié)構(gòu)模式,所以,為了減少服務(wù)器的存儲(chǔ)量,方便程序設(shè)計(jì),本系統(tǒng)只對(duì)用戶信息進(jìn)行存儲(chǔ)。利用JAVA中的
29、框架技術(shù)進(jìn)行存儲(chǔ)。在中,各表的映射文件可以通過(guò)工具生成,在本系統(tǒng)中,用戶表信息可以用Xml代碼實(shí)現(xiàn)。用戶表(user)表1 用戶信息表名稱字段名稱類(lèi)別主鍵非空用戶編號(hào)id數(shù)字是是登錄名CustName文本否是登錄密碼CustPassword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email文本否是5 詳細(xì)設(shè)計(jì)5.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)作為C/S模式下的系統(tǒng)開(kāi)發(fā),很顯然服務(wù)器端程序的設(shè)計(jì)是非常重要的。下面就服務(wù)器端的相關(guān)程序模塊進(jìn)行設(shè)計(jì),并一定程度上實(shí)現(xiàn)了相關(guān)功能。5.1.2 主服務(wù)器類(lèi)的設(shè)計(jì)設(shè)計(jì)服務(wù)器時(shí)需要考慮如下幾個(gè)因素:(1)服務(wù)器的運(yùn)行速度;(2)服務(wù)器的響應(yīng)速度,包括新建
30、連接和發(fā)送數(shù)據(jù)的響應(yīng)速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。針對(duì)TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)服務(wù)器的程序結(jié)構(gòu)需要考慮以下的因素:(1)多線程;(2)多進(jìn)程;(3)單線程。主服務(wù)器類(lèi)實(shí)現(xiàn)了服務(wù)器端的多線程,使用SeverSocket s=newServerSocket(1001)語(yǔ)句在1001端口創(chuàng)建套接口;使用new ServerThread(socket)語(yǔ)句創(chuàng)建新的線程。主服務(wù)器類(lèi)調(diào)用ServerThread類(lèi),而每個(gè)ServerThread實(shí)體就是一個(gè)獨(dú)立的線程,剛好對(duì)應(yīng)于客戶端的連接請(qǐng)求響應(yīng)線程。服務(wù)器端有一個(gè)(或多個(gè))進(jìn)程在指定的端口等待客戶的連接信息,
31、一旦連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r(shí)候向服務(wù)器端發(fā)出連接請(qǐng)求。實(shí)現(xiàn)界面如圖4。圖4 服務(wù)器啟動(dòng)界面現(xiàn)就其中一些核心代碼進(jìn)行講解。public class JavaServer extends Thread其中public是JAVA的關(guān)鍵字,用來(lái)表示該類(lèi)是共有,在整個(gè)程序里都可以訪問(wèn)到它;Class表示類(lèi)定義,它后面接著用戶定義的類(lèi)的類(lèi)名為AppServer;extends表示繼承的意思,他后面的類(lèi)Thread是子類(lèi),能夠繼承父類(lèi)AppServer所定義的一些變量。這條語(yǔ)言表示的意思就是聲明一個(gè)公共類(lèi)AppServer,用子類(lèi)Thread繼承父類(lèi)AppS
32、erver中的一些變量。static boolean newMessage。其中,static是關(guān)鍵字,表示靜態(tài)變量,Boolean表示變量類(lèi)型為布爾型,變量名為newMessage。這條語(yǔ)句的意思是定義一個(gè)靜態(tài)變量newMessage,它的類(lèi)型為布爾型。值得強(qiáng)調(diào)的是布爾型數(shù)據(jù)只有兩個(gè)值true和false,并且它們不對(duì)應(yīng)人數(shù)整數(shù)值。if(start) sFrame.txtStatus.setText("已啟動(dòng).");log(null,"服務(wù)器已啟動(dòng)." );else sFrame.txtStatus.setText("關(guān)閉中.");
33、這是一條if條件判斷語(yǔ)句,它表示變量start如果不為空,那么執(zhí)行語(yǔ)句第一個(gè)大括號(hào)中的語(yǔ)句,如果為空,則執(zhí)行else中的語(yǔ)句。其中,log為輸出語(yǔ)句,表示在窗口中輸出“服務(wù)器已啟動(dòng)”信息。public void run() try while (start) Socket client = serverSocket.accept();Connection con = new Connection(client, u, v, userInfo); catch (IOException e) log(e, "不能監(jiān)聽(tīng)!");這個(gè)函數(shù)的作用是監(jiān)聽(tīng)用戶信息,void表示定義的函數(shù)不
34、需要返回值,while是循環(huán)語(yǔ)句關(guān)鍵字,在語(yǔ)句中的意思為直到start的值不為空,將循環(huán)執(zhí)行后面括號(hào)的語(yǔ)句,直到start值為空后,循環(huán)才結(jié)束。Connection con表示連接用戶信息。Catch是對(duì)java中的異常進(jìn)行捕獲,并且能夠拋出異常,便于程序能夠正常運(yùn)行。5.1.2 登錄驗(yàn)證模塊系統(tǒng)的登錄模塊是比較重要的,這是用戶的一個(gè)身份驗(yàn)證,是通訊系統(tǒng)必須的一個(gè)功能模塊。如果客戶端輸入的字符串表方式需要登錄,那么服務(wù)器在接收到該信息后連接數(shù)據(jù)庫(kù),準(zhǔn)備從數(shù)據(jù)庫(kù)選擇昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過(guò)來(lái)的號(hào)碼和密碼信息后,設(shè)定數(shù)據(jù)庫(kù)查尋條件,并執(zhí)行數(shù)據(jù)庫(kù)查尋,通過(guò)比較輸入的用戶名和密碼數(shù)據(jù)庫(kù)信息
35、來(lái)卻請(qǐng)用戶的登錄是否成功。以下為登陸驗(yàn)證的流程圖。符合不符合登陸系統(tǒng)輸入帳號(hào)密碼驗(yàn)證進(jìn)入系統(tǒng)圖5 用戶登錄流程圖5.1.3 注冊(cè)處理模塊新建用戶是即時(shí)通訊工具的一個(gè)基本功能。用戶新建過(guò)程也在線程監(jiān)聽(tīng)函數(shù)run()中。新建用戶的過(guò)程是這樣的:首先使用Register_Customer()方法加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi);然后使用dao.getUser()方法獲取數(shù)據(jù);在獲取注冊(cè)名時(shí),進(jìn)行判斷,查看用戶名是否重復(fù),如果重復(fù),則向客戶端彈出提示信息,見(jiàn)圖6;如果不重復(fù),服務(wù)器接收客戶端用戶發(fā)送的昵稱、密碼、用戶E-mail等信息,執(zhí)行數(shù)據(jù)庫(kù)添加操作完成用戶的創(chuàng)建;最后向用戶反饋?zhàn)?cè)成功信息。圖6 注冊(cè)名重復(fù)提示
36、信息5.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)前一章介紹了服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn),對(duì)于C/S模式的系統(tǒng)而言,還必須對(duì)系統(tǒng)的客戶端進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。下面就來(lái)解決這樣一個(gè)問(wèn)題??蛻舳送ㄟ^(guò)Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過(guò)構(gòu)造BufferedReader、PrintWriter來(lái)建立輸入流和輸出流,雙方通過(guò)該輸入流和輸出流來(lái)相互傳遞信息。只要收到客戶端的連接請(qǐng)求,服務(wù)器利用accept()函數(shù)返回一個(gè)新建的Socket對(duì)象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊(cè)、登錄和查找同事等請(qǐng)求,服務(wù)器收到請(qǐng)求后,針對(duì)不同的消息處理請(qǐng)求。5.2.1 用戶注冊(cè)模塊當(dāng)用戶向服務(wù)器端發(fā)出注冊(cè)請(qǐng)求后,客戶端將向服務(wù)器發(fā)送客戶傳
37、遞的信息,諸如客戶的昵稱、性別、個(gè)人資料等信息。等服務(wù)器接收完畢后,服務(wù)器會(huì)通過(guò)hibernate框架讀取數(shù)據(jù)庫(kù)信息,并進(jìn)行判斷,最后在客戶端收到服務(wù)器的反饋信息?,F(xiàn)對(duì)部分關(guān)鍵語(yǔ)句進(jìn)行講解。public class Register extends JFrame implements ActionListener Toolkit toolkit=Toolkit.getDefaultToolkit();JButton btnOk,btnCancel,btnClear;public Register(String ip) btnOk=new JButton("確定(O)");
38、btnOk.setMnemonic('O'); btnOk.setToolTipText("保存注冊(cè)信息"); btnOk.setBounds(250,135,80,25);Implement繼承于接口類(lèi)時(shí)用的關(guān)鍵詞【7】,在數(shù)據(jù)接口位置使用,在這里表示類(lèi)ActionListen類(lèi)繼承類(lèi)Register。JButton btnOk,btnCancel,btnClear。這條語(yǔ)句中,JButton其實(shí)是一個(gè)類(lèi),名為JButton按鈕類(lèi),它是JAVA中自帶的一種控件,當(dāng)鼠標(biāo)移入、移出、被點(diǎn)擊所定義的3個(gè)變量時(shí),會(huì)觸發(fā)JButton類(lèi),從而執(zhí)行相應(yīng)的操作。如在類(lèi)R
39、egister中,當(dāng)鼠標(biāo)點(diǎn)擊“確定”按鈕時(shí),則會(huì)觸發(fā)類(lèi)JButton定義的變量btnOk,并且為其賦值,進(jìn)而調(diào)用setToolTipText方法,將注冊(cè)信息進(jìn)行保存。而setBounds類(lèi)是JAVA自帶類(lèi),他能夠設(shè)置組件位置【8】,即確定注冊(cè)窗口位置。見(jiàn)圖7。圖7 用戶注冊(cè)界面5.2.2 用戶登錄當(dāng)用戶點(diǎn)擊登錄時(shí),客戶端發(fā)起請(qǐng)求與服務(wù)端建立連接,登錄信息首先在客戶端做驗(yàn)證,然后通過(guò)填寫(xiě)的服務(wù)器IP地址申請(qǐng)與服務(wù)端建立連接。而在服務(wù)器端,有一個(gè)主線程專(zhuān)門(mén)創(chuàng)建SOCKET服務(wù),等待客戶端的連接,每當(dāng)客戶端發(fā)起連接的申請(qǐng)時(shí),與之建立連接,并創(chuàng)建一個(gè)線程,將建立的連接交給這個(gè)線程處理,并將連接存入一個(gè)
40、集合中,用于后續(xù)業(yè)務(wù)的處理。然后服務(wù)器將反序列化客戶端傳輸過(guò)來(lái)的數(shù)據(jù),生成一個(gè)用戶對(duì)象。從中獲取登錄填寫(xiě)的信息,根據(jù)用戶名和密碼在數(shù)據(jù)庫(kù)中查找數(shù)據(jù),如果能夠找到表示登錄成功,反之,登錄不成功。最后將登錄的結(jié)果通過(guò)文本發(fā)送給客戶端發(fā)送給服務(wù)端。最后,如果通過(guò)驗(yàn)證,得到一個(gè)標(biāo)志,進(jìn)入聊天主窗體,否則彈出登錄失敗的對(duì)話框,讓用戶重新登錄。登陸界面見(jiàn)圖8圖8 用戶登陸界面現(xiàn)對(duì)部分關(guān)鍵代碼進(jìn)行講解:public void actionPerformed(ActionEvent ae)Object source=ae.getSource();if (source.equals(btnLogin) if(t
41、xtUserName.getText().equals("") | pwdPassword.getText().equals("") JOptionPane op1=new JOptionPane(); op1.showMessageDialog(null,"用戶名或密碼不能為空"); else strServerIp=txtServer.getText(); login(); 該語(yǔ)句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如果不為空,則調(diào)用login方法。這里equals表示接受變量的值;“|”表示“或
42、”的意思,;showMessageDialog是JAVA的自帶控件,作用是在當(dāng)前界面彈出對(duì)話框;關(guān)鍵字new,是一種調(diào)用方法,表示能夠直接調(diào)用類(lèi)的構(gòu)造方法。5.2.3 在線用戶顯示設(shè)計(jì)用戶完成登錄后,客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請(qǐng)求讀取在線人員名單;服務(wù)器收到該請(qǐng)求,開(kāi)始讀取數(shù)據(jù)庫(kù)中的user表并得到同事的號(hào)碼,向客戶端發(fā)送這些信息;客戶收到服務(wù)器信息后,在主窗口顯示顯現(xiàn)成員的昵稱。其實(shí)現(xiàn)代碼如下:for (int i=0;i<messobj.userOnLine.size();i+) String User=(String)messobj.userOnLine
43、.elementAt(i); lstUserList.addItem(User); 這里采用了for循環(huán),定義變量i,初值為0,只要i滿足;i<messobj.userOnLine.size()這個(gè)條件,循環(huán)將執(zhí)行一次。執(zhí)行完一次循環(huán)后i的值自動(dòng)加1,這里的messobj.userOnLine.size()表示在線用戶的人數(shù),lstUserList.addItem(User)表示顯示用戶的昵稱。5.2.4 聊天信息發(fā)送與接收聊天信息的發(fā)送與接收都是通過(guò)Socket類(lèi)實(shí)現(xiàn)的。使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉Socket。
44、也就是說(shuō),在服務(wù)端開(kāi)啟socket服務(wù),客戶端每一次連接成功時(shí)也都會(huì)同時(shí)創(chuàng)建一個(gè)線程來(lái)處理這次連接的請(qǐng)求,而該連接會(huì)被保存在一個(gè)集合中,直到服務(wù)結(jié)束,連接關(guān)閉,該線程也會(huì)結(jié)束,同時(shí)從連接的集合中移除該連接。(1)信息發(fā)送用戶在每次發(fā)送信息時(shí),首先向服務(wù)器發(fā)送的是自己信息和發(fā)送對(duì)象信息,然后再通過(guò)Socket類(lèi)向服務(wù)器發(fā)送信息。當(dāng)然,在每次輸入信息后,輸入信息框的內(nèi)容將會(huì)被清空。關(guān)鍵代碼如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMessage=txtMessage.getText(); cha
45、tobj.chatToUser=String.valueOf(cmbUser.getSelectedItem(); chatobj.whisper=chPrivateChat.isSelected()?true:false;/向服務(wù)器發(fā)送信息 trySocket toServer=new Socket(strServerIp,1001); ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream(); outObj.writeObject(chatobj); txtMessage.setText(&quo
46、t;"); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系統(tǒng)獲取發(fā)送信息者的昵稱,發(fā)送信息內(nèi)容以及發(fā)送對(duì)象的昵稱;chPrivateChat.isSelected()?true:false這是一個(gè)判斷語(yǔ)句,表示信息值是否為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則賦false。在上文中,我們講到了catch有拋出異常的作用,而trycatch也是具有相同的功能,try 塊塊是需要捕獲異常的,因?yàn)槲募锌赡懿淮嬖?,?huì)導(dǎo)致程序崩潰,所以直接捕獲,也可以直接throws
47、出去,讓調(diào)用該方法的方法去捕獲,從而使程序能夠正常進(jìn)行。此外,函數(shù)Socket(strServerIp,1001) 用來(lái)創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。參數(shù)strServerIp為通信協(xié)議的協(xié)議族,1001則為服務(wù)器IP。而outObj.writeObject(chatobj)的作用則是把調(diào)用writeObject方法,將信息發(fā)送到服務(wù)器。(2)信息輸出本即時(shí)聊天系統(tǒng)的信息輸出原理是將所有輸入信息通過(guò)socket類(lèi)向服務(wù)器發(fā)送,然后直接從服務(wù)器中突出信息。關(guān)鍵代碼如下:Socket toServer;toServer=new Socket(strServerIp,1001);/將信息發(fā)往服務(wù)
48、器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStream streamtoserver=new ObjectOutputStream (toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收來(lái)自服務(wù)器的信息由于上文以對(duì)很多方法進(jìn)行講解,現(xiàn)主要對(duì)ObjectOutputStream進(jìn)行講解。ObjectOutputStream 將 Java 對(duì)象的基本數(shù)據(jù)類(lèi)型和圖形寫(xiě)入 OutputStream。可以
49、使用 ObjectInputStream 讀?。ㄖ貥?gòu))對(duì)象。通過(guò)在流中使用文件可以實(shí)現(xiàn)對(duì)象的持久存儲(chǔ)。如果流是網(wǎng)絡(luò)套接字流,則可以在另一臺(tái)主機(jī)上或另一個(gè)進(jìn)程中重構(gòu)對(duì)象。也就是說(shuō)通過(guò)ObjectOutputStream 將toServer.getOutputStream()進(jìn)行重構(gòu),從而將服務(wù)器接受的信息重構(gòu)到客戶機(jī)上,最后通過(guò)streamtoserver.writeObject()方法將信息寫(xiě)在客戶端上。5.3 數(shù)據(jù)庫(kù)設(shè)計(jì)在前文我們已經(jīng)分析了數(shù)據(jù)庫(kù)的實(shí)現(xiàn)是采用了hibernate框架中的.XML映射。以下則為實(shí)現(xiàn)的關(guān)鍵代碼:-<hibernate-mapping package=&quo
50、t;org.seler.bean" auto-import="true">-<class name="Register_Customer" table="user"> <id name="id" column="id"> <generator class="native" /> </id> <property name="custName" not-null="true&quo
51、t; unique="true" optimistic-lock="true" lazy="false" /> <property name="custPassword" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="age" not-null="true&q
52、uot; unique="false" optimistic-lock="true" lazy="false" /> <property name="sex" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="email" not-null="true"
53、 unique="false" optimistic-lock="true" lazy="false" /> </class> </hibernate-mapping>其中,package="org.seler.bean"表示調(diào)用該框架bean中的數(shù)據(jù)包;auto-import="true"表示hibernate框架中的將映射文件實(shí)體;property表示元素定義,name表示字段名;not-null表示是否設(shè)置該字段為空;unique表示是否設(shè)置該字段為唯一值;o
54、ptimistic-lock指定此屬性做更新操作時(shí)是否需要樂(lè)觀鎖定; lazy指定是否采用延遲加載及加載策略,設(shè)置為false,表示此關(guān)聯(lián)對(duì)象不采用延遲加載。6 結(jié)論本項(xiàng)目是一個(gè)JAVA及時(shí)通訊系統(tǒng),在做系統(tǒng)的三個(gè)月之內(nèi),遇到了很多的問(wèn)題,但是也從問(wèn)題之中學(xué)習(xí)到了很多東西。比如亂碼問(wèn)題,比如socket問(wèn)題,許許多多,但是從中多虧了導(dǎo)師的幫助,我才能順利的解決,所以我在這里衷心的感謝我的導(dǎo)師我的同學(xué),感謝大家對(duì)我的幫助,才讓我能順利的完成畢業(yè)設(shè)計(jì)!其次,本即時(shí)聊天系統(tǒng)采用了C/S模型。服務(wù)器在C/S模型中處于一個(gè)中心地位。服務(wù)器一般同時(shí)為多個(gè)客戶提供服務(wù),這就造成了服務(wù)器設(shè)計(jì)的復(fù)雜性。即時(shí)通訊服務(wù)器是數(shù)據(jù)中心,它是客戶活動(dòng)的中介,需要同時(shí)應(yīng)對(duì)眾多客戶的請(qǐng)求。再次,本文并沒(méi)有采用復(fù)雜的SQL,ORICLE等數(shù)據(jù)庫(kù),而是通過(guò)hibernate框架對(duì)數(shù)據(jù)進(jìn)行映射,然后利用*.hbm.xml將數(shù)據(jù)進(jìn)行存儲(chǔ)。上面的這些問(wèn)題,我以后都將會(huì)深深的記住。并且將其運(yùn)用在實(shí)踐中去。致謝為期一個(gè)學(xué)期的畢業(yè)論文(設(shè)計(jì))已接近尾聲了,我的四年大學(xué)生涯也即將圈上一個(gè)句號(hào)。此刻我的心中卻有些悵然若失,因?yàn)槟切┦煜さ挠?jì)科學(xué)院的恩師們和各位可愛(ài)的同學(xué)們,我們也即將揮手告別了。
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【假期提升】五升六語(yǔ)文暑假作業(yè)(七)-人教部編版(含答案含解析)
- 緊急任務(wù) 面試題及答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)考前沖刺模擬試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能題庫(kù)綜合試卷A卷附答案
- 遺產(chǎn)繼承房產(chǎn)過(guò)戶合同
- 汽車(chē)運(yùn)輸合同協(xié)議書(shū)
- 語(yǔ)言學(xué)與文化差異閱讀理解題
- 信息技術(shù)支持下的農(nóng)業(yè)智能生產(chǎn)合作協(xié)議
- 陜西省渭南市富平縣2024-2025學(xué)年八年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 湖南省新高考教研聯(lián)盟2024-2025學(xué)年高三下學(xué)期一模聯(lián)考地理試題(含答案)
- 河南省創(chuàng)新發(fā)展聯(lián)盟2023-2024學(xué)年高一下學(xué)期3月月考化學(xué)試題(解析版)
- 農(nóng)村自建房包工包料施工合同
- 《鐵路職業(yè)道德》課件-第6章 鐵路職業(yè)道德修養(yǎng)
- 中考心理減壓輔導(dǎo) 中考前心理健康教育主題班會(huì)
- 小學(xué)四年級(jí)心理健康教育課
- 【上市公司的財(cái)務(wù)風(fēng)險(xiǎn)的分析和防范:以三只松鼠為例10000字(論文)】
- 部編版小學(xué)語(yǔ)文四年級(jí)下冊(cè)教師教學(xué)用書(shū)(教學(xué)參考)完整版
- 幼兒園消防安全知識(shí)競(jìng)賽試題及答案
- 莫高窟群文閱讀教學(xué)設(shè)計(jì)
- 樂(lè)理視唱練耳簡(jiǎn)明教程課后習(xí)題答案
- 2023年10月自考試題02398土力學(xué)及地基基礎(chǔ)
評(píng)論
0/150
提交評(píng)論