【正文】
巢湖學(xué)院畢業(yè)設(shè)計(jì)(論文) 前言使用Java開(kāi)發(fā)網(wǎng)絡(luò)程序在網(wǎng)絡(luò)飛速發(fā)展的今天已經(jīng)顯得格外重要,與使用其他語(yǔ)言開(kāi)發(fā)網(wǎng)絡(luò)程序一樣,Java的網(wǎng)絡(luò)開(kāi)發(fā)是相當(dāng)方便的,通過(guò)Socket進(jìn)行網(wǎng)絡(luò)信息傳輸。但與其他語(yǔ)言不同,Java語(yǔ)言天生具備網(wǎng)絡(luò)開(kāi)發(fā)的優(yōu)越性,使用Java可以快速開(kāi)發(fā)安全的基于網(wǎng)絡(luò)的服務(wù)和應(yīng)用程序。在網(wǎng)絡(luò)飛速發(fā)展的今天,各種各樣的的交流變的非常重要。人們的交流已經(jīng)不能局限在小范圍內(nèi),人們渴望與其他國(guó)家或地區(qū)的人們進(jìn)行交流。但由于地域的限制使人們不可能在短時(shí)間內(nèi)得到面對(duì)面的交流。于是,人們不得不使用Internet這個(gè)可以把全世界所有的人短時(shí)間內(nèi)都聯(lián)系到一起的新生事物,所以網(wǎng)上聊天室就誕生了。剛開(kāi)始的聊天室的功能很簡(jiǎn)單,就是單純的文字交流。但隨著時(shí)間的發(fā)展和技術(shù)的提高,現(xiàn)在的聊天室已經(jīng)具備強(qiáng)大的功能。例如,傳輸文件,語(yǔ)音聊天,視頻聊天等。使人們不僅僅滿足于言語(yǔ)上的交流,還可以分享彼此的珍藏的圖片,看到對(duì)方的面容。這些新功能都受到了大家的一致好評(píng)。隨著手機(jī)可以上網(wǎng),手機(jī)也可以登錄到網(wǎng)上聊天室中,使人們不僅僅局限于坐在電腦前聊天,可以隨時(shí)隨地的上網(wǎng)聊天。第一章 緒論(一)論文背景及課題來(lái)源隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和普及,Internet已經(jīng)成為人們獲取有關(guān)信息和相互交流的重要途徑之一,越來(lái)越多的機(jī)構(gòu)和組織開(kāi)始利用網(wǎng)絡(luò)資源傳遞、發(fā)布、收集和管理信息。這對(duì)各種類型的網(wǎng)絡(luò)提供一次很大的挑戰(zhàn)與機(jī)遇,特別是通過(guò)網(wǎng)絡(luò)進(jìn)行信息交互的這種活動(dòng),更加使網(wǎng)絡(luò)的經(jīng)營(yíng)方式充滿了活力和機(jī)動(dòng)性[5]。基于C/S模型的Java聊天室是應(yīng)用于網(wǎng)絡(luò)交流領(lǐng)域的系統(tǒng),它的主要特點(diǎn)有:1.通用性:聊天室系統(tǒng)在各種各樣的網(wǎng)絡(luò)中均可以運(yùn)行,系統(tǒng)具有較高的可移植性和使用性;2.實(shí)用性:系統(tǒng)具有良好的人機(jī)界面,便于各類使用者操作,提供了人性化的服務(wù);3.及時(shí)性:通過(guò)網(wǎng)絡(luò)的連接,系統(tǒng)雙方的交流可以在短期內(nèi)進(jìn)行,相比與傳統(tǒng)面對(duì)面的交流節(jié)省不少時(shí)間[15]。聊天室中聊天內(nèi)容的及時(shí)性和準(zhǔn)確性是極其重要的,它主要針對(duì)當(dāng)今社會(huì)快節(jié)奏生活,人們沒(méi)有很多時(shí)間來(lái)等信息。本系統(tǒng)提供的功能便于系統(tǒng)使用雙方的信息交流,有效的提高了使用者的使用效率,縮短了使用者的使用時(shí)間[6]。(二)本課題在國(guó)內(nèi)外的發(fā)展?fàn)顩r隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和普及,多數(shù)網(wǎng)站紛紛利用自己的網(wǎng)絡(luò)資源建立聊天室,并為客戶提供各種各樣便捷的服務(wù)。中國(guó)的一些龍頭網(wǎng)站,如sina,有很多聊天室,供國(guó)內(nèi)外的不同的人們進(jìn)行不同話題的討論,不僅將會(huì)員發(fā)展由國(guó)內(nèi)延伸到國(guó)際,更是為提高自身的知名度提供了方便[2]。聊天室的開(kāi)放性、信息資源的多樣性可為網(wǎng)站發(fā)展提供優(yōu)良的廣告宣傳和商品推廣,這是其他網(wǎng)站活動(dòng)方式所無(wú)法比擬的,聊天室趨向方便化、快捷化是各大網(wǎng)站成長(zhǎng)的必然經(jīng)歷的階段[8]。(三)應(yīng)解決的問(wèn)題及系統(tǒng)開(kāi)發(fā)意義本系統(tǒng)針對(duì)聊天室用戶的需要,建立了客戶端和服務(wù)器端。主要解決的問(wèn)題包括:1.服務(wù)器端和客戶端要實(shí)現(xiàn)界面化,并且界面盡量人性化。2.服務(wù)器端能夠正確的啟動(dòng),并且時(shí)刻監(jiān)視客戶端,保持與客戶端的連接。3.客戶端能夠快速準(zhǔn)確的連接上服務(wù)器端,發(fā)送的信息經(jīng)服務(wù)器端可以轉(zhuǎn)發(fā)給其他客戶。4.異常處理,對(duì)于用戶的不正確的操作系統(tǒng)應(yīng)該有提示?;贑/S的Java聊天室系統(tǒng)它的開(kāi)發(fā)意義在于為人們之間相互交流提供了一個(gè)快捷、方便的應(yīng)用平臺(tái)。大型網(wǎng)站可以通過(guò)聊天室來(lái)提高自身的知名度,增加的訪問(wèn)流量。第二章 開(kāi)發(fā)工具及相關(guān)技術(shù)介紹(一)Java與Socket簡(jiǎn)介Java語(yǔ)言是Sun公司于1991年創(chuàng)建的一種新的程序設(shè)計(jì)語(yǔ)言。該語(yǔ)言與C/C++等傳統(tǒng)程序設(shè)計(jì)語(yǔ)言不同,具有突出的平臺(tái)獨(dú)立性,高度的可靠性和安全性特點(diǎn)。1999年6月SUN公司重新定義了Java技術(shù)的結(jié)構(gòu),將Java2平臺(tái)分為三個(gè)版本:標(biāo)準(zhǔn)版(J2SE),企業(yè)版(J2EE)和微縮版(J2ME)。目前,Java技術(shù)除了沿著J2SE,J2EE,J2ME三種技術(shù)為主脈絡(luò)迅速發(fā)展外,還密切關(guān)注Internet環(huán)境下各種新型信息技術(shù)的發(fā)展,并能夠迅速與這些新技術(shù)融合,積極支持這些新技術(shù)應(yīng)用的開(kāi)發(fā)[1]。Socket是Java中需要編寫較低層次的網(wǎng)絡(luò)通信程序(例如Client/Server應(yīng)用程序)時(shí)提供的一種通訊機(jī)制。Socket是兩個(gè)程序進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通信的端點(diǎn),一般由一個(gè)地址加上一個(gè)端口號(hào)來(lái)標(biāo)識(shí)。每個(gè)服務(wù)程序都在一個(gè)眾所周知的端口上提供服務(wù),而想使用服務(wù)的客戶端程序則需要連接該端口。通過(guò)Socket的數(shù)據(jù)是原始字節(jié)流信息,通信雙方必須根據(jù)約定的協(xié)議對(duì)數(shù)據(jù)進(jìn)行處理與解釋[15]。Socket通信機(jī)制提供了兩種通信方式:有連接方式(TCP)和無(wú)連接方式(UDP數(shù)據(jù)報(bào))。有連接方式中,通信雙方在開(kāi)始時(shí)必須進(jìn)行一次連接過(guò)程,建立一條通信鏈路。通信鏈路提供了可靠的,全雙工的字節(jié)流服務(wù)。無(wú)連接方式中,通信雙方不存在一個(gè)連接過(guò)程,一次網(wǎng)絡(luò)I/O以一個(gè)數(shù)據(jù)報(bào)形式進(jìn)行,而且每次網(wǎng)絡(luò)I/O可以和不同主機(jī)的不同進(jìn)程進(jìn)行。無(wú)連接方式開(kāi)銷小于有連接方式,但是所提供的數(shù)據(jù)傳輸服務(wù)不可靠,不能保證數(shù)據(jù)報(bào)一定到達(dá)目的地[14]。Java的有連接通信采用流式I/O模式。Socket是兩個(gè)進(jìn)程間通信鏈的端點(diǎn),每個(gè)Socket有兩個(gè)流:一個(gè)輸入流和一個(gè)輸出流。只要向Socket的輸出流寫,一個(gè)進(jìn)程就可以通過(guò)網(wǎng)絡(luò)連接向其他進(jìn)程發(fā)送數(shù)據(jù);同樣,通過(guò)讀Socket的輸入流,就可以讀取傳輸來(lái)的數(shù)據(jù)[9]。有連接通信一般要經(jīng)歷以下四個(gè)基本步驟:創(chuàng)建Socket,建立連接;打開(kāi)連接到Socket的輸入/輸出流;按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作;關(guān)閉Socket。第(3)步是程序員用來(lái)調(diào)用Socket和實(shí)現(xiàn)程序功能的關(guān)鍵步驟,其他三步在各種程序中基本相同[5]。(二)JBuilder5介紹JBuilder5是美國(guó)Borland公司最新推出的遵循SUN公司J2EE標(biāo)準(zhǔn)的集成開(kāi)發(fā)工具,是目前使用最廣泛的Java開(kāi)發(fā)工具之一。JBuilder作為業(yè)界領(lǐng)先的Java開(kāi)發(fā)工具,在集成了Tomcat并支持WebLogic的同時(shí),其套裝版更是集成了DreamweaverUltraDev,Rational Rose等產(chǎn)品,JBuilder5提供了可視化的集成開(kāi)發(fā)工具,支持開(kāi)發(fā)人員向?qū)O大地簡(jiǎn)化了開(kāi)發(fā)人員的工作,使開(kāi)發(fā)更為快捷,方便[12]。JBuilder5是一組全面的高效率工具,使用Java編程語(yǔ)言創(chuàng)建可伸縮的,高性能的和具有不依賴于平臺(tái)性能的應(yīng)用程序。由于可伸縮性和基于組件,JBuilder可以開(kāi)發(fā)所有級(jí)別的應(yīng)用工程,從Apple到連接企業(yè)級(jí)的,分布式的,多層解決方案的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)應(yīng)用。JBuilder5環(huán)境是用純Java編寫。任何Java編寫的程序都可以在JBuilder上運(yùn)行、調(diào)試和工作[3]。(三)C/S模型介紹C/S是Client/Server的縮寫,即客戶機(jī)/服務(wù)器技術(shù),也可以稱為C/S模型。很顯然,C/S技術(shù)有以下幾個(gè)基本特點(diǎn):1.C/S技術(shù)一定包含兩個(gè)部分,一個(gè)作為用戶接口的前端,另一個(gè)作為共享資源接口的后端。前端被稱為客戶端,后端被稱為服務(wù)器端??蛻暨M(jìn)程包含邏輯和提供用戶接口,服務(wù)進(jìn)程充當(dāng)一個(gè)管理共享資源的軟件引擎,這些共享資源可以是數(shù)據(jù)庫(kù),打印機(jī),調(diào)制解調(diào)器和處理機(jī)等。2.前端與后端的任務(wù)對(duì)計(jì)算機(jī)資源有完全不同的要求,這些計(jì)算機(jī)資源包括:處理機(jī)速度,內(nèi)存,磁盤速度,容量,輸入輸出設(shè)備等。3.客戶機(jī)與服務(wù)器由于可能基于完全不同的硬件和操作系統(tǒng),所以它們之間的交流可能完全通過(guò)一套標(biāo)準(zhǔn)的已定義的API與RPC。4.可伸縮性是C/S系統(tǒng)的一個(gè)很重要特性。無(wú)論是水平伸縮還是垂直伸縮都有很出色的表現(xiàn)。在這里,水平伸縮(Horizontal scaling)意味著方便地添加和刪除客戶工作站。垂直伸縮(Vertical scaling)意味著移植到一個(gè)更大更快速的服務(wù)器或多服務(wù)器時(shí),即服務(wù)的升級(jí)和集群都會(huì)比較方便[4]。C/S軟件技術(shù)是一種通用的,基于消息的技術(shù)。在本論文中,我們這樣描述C/S,網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)向網(wǎng)絡(luò)上的另外一臺(tái)計(jì)算機(jī)請(qǐng)求一個(gè)進(jìn)程或數(shù)據(jù),如圖1所示。響應(yīng)服務(wù)器客戶端請(qǐng)求網(wǎng)絡(luò)圖1: C/S技術(shù)模型Client/Server 結(jié)構(gòu)的優(yōu)點(diǎn)是速度快, 缺點(diǎn)是當(dāng) Server 進(jìn)行更新時(shí), Client 也必需更新[6]。(四)用Java實(shí)現(xiàn)Socket模型首先,我們先介紹一下Socket的運(yùn)行過(guò)程。通常在服務(wù)器的指定端口被綁定一個(gè)Socket,此時(shí)服務(wù)器只是處于等待狀態(tài),監(jiān)聽(tīng)客戶的連接請(qǐng)求。這個(gè)過(guò)程如圖2所示。服務(wù)器客戶端監(jiān)聽(tīng)端口連接請(qǐng)求圖2: 服務(wù)器監(jiān)聽(tīng)客戶的連接請(qǐng)求服務(wù)器一旦接收到客戶機(jī)的連接請(qǐng)求,服務(wù)器選擇一個(gè)新的端口并綁定一個(gè)新的Socket與客戶端建立的Socket對(duì),這個(gè)過(guò)程如圖3所示。對(duì)客戶機(jī)來(lái)說(shuō),連接請(qǐng)求被接受,客戶端的Socket便被成功創(chuàng)建了,Socket通信便可以開(kāi)始進(jìn)行。由于Server端的輸出流是服務(wù)端的輸入流,Server端的輸入流是服務(wù)器的輸出流,反之亦然,所以,Client與Server可以通過(guò)讀寫各自Socket進(jìn)行交流。下面我們來(lái)看看在Java里對(duì)Socket的運(yùn)行過(guò)程實(shí)現(xiàn)。服務(wù)器使用ServerSocket類來(lái)處理客戶機(jī)的連接請(qǐng)求。當(dāng)客戶機(jī)連接到服務(wù)器所監(jiān)聽(tīng)的端口時(shí),ServerSocket將分監(jiān)聽(tīng)端口服務(wù)器客戶端連接請(qǐng)求端口圖3:服務(wù)器處理連接請(qǐng)求配一個(gè)新的Socket對(duì)象。這個(gè)新的Socket對(duì)象將連接到一些新端口,負(fù)責(zé)處理與之相對(duì)應(yīng)客戶機(jī)的通信。然后,服務(wù)器繼續(xù)監(jiān)聽(tīng)ServerSocket,處理新的客戶機(jī)連接。[13]客戶機(jī)首先創(chuàng)建一個(gè)Socket對(duì)象,用于和服務(wù)器的通信。之后需創(chuàng)建兩個(gè)對(duì)象:DataInputStream和PrintStream,前者用于從Socket的InputStream輸入流中讀取數(shù)據(jù),后者則用于向Socket的OutputStream的寫數(shù)據(jù)[11]。(五)Java中的線程模型簡(jiǎn)介線程是程序中的一個(gè)執(zhí)行流。一個(gè)執(zhí)行流是由CPU運(yùn)行程序代碼并操縱程序的數(shù)據(jù)所形成的。因此,線程被認(rèn)為是以CPU為主體的行為。在Java中線程的模型就是一個(gè)CPU、程序代碼和數(shù)據(jù)的封裝體。Java中的線程模型包含三部分。(1)一個(gè)虛擬的CPU。(2)該CPU執(zhí)行的代碼。(3)代碼所操作的數(shù)據(jù)。程序中的線程都是Thread的實(shí)例。因此用戶可以通過(guò)創(chuàng)建Thread的實(shí)例或定義并創(chuàng)建Thread子類的實(shí)例建立和控制自己的線程序[7]。(六)SQL SERVER 2000簡(jiǎn)介Sql Server 2000 是微軟公司推出的新一代關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),它繼承了Sql Server ,同時(shí)又增加了許多新的功能,具有功能強(qiáng)大、使用方便、可伸縮性強(qiáng)、與相關(guān)軟件高度集成等特點(diǎn)。一經(jīng)推出,就受到了專業(yè)人士的好評(píng),目前已經(jīng)成為web數(shù)據(jù)庫(kù)系統(tǒng)中較為常用的一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)。Sql Server 2000可運(yùn)行在windows 98/NT/2000/XP等多種操作系統(tǒng)下[10]。Sql Server 2000的重要管理工具:1.服務(wù)管理器可以通過(guò)服務(wù)管理器啟動(dòng)、停止、暫停Sql Server 服務(wù)器的相關(guān)服務(wù)。當(dāng)操作服務(wù)器中的數(shù)據(jù)時(shí),應(yīng)該首先確保該服務(wù)器正常啟動(dòng)了相應(yīng)的服務(wù)[13]。2.企業(yè)管