畢業(yè)論文-文件傳輸與聊天系統(tǒng)設(shè)計(jì)_第1頁(yè)
畢業(yè)論文-文件傳輸與聊天系統(tǒng)設(shè)計(jì)_第2頁(yè)
畢業(yè)論文-文件傳輸與聊天系統(tǒng)設(shè)計(jì)_第3頁(yè)
畢業(yè)論文-文件傳輸與聊天系統(tǒng)設(shè)計(jì)_第4頁(yè)
畢業(yè)論文-文件傳輸與聊天系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

太原理工大學(xué)畢業(yè)設(shè)計(jì)(論文)用紙緒論聊天軟件的出現(xiàn)正在逐漸改變?nèi)藗兊臏贤ㄅc交際方式。無(wú)論近在咫尺,還是遠(yuǎn)隔重洋,通訊也只是在鍵盤(pán)和鼠標(biāo)之間就可以解決問(wèn)題。聊天工具服務(wù)非常適合企業(yè)內(nèi)部或企業(yè)和客戶(hù)之間的交流。網(wǎng)絡(luò)聊天程序越來(lái)越影響著我們的網(wǎng)絡(luò)生活。隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,互聯(lián)網(wǎng)應(yīng)用越來(lái)越豐富?;ヂ?lián)網(wǎng)以其獨(dú)特的傳播方式吸引了大量用戶(hù),同時(shí)也給人們帶來(lái)了許多便利,譬如可以借助于網(wǎng)絡(luò)進(jìn)行相互交流、信息傳遞等。聊天工具作為互聯(lián)網(wǎng)中運(yùn)用最為廣泛的通信工具之一,它可以讓用戶(hù)之間進(jìn)行即時(shí)的交流和信息的傳遞。聊天工具的出現(xiàn)可以說(shuō)是基于互聯(lián)網(wǎng)通信交流方式的歷史性變革,它已經(jīng)漸漸取代了原來(lái)效率低、費(fèi)用高的如信件、電報(bào)的通信方式,以其快速、交互、簡(jiǎn)便的方式給用戶(hù)的交流提供了簡(jiǎn)單、易用的信息平臺(tái),成為現(xiàn)今應(yīng)用最為廣泛的即時(shí)通信工具之一。隨著相關(guān)技術(shù)的日益發(fā)展,用戶(hù)對(duì)功能的需求不斷提高。為了更好地服務(wù)于用戶(hù),聊天工具的功能也在不斷地完善。在未來(lái)的網(wǎng)絡(luò)時(shí)代中,聊天工具將以即時(shí)通信為其基本特點(diǎn),并與各種網(wǎng)絡(luò)應(yīng)用整合,同時(shí)隨著無(wú)線(xiàn)網(wǎng)絡(luò)的廣泛應(yīng)用,它將成為未來(lái)不可缺少的一種通信軟件。1.1項(xiàng)目背景即時(shí)聊天使親友的溝通突破時(shí)空極限,使人與人的溝通突破上下級(jí)極限,使陌生人的溝通突破環(huán)境極限,使自我與外界的溝通突破心理極限。作為使用頻率最高的網(wǎng)絡(luò)軟件,即時(shí)聊天已經(jīng)突破了作為技術(shù)工具的極限,被認(rèn)為是現(xiàn)代交流方式的象征,并構(gòu)建起一種新的社會(huì)關(guān)系。它是迄今為止對(duì)人類(lèi)社會(huì)生活改變最為深刻的一種網(wǎng)絡(luò)新形態(tài),沒(méi)有極限的溝通將帶來(lái)沒(méi)有極限的生活。聊天一直是網(wǎng)民們上網(wǎng)的主要活動(dòng)之一,網(wǎng)上聊天的主要工具已經(jīng)從初期的聊天室、論壇變?yōu)橐訫SN、OICQ(又稱(chēng)QQ)為代表的即時(shí)通訊軟件。迄今為止,全球約有一億多人使用即時(shí)通訊軟件在網(wǎng)上交流。中國(guó)網(wǎng)民慣用的即時(shí)聊天工具騰訊QQ從1999年2月誕生到現(xiàn)在,注冊(cè)用戶(hù)已超過(guò)1.6億,在線(xiàn)用戶(hù)最高時(shí)超過(guò)200萬(wàn)人,而每天獨(dú)立上線(xiàn)人數(shù)更是達(dá)到一千二百多萬(wàn),擁有活躍用戶(hù)5500萬(wàn),幾乎覆蓋所有中國(guó)網(wǎng)民。即時(shí)通訊工具使用頻率之高,超出任何一種網(wǎng)絡(luò)軟件。電子郵件曾是最重要的通訊交流工具,是互聯(lián)網(wǎng)最早的“殺手級(jí)應(yīng)用。到2004年,即時(shí)通訊軟件已取代電子郵件,成為最流行的互聯(lián)網(wǎng)通訊工具。1.2國(guó)內(nèi)外研究現(xiàn)狀通訊軟件,幾乎是每一個(gè)上網(wǎng)用戶(hù)都必備的聯(lián)絡(luò)工具。這種即時(shí)通信是一種基于網(wǎng)絡(luò)的通信技術(shù),涉及到IP/TCP/UDP/Sockets、P2P、C/S、多媒體音視頻編解碼/傳送、WebService等多種技術(shù)手段。無(wú)論即時(shí)通信系統(tǒng)的功能如何復(fù)雜,它們大都基于相同的技術(shù)原理,主要包括客戶(hù)/服務(wù)器(C/S)通信模式和對(duì)等通信(P2P)模式。通訊軟件除了能夠讓您迅速地在網(wǎng)上找到自己的朋友和工作伙伴,還可以實(shí)時(shí)交談和傳遞信息,而且,現(xiàn)在不少即時(shí)通訊軟件還集成了文件共享、語(yǔ)音聊天、網(wǎng)絡(luò)會(huì)議等功能。截止到目前,全球約有近3億多人使用即時(shí)通訊軟件進(jìn)行交流,正因?yàn)榧磿r(shí)通訊軟件擁有數(shù)以?xún)|計(jì)的用戶(hù)和迅速增長(zhǎng)的市場(chǎng),所以各個(gè)公司都盯上了這個(gè)巨大的最大市場(chǎng)國(guó)內(nèi)外紛紛涌現(xiàn)出一批通訊軟件。ICQ是最早應(yīng)用于互聯(lián)網(wǎng)的即時(shí)通信軟件,只經(jīng)過(guò)短短幾年的發(fā)展,它在行業(yè)內(nèi)的地位已是無(wú)人可以撼動(dòng)。最初的ICQ只有用戶(hù)列表和即時(shí)聊天兩個(gè)特性,但是一經(jīng)推出就受到了廣大網(wǎng)民的喜愛(ài),6個(gè)月內(nèi)其注冊(cè)用戶(hù)迅速攀升至85萬(wàn),1998年它的用戶(hù)數(shù)量更是翻了10數(shù)倍,達(dá)到了1200萬(wàn)人。ICQ的迅猛發(fā)展也令當(dāng)時(shí)的互聯(lián)網(wǎng)領(lǐng)頭羊Yahoo和在桌面軟件領(lǐng)域獨(dú)樹(shù)一幟的微軟找到了商機(jī),它們分別推出了YahooMessenger、MSNMessenger和曇花一現(xiàn)的MSChat。MSN是微軟公司提供的internet服務(wù),始終致力于發(fā)掘用戶(hù)的潛能,幫助他們與所關(guān)心的人及信息緊密相連──無(wú)論是基于手機(jī)、PDA等移動(dòng)智能終端,還是應(yīng)用PC、家庭媒體中心及其它信息家電,用戶(hù)都可以自在遨游于網(wǎng)絡(luò)世界,暢享全天候、全方位的互動(dòng)與溝通。它們改變了整個(gè)互聯(lián)網(wǎng)的交流,使之變得更加及時(shí)和方便。它深受商務(wù)人士的喜歡。當(dāng)ICQ風(fēng)靡一時(shí)的時(shí)候,在國(guó)內(nèi)也紛紛推出了各種仿ICQ的即時(shí)通信軟件,有騰訊QQ、新浪UC、網(wǎng)易泡泡等。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通信市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通信領(lǐng)域并迅速占領(lǐng)市場(chǎng)之后,其在國(guó)內(nèi)用戶(hù)數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的市場(chǎng)占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)QQ的不斷創(chuàng)新和完善是分不開(kāi)的。從某種程度上說(shuō),騰訊QQ代表了國(guó)內(nèi)即時(shí)通信最高的水平,其采用TCP/UDP協(xié)議,通過(guò)服務(wù)器中轉(zhuǎn)方式以及上層協(xié)議來(lái)保證可靠傳輸,從而實(shí)現(xiàn)即時(shí)通訊。國(guó)內(nèi)騰訊QQ最大的敵手朗瑪(新浪)UC從2001年開(kāi)始研發(fā),2002年的12月份UC正式發(fā)布,并且首創(chuàng)了很多技術(shù):UC是國(guó)內(nèi)第一個(gè)做場(chǎng)景聊天的;UC是第一個(gè)把同學(xué)錄和校友錄結(jié)合的;第一個(gè)把即時(shí)通訊與休閑游戲相結(jié)合的;第一個(gè)把發(fā)送動(dòng)畫(huà)與即時(shí)通訊相結(jié)合的。在一年的發(fā)展里,UC一度達(dá)到峰值在線(xiàn)30萬(wàn)人,注冊(cè)用戶(hù)達(dá)到7000萬(wàn)。由于我國(guó)有著網(wǎng)絡(luò)應(yīng)用最大的市場(chǎng),現(xiàn)在國(guó)內(nèi)網(wǎng)絡(luò)的基礎(chǔ)性建設(shè)發(fā)展迅速,隨著即時(shí)通信應(yīng)用的不斷完善,其功能早已不僅僅是早期的即時(shí)文字聊天。圖像表情已成為各種即時(shí)通信軟件的標(biāo)準(zhǔn)功能,文件傳輸、網(wǎng)上交友、語(yǔ)音/視頻聊天、游戲等高級(jí)功能也逐漸地被集成到即時(shí)通信的應(yīng)用中。從中可以看出,眼下的即時(shí)通信已不再是一個(gè)簡(jiǎn)單的溝通工具,而是一個(gè)信息資訊、交流互動(dòng)、休閑娛樂(lè)中心,它一直在努力地推出各種新應(yīng)用。目前即時(shí)通信軟件已越來(lái)越成熟,已成為現(xiàn)代人工作和生活中不可或缺的一部份,相信今后即時(shí)通信軟件會(huì)越來(lái)越完善??v觀即時(shí)通訊軟件業(yè)的迅速發(fā)展,設(shè)計(jì)并開(kāi)發(fā)一個(gè)即時(shí)通訊平臺(tái),對(duì)于現(xiàn)階段的學(xué)習(xí)和研究,都是極為有意義的。1.3預(yù)期目標(biāo)和經(jīng)濟(jì)效益文件傳輸與聊天系統(tǒng),它是一種面向終端使用者的網(wǎng)絡(luò)溝通工具服務(wù),使用者可以通過(guò)安裝了即時(shí)通信的終端機(jī)進(jìn)行兩人或多人之間的實(shí)時(shí)溝通。文件傳輸與聊天系統(tǒng)利用的是互聯(lián)網(wǎng)線(xiàn)路,通過(guò)文字、語(yǔ)音、視頻、文件的信息交流與互動(dòng),有效節(jié)省了溝通雙方的時(shí)間與經(jīng)濟(jì)成本。通信不再是一個(gè)單純的聊天工具,它已經(jīng)發(fā)展成集交流、資訊、娛樂(lè)、搜索、電子商務(wù)、辦公協(xié)作和企業(yè)客戶(hù)服務(wù)等為一體的綜合化信息平臺(tái)。這個(gè)通訊系統(tǒng)一旦開(kāi)發(fā)完成,只需要一些基本維護(hù)和簡(jiǎn)單擴(kuò)展的費(fèi)用,產(chǎn)生的經(jīng)濟(jì)效益源源不斷,相當(dāng)樂(lè)觀,有著很廣闊的發(fā)展前景。1.4本文的主要工作本課題之前:充分調(diào)查了市場(chǎng)主流類(lèi)似通訊軟件的優(yōu)點(diǎn)與缺點(diǎn);對(duì)大數(shù)操作者的年齡、職業(yè)、文化層次等做了一系列調(diào)查;在結(jié)合行業(yè)自身的特點(diǎn)的同時(shí),也充分考慮到設(shè)計(jì)者自身的條件與現(xiàn)有技術(shù)成熟程度的基礎(chǔ)上做出的一款適合大多數(shù)人使用的通訊軟件。產(chǎn)品定位:大多數(shù)人能夠使用,操作者有無(wú)相關(guān)專(zhuān)業(yè)知識(shí)都可主要功能有:(1) 用戶(hù)注冊(cè)(2) 用戶(hù)登陸(3) 添加好友(4) 修改密碼(5) 即時(shí)通訊(6)發(fā)送文件實(shí)現(xiàn)技術(shù):Java、Eclipse3.4.1及SQLServer2000數(shù)據(jù)庫(kù)本設(shè)計(jì)操作簡(jiǎn)單、方便,快捷、準(zhǔn)確、數(shù)據(jù)存儲(chǔ)安全可靠,針對(duì)自身特點(diǎn)去除了不必要的冗余東西,使系統(tǒng)負(fù)擔(dān)最小,速度最快;采用更高的安全機(jī)制,使數(shù)據(jù)更加安全,用戶(hù)可以放心的使用。2開(kāi)發(fā)工具簡(jiǎn)介2.1Java語(yǔ)言Java語(yǔ)言是SUN公司于1995年5月推出的新一代面向?qū)ο蟮挠?jì)算機(jī)通用編程語(yǔ)言,是繼WWW之后又一引起世界轟動(dòng)的產(chǎn)品。Java語(yǔ)言的特點(diǎn)是跨平臺(tái)和強(qiáng)大的網(wǎng)絡(luò)編程功能。在Java語(yǔ)言誕生之前,Internet已存在,所以Java語(yǔ)言本身就封裝了大量進(jìn)行網(wǎng)絡(luò)編程的類(lèi)庫(kù),使得網(wǎng)絡(luò)編程功能強(qiáng)大,同時(shí)又簡(jiǎn)化了網(wǎng)絡(luò)編程的操作。因此利用Java語(yǔ)言可以開(kāi)發(fā)出功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序。2.2SqlServer數(shù)據(jù)庫(kù)SQL是StructuredQueryLanguage(結(jié)構(gòu)化查詢(xún)語(yǔ)言)的縮寫(xiě),是用戶(hù)操作關(guān)系數(shù)據(jù)庫(kù)的通用語(yǔ)言。SQL雖然叫結(jié)構(gòu)化查詢(xún)語(yǔ)言,其查詢(xún)操作確實(shí)是數(shù)據(jù)庫(kù)中的主要操作,但并不是說(shuō)SQL語(yǔ)言只支持查詢(xún)操作,它實(shí)際上包含數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制等與數(shù)據(jù)庫(kù)有關(guān)的全部功能。MicrosoftSQLServer2000是一個(gè)分布式的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有客戶(hù)機(jī)/服務(wù)器體系結(jié)構(gòu),采用了Transact-sql的sql語(yǔ)言在客戶(hù)機(jī)與服務(wù)器間傳遞客戶(hù)機(jī)的請(qǐng)求與服務(wù)器的處理結(jié)果。眾所周知,SQLServer2000能夠滿(mǎn)足今天的商業(yè)環(huán)境要求不同類(lèi)型的數(shù)據(jù)庫(kù)解決方案。它一種應(yīng)用廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng),具有許多顯著的優(yōu)點(diǎn):易用性、適合分布式組織的可伸縮性、用于決策支持的數(shù)據(jù)倉(cāng)庫(kù)功能、與許多其他服務(wù)器軟件緊密關(guān)聯(lián)的集成性、良好的性?xún)r(jià)比等。性能、可伸縮性及可靠性是基本要求,而進(jìn)入市場(chǎng)時(shí)間也非常關(guān)鍵。除這些核心企業(yè)品質(zhì)外,SQLServer2000還為您的數(shù)據(jù)管理與分析帶來(lái)了靈活性,允許單位在快速變化的環(huán)境中從容響應(yīng),從而獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。從數(shù)據(jù)管理和分析角度看,將原始數(shù)據(jù)轉(zhuǎn)化為商業(yè)智能和充分利用Web帶來(lái)的機(jī)會(huì)非常重要。作為一個(gè)完備的數(shù)據(jù)庫(kù)和數(shù)據(jù)分析包,SQLServer2000為快速開(kāi)發(fā)新一代企業(yè)級(jí)商業(yè)應(yīng)用程序、為企業(yè)贏得核心競(jìng)爭(zhēng)優(yōu)勢(shì)打開(kāi)了勝利之門(mén)。作為重要的基準(zhǔn)測(cè)試可伸縮性和速度獎(jiǎng)的記錄保持者,SQLServer2000是一個(gè)具備完全Web支持的數(shù)據(jù)庫(kù)產(chǎn)品,提供了對(duì)可擴(kuò)展標(biāo)記語(yǔ)言(XML)的核心支持以及在Internet上和防火墻外進(jìn)行查詢(xún)的能力。(1)SQLServer特點(diǎn)①真正的客戶(hù)機(jī)/服務(wù)器體系結(jié)構(gòu)。②圖形化用戶(hù)界面,使系統(tǒng)管理和數(shù)據(jù)庫(kù)管理更加直觀、簡(jiǎn)單。③豐富的編程接口工具,為用戶(hù)進(jìn)行程序設(shè)計(jì)提供了更大的選擇余地。④SQLServer與WindowsNT完全集成,利用了NT的許多功能,如發(fā)送和接受消息,管理登錄安全性等。SQLServer也可以很好地與MicrosoftBackOffice產(chǎn)品集成。⑤具有很好的伸縮性,可跨越從運(yùn)行Windows98/2000的膝上型電腦到運(yùn)行Windowsxp的大型多處理器等多種平臺(tái)使用。⑥對(duì)Web技術(shù)的支持,使用戶(hù)能夠很容易地將數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)布到Web頁(yè)面上。⑦SQLServer提供數(shù)據(jù)倉(cāng)庫(kù)功能,這個(gè)功能只在Oracle和其他更昂貴的DBMSSQLServer2000新特性(2)支持XML(ExtensiveMarkupLanguage,擴(kuò)展標(biāo)記語(yǔ)言)①?gòu)?qiáng)大的基于Web的分析②支持OLEDB和多種查詢(xún)③支持分布式的分區(qū)視圖2.3Jdbc簡(jiǎn)介JDBC(JavaDataBaseConnectivity,Java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪(fǎng)問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠用純JavaAPI編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,同時(shí),JDBC也是個(gè)商標(biāo)名。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語(yǔ)句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪(fǎng)問(wèn)Sybase數(shù)據(jù)庫(kù)專(zhuān)門(mén)寫(xiě)一個(gè)程序,為訪(fǎng)問(wèn)Oracle數(shù)據(jù)庫(kù)又專(zhuān)門(mén)寫(xiě)一個(gè)程序,或?yàn)樵L(fǎng)問(wèn)Informix數(shù)據(jù)庫(kù)又編寫(xiě)另一個(gè)程序等等,程序員只需用JDBCAPI寫(xiě)一個(gè)程序就夠了,它可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL調(diào)用。同時(shí),將Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員不必為不同的平臺(tái)編寫(xiě)不同的應(yīng)用程序,只須寫(xiě)一遍程序就可以讓它在任何平臺(tái)上運(yùn)行,這也是Java語(yǔ)言“編寫(xiě)一次,處處運(yùn)行”的優(yōu)勢(shì)。Java數(shù)據(jù)庫(kù)連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法。JDBC對(duì)Java程序員而言是API,對(duì)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開(kāi)發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫(kù)廠(chǎng)商及第三方中間件廠(chǎng)商實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接提供了標(biāo)準(zhǔn)方法。JDBC使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn),如ODBC之間的橋接。JDBC實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡(jiǎn)單、嚴(yán)格類(lèi)型定義且高性能實(shí)現(xiàn)的接口。2.4Eclipse介紹Eclipse是一種可擴(kuò)展的開(kāi)放源代碼IDE。2001年11月,IBM公司捐出價(jià)值4,000萬(wàn)美元的源代碼組建了Eclipse聯(lián)盟,并由該聯(lián)盟負(fù)責(zé)這種工具的后續(xù)開(kāi)發(fā)。集成開(kāi)發(fā)環(huán)境(IDE)經(jīng)常將其應(yīng)用范圍限定在“開(kāi)發(fā)、構(gòu)建和調(diào)試”的周期之中。為了幫助集成開(kāi)發(fā)環(huán)境(IDE)克服目前的局限性,業(yè)界廠(chǎng)商合作創(chuàng)建了Eclipse平臺(tái)。Eclipse允許在同一IDE中集成來(lái)自不同供應(yīng)商的工具,并實(shí)現(xiàn)了工具之間的互操作性,從而顯著改變了項(xiàng)目工作流程,使開(kāi)發(fā)者可以專(zhuān)注在實(shí)際的嵌入式目標(biāo)上。Eclipse為工具開(kāi)發(fā)商提供了更好的靈活性,使他們能更好地控制自己的軟件技術(shù)。Eclipse是一個(gè)開(kāi)放源代碼的項(xiàng)目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開(kāi)發(fā)自己的功能插件。同時(shí)可以通過(guò)開(kāi)發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能,比如在現(xiàn)有的Java開(kāi)發(fā)環(huán)境中加入Tomcat服務(wù)器插件??梢詿o(wú)限擴(kuò)展,而且有著統(tǒng)一的外觀,操作和系統(tǒng)資源管理,這也正是Eclipse的潛力所在。雖然大多數(shù)用戶(hù)很樂(lè)于將Eclipse當(dāng)作Java集成開(kāi)發(fā)環(huán)境(IDE)來(lái)使用,但Eclipse的目標(biāo)卻不僅限于此。Eclipse還包括插件開(kāi)發(fā)環(huán)境(Plug-inDevelopmentEnvironment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展Eclipse的軟件開(kāi)發(fā)人員,因?yàn)樗试S他們構(gòu)建與Eclipse環(huán)境無(wú)縫集成的工具。由于Eclipse中的每樣?xùn)|西都是插件,對(duì)于給Eclipse提供插件,以及給用戶(hù)提供一致和統(tǒng)一的集成開(kāi)發(fā)環(huán)境而言,所有工具開(kāi)發(fā)人員都具有同等的發(fā)揮場(chǎng)所。這種平等和一致性并不僅限于Java開(kāi)發(fā)工具。盡管Eclipse是使用Java語(yǔ)言開(kāi)發(fā)的,但它的用途并不限于Java語(yǔ)言;例如,支持諸如C/C++、COBOL、PHP等編程語(yǔ)言的插件已經(jīng)可用,或預(yù)計(jì)將會(huì)推出。Eclipse框架還可用來(lái)作為與軟件開(kāi)發(fā)無(wú)關(guān)的其他應(yīng)用程序類(lèi)型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)?;贓clipse的應(yīng)用程序的一個(gè)突出例子是IBMRationalSoftwareArchitect,它構(gòu)成了IBMJava開(kāi)發(fā)工具系列的基礎(chǔ)。2.5C/S結(jié)構(gòu)C/S(Client/Server)結(jié)構(gòu),即大家熟知的客戶(hù)機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開(kāi)銷(xiāo)。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的Web應(yīng)用發(fā)展,Web和Client/Server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶(hù)都可以訪(fǎng)問(wèn)新的和現(xiàn)有的應(yīng)用系統(tǒng),通過(guò)現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。傳統(tǒng)的C/S體系結(jié)構(gòu)雖然采用的是開(kāi)放模式,但這只是系統(tǒng)開(kāi)發(fā)一級(jí)的開(kāi)放性,在特定的應(yīng)用中無(wú)論是Client端,還是Server端都還需要特定的軟件支持。由于沒(méi)能提供用戶(hù)真正期望的開(kāi)放環(huán)境,C/S結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開(kāi)發(fā)不同版本的軟件,加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶(hù)同時(shí)使用。而且代價(jià)高,效率低。C/S結(jié)構(gòu)的基本原則是將計(jì)算機(jī)應(yīng)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成,即采用“功能分布”原則??蛻?hù)端完成數(shù)據(jù)處理,數(shù)據(jù)表示以及用戶(hù)接口功能;服務(wù)器端完成DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))的核心功能。這種客戶(hù)請(qǐng)求服務(wù)、服務(wù)器提供服務(wù)的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶(hù)端PC的處理能力,很多工作可以在客戶(hù)端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶(hù)端響應(yīng)速度快。具體表現(xiàn)在以下兩點(diǎn):(1)應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。最簡(jiǎn)單的C/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用由兩部分組成,即客戶(hù)應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器程序。二者可分別稱(chēng)為前臺(tái)程序與后臺(tái)程序。運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器程序的機(jī)器,也稱(chēng)為應(yīng)用服務(wù)器。一旦服務(wù)器程序被啟動(dòng),就隨時(shí)等待響應(yīng)客戶(hù)程序發(fā)來(lái)的請(qǐng)求;客戶(hù)應(yīng)用程序運(yùn)行在用戶(hù)自己的電腦上,對(duì)應(yīng)于數(shù)據(jù)庫(kù)服務(wù)器,可稱(chēng)為客戶(hù)電腦,當(dāng)需要對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行任何操作時(shí),客戶(hù)程序就自動(dòng)地尋找服務(wù)器程序,并向其發(fā)出請(qǐng)求,服務(wù)器程序根據(jù)預(yù)定的規(guī)則作出應(yīng)答,送回結(jié)果,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。(2)數(shù)據(jù)的儲(chǔ)存管理功能較為透明。在數(shù)據(jù)庫(kù)應(yīng)用中,數(shù)據(jù)的儲(chǔ)存管理功能,是由服務(wù)器程序和客戶(hù)應(yīng)用程序分別獨(dú)立進(jìn)行的,并且通常把那些不同的(不管是已知還是未知的)前臺(tái)應(yīng)用所不能違反的規(guī)則,在服務(wù)器程序中集中實(shí)現(xiàn),例如訪(fǎng)問(wèn)者的權(quán)限,編號(hào)可以重復(fù)、必須有客戶(hù)才能建立定單這樣的規(guī)則。所有這些,對(duì)于工作在前臺(tái)程序上的最終用戶(hù),是“透明”的,他們無(wú)須過(guò)問(wèn)(通常也無(wú)法干涉)背后的過(guò)程,就可以完成自己的一切工作。在客戶(hù)服務(wù)器架構(gòu)的應(yīng)用中,前臺(tái)程序不是非?!笆菪 ?,麻煩的事情都交給了服務(wù)器和網(wǎng)絡(luò)。在C/S體系下,數(shù)據(jù)庫(kù)不能真正成為公共、專(zhuān)業(yè)化的倉(cāng)庫(kù),它受到獨(dú)立的專(zhuān)門(mén)管理。C/S架構(gòu)的劣勢(shì)有高昂的維護(hù)成本且投資大。首先,采用C/S架構(gòu),要選擇適當(dāng)?shù)臄?shù)據(jù)庫(kù)平臺(tái)來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的真正“統(tǒng)一”,使分布于兩地的數(shù)據(jù)同步完全交由數(shù)據(jù)庫(kù)系統(tǒng)去管理,但邏輯上兩地的操作者要直接訪(fǎng)問(wèn)同一個(gè)數(shù)據(jù)庫(kù)才能有效實(shí)現(xiàn),有這樣一些問(wèn)題,如果需要建立“實(shí)時(shí)”的數(shù)據(jù)同步,就必須在兩地間建立實(shí)時(shí)的通訊連接,保持兩地的數(shù)據(jù)庫(kù)服務(wù)器在線(xiàn)運(yùn)行,網(wǎng)絡(luò)管理工作人員既要對(duì)服務(wù)器維護(hù)管理,又要對(duì)客戶(hù)端維護(hù)和管理,這需要高昂的投資和復(fù)雜的技術(shù)支持,維護(hù)成本很高,維護(hù)任務(wù)量大。其次,傳統(tǒng)的C/S結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開(kāi)發(fā)不同版本的軟件,由于產(chǎn)品的更新?lián)Q代十分快,代價(jià)高和低效率已經(jīng)不適應(yīng)工作需要。在JAVA這樣的跨平臺(tái)語(yǔ)言出現(xiàn)之后,B/S架構(gòu)更是猛烈沖擊C/S,并對(duì)其形成威脅和挑戰(zhàn)。3文件傳輸與聊天系統(tǒng)的設(shè)計(jì)3.1需求分析3.1.1功能需求注冊(cè)登錄文件傳輸與聊天系統(tǒng)擁有多個(gè)賬戶(hù);允許多個(gè)用戶(hù)注冊(cè);一個(gè)用戶(hù)可以注冊(cè)多個(gè)標(biāo)識(shí);注冊(cè)所使用的帳號(hào)類(lèi)型為字母數(shù)字的組合;注冊(cè)新用戶(hù)時(shí)必須填寫(xiě)符合要求的信息;注冊(cè)后只有用戶(hù)名與密碼驗(yàn)證成功才能正確登錄。注冊(cè)登錄如圖3-1所示。圖3-1注冊(cè)登錄用例圖添加好友添加好友模塊是網(wǎng)絡(luò)聊天必不可少的一步,用戶(hù)只有通過(guò)添加好友功能來(lái)實(shí)現(xiàn)用戶(hù)之間的聊天。首先雙擊客戶(hù)端應(yīng)用程序,讓其程序運(yùn)行,經(jīng)過(guò)登錄驗(yàn)證后,通過(guò)調(diào)用線(xiàn)程,并調(diào)用線(xiàn)程的接收函數(shù),用來(lái)接收數(shù)據(jù),判斷相關(guān)操作。進(jìn)入到客戶(hù)端后,在下方有個(gè)添加好友按鈕,在好友ID框中輸入好友ID號(hào),確定要添加此好友,則單擊添加好友按鈕,就觸發(fā)了添加好友事件處理函數(shù),先用判斷語(yǔ)句對(duì)在線(xiàn)狀態(tài)進(jìn)行判斷,如果好友不在線(xiàn),彈出提示信息表明稍候重試,如果好友在線(xiàn),則通過(guò)調(diào)用方法將控制字符發(fā)送給所要添加的好友,這時(shí)對(duì)方的客戶(hù)端就會(huì)彈出好友添加請(qǐng)求對(duì)話(huà)框。對(duì)方選擇接受請(qǐng)求或者拒絕請(qǐng)求,當(dāng)對(duì)方選擇同意添加時(shí),點(diǎn)擊接收按鈕,觸發(fā)同意添加好友事件處理函數(shù),并且調(diào)用方法發(fā)送控制字符給請(qǐng)求方用戶(hù),表示以通過(guò)用戶(hù)驗(yàn)證,并且這時(shí)與服務(wù)器建立連接,向服務(wù)器提交好友添加請(qǐng)求,以完成整個(gè)好友的添加過(guò)程;如果單擊拒絕按鈕就調(diào)用拒絕添加好友事件處理函數(shù),拒絕了用戶(hù)的好友添加請(qǐng)求,并關(guān)閉好友請(qǐng)求窗體。這樣就實(shí)現(xiàn)了好友添加功能??梢赃x擇適當(dāng)?shù)娜思訛楹糜眩灰粋€(gè)用戶(hù)可以添加多個(gè)人為好友。添加好友如圖3-2所示。圖3-2添加好友用例圖文字聊天文字聊天模塊供用戶(hù)與在線(xiàn)的好友進(jìn)行聊天,用戶(hù)首先查看好友是否在線(xiàn),如果在線(xiàn)即可進(jìn)行即時(shí)通訊。文字聊天是聊天工具最早的信息傳遞方式,用戶(hù)通過(guò)打字,將信息傳遞給好友。至今為止,文字聊天在網(wǎng)絡(luò)聊天中是應(yīng)用最為廣泛的聊天方式。其實(shí)現(xiàn)原理是:通信雙方通過(guò)Socket套結(jié)字進(jìn)行文字信息的傳輸。用戶(hù)雙方通過(guò)Socket套結(jié)字建立連接,并將文字信息以數(shù)據(jù)流的形式進(jìn)行發(fā)送。如圖3-3所示。圖3-3文字聊天用例圖發(fā)送文件人們?cè)诨ヂ?lián)網(wǎng)上聊天時(shí),需要傳遞一些如圖片、文件、資料等東西,這時(shí)聊天工具已有的文字聊天已經(jīng)不能滿(mǎn)足人們的這一需求,所以為方便用戶(hù)的使用,聊天工具給用戶(hù)提供了文件傳輸模塊,可以讓用戶(hù)在文字聊天的同時(shí),給對(duì)方發(fā)送一些圖片、文件等信息。在功能上是聊天工具更為完善。其實(shí)現(xiàn)原理是:首先將外儲(chǔ)中的文件以文件流的形式提取到緩存中,然后通信雙方通過(guò)Socket套結(jié)字建立連接,并將緩存中存放的文件流進(jìn)行發(fā)送。用戶(hù)1向用戶(hù)2發(fā)送文件時(shí),先發(fā)送請(qǐng)求信息給用戶(hù)2,用戶(hù)2接收到用戶(hù)1的請(qǐng)求信息后,對(duì)用戶(hù)1發(fā)送回應(yīng)信息,如果用戶(hù)2同意接收文件請(qǐng)求,則開(kāi)始文件傳輸,如果用戶(hù)2不同意接收文件請(qǐng)求,則停止傳輸。發(fā)送文件如圖3-4所示。圖3-4發(fā)送文件用例圖3.1.2通訊模型的特點(diǎn)適用性作為一個(gè)一般性的模型,本通訊模型適用于無(wú)線(xiàn)網(wǎng)絡(luò)和Internet上現(xiàn)存的多種系統(tǒng)。模型中的JQQ可以是Internet上的應(yīng)用程序,也可以是移植到移動(dòng)電話(huà)和其他各種無(wú)線(xiàn)手持設(shè)備上的應(yīng)用程序。即時(shí)通訊和服務(wù)可以是Internet上ICQ服務(wù),可以是GSM標(biāo)準(zhǔn)中的SMS(ShortMessageService,短信息服務(wù)),也可以是NTTDoCoMe的I-MODE服務(wù)。擴(kuò)展性模型具有很強(qiáng)的擴(kuò)展性。本模型并沒(méi)有規(guī)定服務(wù)必須采用中央服務(wù)器。在模型實(shí)現(xiàn)的時(shí)候,可以使用基于中央服務(wù)器的星形結(jié)構(gòu),也可以使用對(duì)等網(wǎng)絡(luò)結(jié)構(gòu)甚至其他混合結(jié)構(gòu)。例如,深圳騰訊QQ的通訊服務(wù)系統(tǒng)使用的是基于中央服務(wù)器的Client/Server的混合星型結(jié)構(gòu),而即時(shí)通訊服務(wù)使用的是對(duì)等網(wǎng)絡(luò)加客戶(hù)機(jī)——服務(wù)器結(jié)構(gòu)[6]。3.2可行性分析技術(shù)可行性分析①項(xiàng)目開(kāi)發(fā)過(guò)程中遇到難以克服的技術(shù)問(wèn)題,該怎么辦。這一方面,我們慶幸的是在學(xué)校我們有好多的老師在背后支持著我們,同時(shí)學(xué)校的網(wǎng)絡(luò)比較方面,給我們解決問(wèn)題提供了方便。而且,憑借借閱圖書(shū)館收藏圖書(shū)更增加了我們解決技術(shù)問(wèn)題的信心。②軟件的質(zhì)量如何。有些應(yīng)用對(duì)實(shí)時(shí)性要求很高,如果軟件運(yùn)行慢如蝸牛,即便功能完備也毫無(wú)實(shí)用價(jià)值。有些高風(fēng)險(xiǎn)的應(yīng)用對(duì)軟件的正確性與精確性要求極高,如果軟件出了差錯(cuò)而造成用戶(hù)利益損失,那么軟件開(kāi)發(fā)在某種意義上說(shuō)也就失敗了。鑒于此,我們?cè)诰幋a測(cè)試的時(shí)候,找專(zhuān)業(yè)老師做為技術(shù)支持。并且在完成之后,實(shí)際驗(yàn)證可行性,同時(shí)要考慮到機(jī)器硬件設(shè)備的不同而給軟件帶來(lái)的不可預(yù)知的結(jié)果,所以在機(jī)房的不同電腦上運(yùn)行軟件達(dá)到測(cè)試目的。不確定性分析需要格外考慮的實(shí)際情況也可以說(shuō)是面臨的一個(gè)現(xiàn)實(shí)問(wèn)題就是:畢業(yè)生面臨著畢業(yè)與找工作,還有就是最后的畢業(yè)答辯與論文設(shè)計(jì)。這個(gè)過(guò)程中,學(xué)校會(huì)有許多有關(guān)畢業(yè)生的信息要安排,事物要處理。在進(jìn)行課題設(shè)計(jì)的時(shí)候,難免會(huì)有一些格外的因素,如,時(shí)間被耽誤,在規(guī)定的時(shí)間中無(wú)法完成相應(yīng)的任務(wù);有問(wèn)題存在的時(shí)候,老師也恰巧也有事情,問(wèn)題無(wú)法及時(shí)解決等一系列問(wèn)題,都是要考慮在內(nèi)的。再有就是,最害怕在做系統(tǒng)的中途遇到系統(tǒng)崩潰而東西又無(wú)法保存;或者是東西全部做好之后,忘記了備份,而更為不巧的是以染上了病毒,而致使幾個(gè)月的辛苦負(fù)于東流。這些是容易忽視的也是最容易出現(xiàn)的情況。所以要在設(shè)計(jì)的時(shí)候做足這方面的準(zhǔn)備,不讓那種情況發(fā)生。分析結(jié)論通過(guò)上面簡(jiǎn)要的分析,最后做出的結(jié)論是:方案可以按照時(shí)間要求、保證質(zhì)量的基礎(chǔ)上運(yùn)用Eclipse與SQLServer2000數(shù)據(jù)庫(kù)進(jìn)行系統(tǒng)的開(kāi)發(fā)[2]。3.3功能設(shè)計(jì)及流程設(shè)計(jì)3.3.1功能設(shè)計(jì)系統(tǒng)功能設(shè)計(jì)如圖3-7所示。圖3-7系統(tǒng)功能設(shè)計(jì)圖用戶(hù)注冊(cè)模塊用戶(hù)需要正確填寫(xiě)自己的用戶(hù)名、密碼、真實(shí)姓名、性別、個(gè)性簽名等信息,如果用戶(hù)名合法且未被占用,則可以注冊(cè)成功,如圖3-8所示。圖3-8用戶(hù)注冊(cè)流程圖用戶(hù)登錄模塊用戶(hù)需要正確填寫(xiě)自己的用戶(hù)名、密碼,如果驗(yàn)證成功,則可以進(jìn)入到JQQ即時(shí)通訊系統(tǒng)主面板,與在線(xiàn)好友進(jìn)行即時(shí)通訊,如圖3-9所示。圖3-9用戶(hù)登錄流程圖添加好友模塊用戶(hù)成功登錄后,可選擇在線(xiàn)的其他用戶(hù)添加好友,如果對(duì)方同意,則添加好友成功,雙擊好友頭像即可以聊天等。如圖3-10所示。圖3-10添加好友流程圖修改密碼模塊用戶(hù)成功登錄后,若想修改自己的密碼,則可點(diǎn)擊修改密碼按鈕,對(duì)自己的密碼進(jìn)行修改。如圖3-11所示。圖3-11修改密碼流程圖文字聊天模塊文字聊天模塊是本系統(tǒng)最關(guān)鍵的環(huán)節(jié)與目的所在。用戶(hù)可以選擇在線(xiàn)好友,雙擊其頭像進(jìn)行文字聊天等,如圖3-12所示。圖3-12即時(shí)通訊流程圖發(fā)送文件模塊發(fā)送文件模塊是最近一系列IM軟件推出的新功能。用戶(hù)可以選擇在線(xiàn)好友,雙擊其頭像,在聊天界面下點(diǎn)擊發(fā)送文件按鈕,選擇文件發(fā)送給對(duì)方,如果對(duì)方同意接受文件,則發(fā)送成功,如圖3-13所示圖3-13即時(shí)通訊流程圖3.3.2框架設(shè)計(jì)本系統(tǒng)總體框架如圖3-5所示。圖3-5系統(tǒng)總體框架圖3.3.3拓?fù)浣Y(jié)構(gòu)系統(tǒng)的拓?fù)浣Y(jié)構(gòu)如圖3-6所示。圖3-6系統(tǒng)的拓?fù)浣Y(jié)構(gòu)圖這是一種非常成熟的模式,大多數(shù)TCP/IP應(yīng)用系統(tǒng),例如SMTP服務(wù)、DNS服務(wù)、WWW服務(wù)等都是使用這種模式。JQQ的服務(wù)是由服務(wù)器構(gòu)成的;JQQ中每個(gè)實(shí)體都由一個(gè)寄主服務(wù)器管理。個(gè)體必須向服務(wù)器注冊(cè),注冊(cè)后就有可以控制的發(fā)信者和即時(shí)收件箱。發(fā)信者是獨(dú)立于即時(shí)通訊服務(wù)外的實(shí)體,而即時(shí)收信箱則存在于寄主服務(wù)器中。JQQ的通訊系統(tǒng)中只有存在發(fā)送者和接收者兩類(lèi)實(shí)體。注冊(cè)后的用戶(hù)必須在服務(wù)器上建立登記表,才能知道其他用戶(hù)的存在,與其他用戶(hù)進(jìn)行交流。TCP協(xié)議 TCP和UDP是TCP/IP協(xié)議族的兩個(gè)主要的傳輸協(xié)議,TCP是面向連接的,UDP是面向無(wú)連接的,而實(shí)際上他們最大的區(qū)別在于為應(yīng)用協(xié)議提供不同的服務(wù),TCP協(xié)議為應(yīng)用程序提供點(diǎn)到點(diǎn)的通信:建立可靠的連接。如果有故障發(fā)生,阻礙分組到達(dá)遠(yuǎn)程系統(tǒng),或者服務(wù)器不接受連接,客戶(hù)都會(huì)得到通知:數(shù)據(jù)可靠的交付,故障而不能交付,發(fā)送方會(huì)得到通知;具有流控的傳輸;雙工的傳輸,單個(gè)TCP連接允許同時(shí)雙向傳送數(shù)據(jù)流模式,TCP從發(fā)送方到接收方發(fā)送沒(méi)有報(bào)文邊界的字節(jié)。UDP協(xié)議UDP為應(yīng)用程序提供多對(duì)多的通信,UDP在進(jìn)行通訊的應(yīng)用的數(shù)量上面,具有更大的靈活性。多個(gè)應(yīng)用可以向一個(gè)接收方發(fā)送報(bào)文,一個(gè)發(fā)送方向也可以向多個(gè)接收方發(fā)送報(bào)文。UDP還可以使用底層網(wǎng)絡(luò)的廣播和組播設(shè)施交付報(bào)文:UDP提供的是不可靠交付語(yǔ)義,報(bào)文可能丟失、重復(fù)或者失序,而發(fā)送方是得不到通知的;缺乏流控制;報(bào)文模式,當(dāng)有數(shù)據(jù)交付的時(shí)候,必須制定報(bào)文邊界。傳輸層協(xié)議的選定由于TCP和UDP的語(yǔ)義及其不同,如果要考慮應(yīng)用協(xié)議所要求的語(yǔ)義,設(shè)計(jì)者就不能不在面向連接和無(wú)連接的傳輸協(xié)議間作出選擇。利用面向連接的TCP協(xié)議,可以大大簡(jiǎn)化應(yīng)用協(xié)議的設(shè)計(jì)工作。由于UDP不提供可靠的交付,無(wú)連接傳輸要求應(yīng)用協(xié)議提供可靠性,并在必要時(shí),使用一種稱(chēng)為自適應(yīng)重傳的復(fù)雜技術(shù)。為現(xiàn)有的應(yīng)用程序增加自適應(yīng)重傳比較困難,它需要程序員具有相當(dāng)?shù)貙?zhuān)業(yè)知識(shí)。選擇TCP一個(gè)很大的缺點(diǎn)就是,建立和中止連接的三次握手使TCP比起UDP開(kāi)銷(xiāo)大。在考慮是用UDP還是用TCP作為域名服務(wù)系統(tǒng)的運(yùn)輸層協(xié)議是,設(shè)計(jì)者往往陷入兩難的境地。一個(gè)理想的解決方案應(yīng)該既能提供可靠的數(shù)據(jù)傳輸,又不需要專(zhuān)門(mén)的建立和釋放連接,不需要報(bào)文的反段和重組,同時(shí)還能是兩端的空閑狀態(tài)所處的時(shí)間最短。TCP什么都好,只可惜他需要建立和釋放連接。還有一個(gè)嚴(yán)重的問(wèn)題就是TCP在空閑的連接上根本不發(fā)送任何分組。假設(shè)客戶(hù)與某個(gè)服務(wù)器建立了連接,并與之交換請(qǐng)求和響應(yīng),接著便崩潰了。因?yàn)榭蛻?hù)已經(jīng)崩潰了,它就不會(huì)再發(fā)送任何請(qǐng)求了,然而,服務(wù)器到目前為止對(duì)它收到的所有請(qǐng)求都進(jìn)行了響應(yīng),它便不會(huì)再向客戶(hù)發(fā)送更多的數(shù)據(jù)了。這種情況下,服務(wù)器擁有分配給該連接的數(shù)據(jù)結(jié)構(gòu)(包括緩存空間),這些資源不能被重新分配。服務(wù)器是設(shè)計(jì)成始終運(yùn)行的。如果不斷有客戶(hù)崩潰,服務(wù)器就會(huì)耗盡資源(如套接字、緩存空間、TCP連接)從而中止運(yùn)行。3.3.4設(shè)計(jì)原則及一般要求參照各模塊的功能與具體的特點(diǎn),我們?cè)O(shè)計(jì)的整個(gè)即時(shí)通訊系統(tǒng)應(yīng)達(dá)到以下目的:(1)穩(wěn)定性。整個(gè)系統(tǒng)應(yīng)能穩(wěn)定運(yùn)行,硬件配置的局部改變不會(huì)影響整體的正常運(yùn)行,其它系統(tǒng)的差錯(cuò)不會(huì)導(dǎo)致即時(shí)通訊系統(tǒng)無(wú)法正確運(yùn)作。(2)準(zhǔn)確性。系用戶(hù)按操作要求操作產(chǎn)生的數(shù)據(jù)與數(shù)據(jù)庫(kù)產(chǎn)生的變化應(yīng)嚴(yán)格保持一致,杜絕錯(cuò)誤、異常等情況的出現(xiàn)。(3)安全性。所有數(shù)據(jù)定時(shí)備份,錯(cuò)誤的出現(xiàn)由系統(tǒng)自動(dòng)記錄備份文件,以備查驗(yàn),避免用戶(hù)誤操作而造成不必要的損失。(4)易使用性。即時(shí)通訊系統(tǒng)的界面與操作人員的交互性好,采用了當(dāng)前主流的Client/Server(客戶(hù)端/服務(wù)器)結(jié)構(gòu)。3.4系統(tǒng)設(shè)計(jì)3.4.1模塊設(shè)計(jì)功能模塊設(shè)計(jì)如表3-1所示:表3-1功能模塊設(shè)計(jì)表功能模塊功能用戶(hù)注冊(cè)模塊用戶(hù)注冊(cè)用戶(hù)登錄模塊用戶(hù)登錄添加好友模塊添加好友修改密碼模塊修改密碼文字聊天模塊文字聊天發(fā)送文件模塊發(fā)送文件3.4.2文件傳輸與聊天系統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的實(shí)現(xiàn)MicrosoftSQLServer2000是一個(gè)高性能的客戶(hù)端/服務(wù)器結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。SQLServer2000是為支持高容量的事務(wù)處理(比如在線(xiàn)訂購(gòu)錄入、存貨目錄、記賬或制造)以及數(shù)據(jù)倉(cāng)庫(kù)和決策支持系統(tǒng)而設(shè)計(jì)的。它運(yùn)行在MicrosoftWindowsNT4或MicrosoftWindows2000Server上—基于使用Intel處理器的網(wǎng)絡(luò)。也能夠?yàn)槠渌腗icrosoft操作系統(tǒng)提供很多客戶(hù)端工具和網(wǎng)絡(luò)接口。由于SQLServer的開(kāi)放結(jié)構(gòu),其他系統(tǒng)也能和它交互操作。使用它可以完成事務(wù)處理、存儲(chǔ)和分析數(shù)據(jù)以及創(chuàng)建新的應(yīng)用程序。其中SQLServer的RDBMS負(fù)責(zé)維護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)之間的關(guān)系,確保正確的存儲(chǔ)數(shù)據(jù)和不違反定義數(shù)據(jù)之間的規(guī)則,而且在系統(tǒng)發(fā)生錯(cuò)誤時(shí)將所有數(shù)據(jù)恢復(fù)到某個(gè)已知的、具備一致性的檢查點(diǎn)上。SQLServer2000就是關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)工具,數(shù)據(jù)庫(kù)能匯集各種信息以供查詢(xún)、存儲(chǔ)和檢索。SQLServer2000的優(yōu)點(diǎn)在于它能使用數(shù)據(jù)表示圖或自定義窗體收集信息。數(shù)據(jù)庫(kù)在一個(gè)信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞將直接對(duì)應(yīng)用系統(tǒng)的效率以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)可以提高數(shù)據(jù)存儲(chǔ)的效率,報(bào)填數(shù)據(jù)的完整和一致。另外,合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)將非常有利于程序的實(shí)現(xiàn)。設(shè)計(jì)數(shù)據(jù)可系統(tǒng)是應(yīng)該首先充分了解用戶(hù)各個(gè)方面的要求,包括現(xiàn)有的以及將來(lái)可能增加的要求。數(shù)據(jù)庫(kù)設(shè)計(jì)文件傳輸與聊天系統(tǒng)是一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),系統(tǒng)的所有信息都是保存在數(shù)據(jù)庫(kù)中。在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)中,數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)是一個(gè)非常重要的問(wèn)題。我們這里所說(shuō)的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)是指數(shù)據(jù)庫(kù)中各個(gè)表結(jié)構(gòu)的設(shè)計(jì),包括信息存在哪個(gè)表中、各個(gè)表的結(jié)構(gòu)如何以及各個(gè)表之間的關(guān)系。數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞,將直接對(duì)應(yīng)用系統(tǒng)的效率以及實(shí)現(xiàn)的效果產(chǎn)生影響,好的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)會(huì)減少數(shù)據(jù)庫(kù)的存儲(chǔ)量,數(shù)據(jù)的完整性和一致性比較高,系統(tǒng)具有較快的響應(yīng)速度,簡(jiǎn)化基于此數(shù)據(jù)庫(kù)的應(yīng)用程序的實(shí)現(xiàn)等。由于數(shù)據(jù)庫(kù)設(shè)計(jì)的重要性,人們提出了許多數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的技術(shù)。但這些方法和設(shè)計(jì)者的工作經(jīng)驗(yàn)有很大的關(guān)系。因此要從根本上解決所有數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的問(wèn)題,就需要多實(shí)踐,在實(shí)踐中積累經(jīng)驗(yàn)和教訓(xùn),最終成為數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的專(zhuān)家[9]。數(shù)據(jù)庫(kù)需求分析數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的第一個(gè)階段,也是非常重要的一個(gè)階段時(shí)數(shù)據(jù)庫(kù)需求分心。在這個(gè)階段主要時(shí)收集基本數(shù)據(jù)以及數(shù)據(jù)處理的流程,為以后進(jìn)一步設(shè)計(jì)打下基礎(chǔ)。①內(nèi)容調(diào)查應(yīng)用系統(tǒng)用戶(hù)所需要操作的數(shù)據(jù),決定在數(shù)據(jù)庫(kù)中存儲(chǔ)什么數(shù)據(jù)。②處理調(diào)查應(yīng)用系統(tǒng)用戶(hù)要求對(duì)數(shù)據(jù)進(jìn)行什么樣的處理,理清數(shù)據(jù)庫(kù)中各種數(shù)據(jù)之間的關(guān)系。③數(shù)據(jù)項(xiàng)包括名稱(chēng)、含義、類(lèi)型、取值范圍、長(zhǎng)度以及和其他數(shù)據(jù)項(xiàng)之間的邏輯關(guān)系。④數(shù)據(jù)結(jié)構(gòu)若干個(gè)數(shù)據(jù)項(xiàng)有意義的集合,包括名稱(chēng)、含義以及組成數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)項(xiàng)。數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)概念結(jié)構(gòu)是獨(dú)立于實(shí)際數(shù)據(jù)模型的信息結(jié)構(gòu),必須將其轉(zhuǎn)化為邏輯結(jié)構(gòu)后才能進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用的設(shè)計(jì).也就是要將概念上的結(jié)構(gòu)轉(zhuǎn)化為數(shù)據(jù)庫(kù)系統(tǒng)所支持的實(shí)際數(shù)據(jù)模型。第一種轉(zhuǎn)化是將實(shí)體轉(zhuǎn)化為關(guān)系表。這種轉(zhuǎn)化比較簡(jiǎn)單,只需要將實(shí)體的屬性定義為表的屬性即可。第二種轉(zhuǎn)化是聯(lián)系的轉(zhuǎn)化。即將各個(gè)實(shí)體之間的聯(lián)系轉(zhuǎn)化為表格之間的關(guān)系,如外部鍵的定義。在上面工作的基礎(chǔ)上的基礎(chǔ)上歸納出人員管理數(shù)據(jù)庫(kù)表格的組成、列的屬性、表格之間的聯(lián)系等等。該數(shù)據(jù)庫(kù)系統(tǒng)要求具有以下方面的特點(diǎn):結(jié)構(gòu)合理;所建立的數(shù)據(jù)冗余度小,獨(dú)立性強(qiáng);建檔、修改、查詢(xún)、統(tǒng)計(jì)快準(zhǔn)確;保密性、可靠性好。聊天系統(tǒng)的數(shù)據(jù)庫(kù)總體設(shè)計(jì)結(jié)構(gòu)如圖3-14所示。圖3-14數(shù)據(jù)庫(kù)總體設(shè)計(jì)結(jié)構(gòu)圖數(shù)據(jù)庫(kù)概念設(shè)計(jì)根據(jù)前面的需求分析和邏輯結(jié)構(gòu)設(shè)計(jì)規(guī)劃出本系統(tǒng)所使用的實(shí)體對(duì)象為:用戶(hù)實(shí)體。下面將給出實(shí)體的E-R圖。①用戶(hù)實(shí)體用戶(hù)實(shí)體包括用戶(hù)名、密碼、真實(shí)姓名、性別、個(gè)人簽名、是否在線(xiàn)、登錄IP、綁定端口等。其E-R圖如下3-15所示。圖3-15用戶(hù)實(shí)體E-R圖②好友實(shí)體好友實(shí)體包括好友名稱(chēng)等。其E-R圖如下3-16所示。圖3-16好友實(shí)體E-R圖數(shù)據(jù)庫(kù)表設(shè)計(jì)根據(jù)上面所做的總結(jié),再參考系統(tǒng)的實(shí)際需要,表結(jié)構(gòu)如下圖所示:用戶(hù)表p_user,如表3-2所示:表3-2用戶(hù)表字段名數(shù)據(jù)類(lèi)型字段說(shuō)明備注P_usernamevarchar(20)用戶(hù)名主鍵P_passwordvarchar(20)密碼不允許為空4文件傳輸與聊天系統(tǒng)的實(shí)現(xiàn)4.1注冊(cè)模塊第一次使用系統(tǒng)的用戶(hù)通過(guò)填寫(xiě)個(gè)人信息來(lái)注冊(cè),服務(wù)器記錄用戶(hù)注冊(cè)的ID號(hào)和密碼,用來(lái)登錄。已經(jīng)注冊(cè)的用戶(hù)在登錄界面填寫(xiě)完相關(guān)登錄信息,通過(guò)服務(wù)器的驗(yàn)證后就可以進(jìn)入客戶(hù)端界面。注冊(cè)模塊如圖4-1所示。圖4-1用戶(hù)注冊(cè)圖主要代碼實(shí)現(xiàn)如下:publicvoidactionPerformed(ActionEventarg0){ //TODOAuto-generatedmethodstublf1.isreg=true; Propertiesp=lf1.p;try{Socketsock=new Socket(p.getProperty("server"),Integer.parseInt(p.getProperty("port")));lf1.socket=sock;Stringusername=usertext.getText();Stringpwd=jtf2.getText();OutputStreamos=sock.getOutputStream();PrintStreamps=newPrintStream(os);//發(fā)送驗(yàn)證信息ps.println("reg:"+username+":"+pwd);BufferedReaderbr=newBufferedReader(newInputStreamReader(sock.getInputStream()));//接受驗(yàn)證結(jié)果Stringresult=br.readLine();if(result.equals("ok")){//注冊(cè)成功,在服務(wù)器寫(xiě)入用戶(hù)名和密碼,在本地生成相應(yīng)的文件jLabel.setText("注冊(cè)成功");Filefile=newFile(".\\"+username);file.mkdir();file=newFile(".\\"+username+"\\my.txt");file.createNewFile();Filef2=newFile(".\\"+username+"\\friends.txt");f2.createNewFile();Stringindex=newInteger(jcb1.getSelectedIndex()).toString();Propertiesp2=newProperties();p2.setProperty("myQname",jtf3.getText());p2.setProperty("mytitle",titletext.getText());p2.setProperty("myimg",index);FileOutputStreamoStream=newFileOutputStream(file.getAbsolutePath());p2.store(oStream,null);}else{ jLabel.setText("注冊(cè)失敗"); }}catch(NumberFormatExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(UnknownHostExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace(); } }該段代碼為用戶(hù)注冊(cè)信息,新建套接字,用輸出流的方式發(fā)送驗(yàn)證信息,BufferedReader讀取信息接受驗(yàn)證結(jié)果,如果注冊(cè)成功,則在服務(wù)器寫(xiě)入用戶(hù)名和密碼,在本地生成相應(yīng)的文件,如果注冊(cè)失敗則提示錯(cuò)誤。確認(rèn)信息填寫(xiě)無(wú)誤后,點(diǎn)擊注冊(cè)按鈕就可注冊(cè)成功,如圖4-2所示:圖4-2用戶(hù)注冊(cè)成功圖4.2登錄模塊本部分主要用于用戶(hù)的登錄,只有在注冊(cè)后才可以進(jìn)入系統(tǒng),用戶(hù)登錄時(shí)將按照用戶(hù)名和密碼進(jìn)行驗(yàn)證,當(dāng)輸入錯(cuò)誤時(shí)會(huì)出現(xiàn)相應(yīng)的提示,當(dāng)用戶(hù)名和密碼都正確時(shí)進(jìn)入程序主界面,才能進(jìn)行日常管理工作。該模塊的界面設(shè)計(jì)如圖4-3所示。圖4-3登錄界面圖如果登錄身份驗(yàn)證成功,則進(jìn)入主界面如圖4-4所示:圖4-4主界面圖如果用戶(hù)名或密碼錯(cuò)誤則會(huì)提示,需要重新輸入。主要代碼實(shí)現(xiàn)如下:try{//創(chuàng)建Socket來(lái)發(fā)送驗(yàn)證信息if(!isreg)socket=newSocket(HelpTool.server_ip,HelpTool.port);OutputStreamos=socket.getOutputStream();PrintStreamps=newPrintStream(os);ps.println("new:"+jtf1.getText()+":"+jtf2.getText());//等待服務(wù)器發(fā)送驗(yàn)證結(jié)果BufferedReaderbr=newBufferedReader(new InputStreamReader(socket.getInputStream()));Stringresult=br.readLine(); if(result.equals("right")) { jf1.setVisible(false); MainFramemf=newMainFrame(socket,jtf1.getText()); } else{ JOptionPane.showMessageDialog(null,"用戶(hù)名密碼錯(cuò)誤"); } }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } 該段代碼為用戶(hù)登錄,首先創(chuàng)建Socket來(lái)發(fā)送驗(yàn)證信息,通過(guò)BufferedReader來(lái)讀取文件獲得驗(yàn)證結(jié)果,如果用戶(hù)名密碼正確則登錄成功,如果用戶(hù)名密碼錯(cuò)誤則無(wú)法登錄。4.3添加好友模塊用戶(hù)在登錄成功后會(huì)進(jìn)入客戶(hù)端界面。如果想和朋友進(jìn)行聊天,就在輸入框里輸入朋友的ID號(hào),然后用鼠標(biāo)單擊添加好友,好友收到對(duì)方請(qǐng)求后,好友同意,此時(shí)就可以與好友進(jìn)行對(duì)話(huà)如圖4-5所示。圖4-5添加好友界面圖主要實(shí)現(xiàn)代碼如下:if(ss[0].equals("addfriend")) { System.out.println(str); Stringinfo=ss[1]+"想加你為好友,你是否接受?"; intresult=javax.swing.JOptionPane.showConfirmDialog(null,info,"添加好友", javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE); if(result==JOptionPane.YES_OPTION) { OutputStreamos=s.getOutputStream(); PrintStreamps=newPrintStream(os);ps.println("sendfriend:"+ss[1]+":"+me.getName()+":"+me.getQname()+":"+ me.getTitle()+":"+me.getImg()); Propertiesp=newProperties();Personperson=newPerson(ss[1],ss[2],ss[3],Integer.parseInt(ss[4]));HelpTool.ReadServerConfig(p,".\\"+me.getName()+"\\friends.txt");p.setProperty(ss[1],ss[2]+","+ss[3]+","+ss[4]);FileWriterfos=newFileWriter(".\\"+me.getName()+"\\friends.txt");p.store(fos,null); friends.put(ss[1],person); listModel.addElement(person);changeStatus(ss[1],1); } //確認(rèn)添加好友,并發(fā)送自己的信息elseif(ss[0].equals("sendfriend")){System.out.println(str);Propertiesp=newProperties();Personps=newPerson(ss[1],ss[2],ss[3],Integer.parseInt(ss[4]));HelpTool.ReadServerConfig(p,".\\"+me.getName()+"\\friends.txt");p.setProperty(ss[1],ss[2]+","+ss[3]+","+ss[4]);FileWriterfos=newFileWriter(".\\"+me.getName()+"\\friends.txt");p.store(fos,null);listModel.addElement(ps);friends.put(ss[1],ps);changeStatus(ss[1],1);}該段代碼為添加好友,進(jìn)入到客戶(hù)端后,在下方有個(gè)添加好友按鈕,在好友ID框中輸入好友ID號(hào),確定要添加此好友,則單擊添加好友按鈕,就觸發(fā)了添加好友事件處理函數(shù),先用判斷語(yǔ)句對(duì)在線(xiàn)狀態(tài)進(jìn)行判斷,如果好友不在線(xiàn),彈出提示信息表明稍候重試,如果好友在線(xiàn),則通過(guò)調(diào)用方法將控制字符發(fā)送給所要添加的好友,這時(shí)對(duì)方的客戶(hù)端就會(huì)彈出好友添加請(qǐng)求對(duì)話(huà)框。對(duì)方選擇接受請(qǐng)求或者拒絕請(qǐng)求,當(dāng)對(duì)方選擇同意添加時(shí),點(diǎn)擊接收按鈕,觸發(fā)同意添加好友事件處理函數(shù),并且調(diào)用方法發(fā)送控制字符給請(qǐng)求方用戶(hù),表示以通過(guò)用戶(hù)驗(yàn)證,并且這時(shí)與服務(wù)器建立連接,向服務(wù)器提交好友添加請(qǐng)求,以完成整個(gè)好友的添加過(guò)程;如果單擊拒絕按鈕就調(diào)用拒絕添加好友事件處理函數(shù),拒絕了用戶(hù)的好友添加請(qǐng)求,并關(guān)閉好友請(qǐng)求窗體。這樣就實(shí)現(xiàn)了好友添加功能。4.4修改密碼模塊本部分主要功能是在線(xiàn)用戶(hù)修改密碼,如圖4-6所示圖4-6修改密碼界面圖主要實(shí)現(xiàn)代碼為:publicvoidactionPerformed(ActionEventarg0){ //TODOAuto-generatedmethodstub }if(!newpwd.getText().equals(newpwd1.getText())||jl1.getText().equals(""))JOptionPane.showMessageDialog(null,"pleaseinputthesamepassword!","error message",JOptionPane.INFORMATION_MESSAGE); else{try{ OutputStreamos=client.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("modify:"+name+":"+newpwd.getText()); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); }jf.setVisible(false);}該段代碼為修改密碼,先判斷新密碼與舊密碼是否相同,如果相同則提示輸入相同的密碼,如果不同則用新密碼代替之前的密碼。4.5文字聊天模塊本部分主要功能是在線(xiàn)用戶(hù)之間的文字聊天,如圖4-7所示。圖4-7文字聊天界面圖主要實(shí)現(xiàn)代碼為:sendbtn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){Stringsendstr=ChatStr.getText();try{ OutputStreamos=client.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("talk:"+op.getName()+":"+sendstr); Stringrecord=ChatRecord.getText(); ChatRecord.setText(record+"我說(shuō):"+sendstr+"\n"); ChatStr.setText(""); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } } };文字聊天模塊供用戶(hù)與在線(xiàn)的好友進(jìn)行聊天,用戶(hù)首先查看好友是否在線(xiàn),如果在線(xiàn)即可進(jìn)行即時(shí)通訊。文字聊天是聊天工具最早的信息傳遞方式,用戶(hù)通過(guò)打字,將信息傳遞給好友。至今為止,文字聊天在網(wǎng)絡(luò)聊天中是應(yīng)用最為廣泛的聊天方式。其實(shí)現(xiàn)原理是:通信雙方通過(guò)Socket套結(jié)字進(jìn)行文字信息的傳輸。用戶(hù)雙方通過(guò)Socket套結(jié)字建立連接,并將文字信息以數(shù)據(jù)流的形式進(jìn)行發(fā)送。4.6發(fā)送文件模塊文件傳輸功能現(xiàn)在通過(guò)網(wǎng)絡(luò)傳輸文件已經(jīng)非常普遍,各種傳輸工具也很多,最具有代表性的就是QQ提供的文件傳輸功能了,它能讓好友之間方便的把自己的文件傳給對(duì)方。仔細(xì)查看QQ的傳輸文件功能,發(fā)現(xiàn)它沒(méi)有文件類(lèi)型的限制,無(wú)論是圖片、音樂(lè)還是電影、文本都能傳。同時(shí),對(duì)文件大小的限制也很寬,只要在4GB以?xún)?nèi)就可以———這足夠用戶(hù)的需求了。編程思路文件傳輸是把A機(jī)的一個(gè)文件通過(guò)網(wǎng)絡(luò)傳輸?shù)紹機(jī),并保存到B機(jī)。實(shí)現(xiàn)該功能的思路是:從A機(jī)讀取文件,把讀到的數(shù)據(jù)封裝到一個(gè)數(shù)據(jù)包內(nèi),然后通過(guò)Socket把數(shù)據(jù)報(bào)包發(fā)送出去。在B機(jī),使用Socket接收A機(jī)發(fā)來(lái)的數(shù)據(jù)包,然后把其中的數(shù)據(jù)寫(xiě)入本地硬盤(pán)即可。程序運(yùn)行后效果如在A機(jī)運(yùn)行發(fā)送文件程序,單擊選擇文件,彈出打開(kāi)對(duì)話(huà)框,選擇一個(gè)文件,確定后程序就會(huì)從硬盤(pán)讀取該文件并發(fā)送程序運(yùn)行效果出去。在B機(jī)運(yùn)行接收文件程序,單擊保存文件,彈出保存對(duì)話(huà)框,把傳輸過(guò)來(lái)的文件保存到硬盤(pán).本部分主要功能是與好友相互發(fā)送文件,如圖4-8所示。圖4-8發(fā)送文件界面圖主要實(shí)現(xiàn)代碼為:if(ss[0].equals("sendfile")) {Stringinfo=ss[1]+"想給你傳送文件:"+ss[2]+",你是否接受?";intresult=javax.swing.JOptionPane.showConfirmDialog(null,info,"文件傳輸", javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);if(result==JOptionPane.YES_OPTION) { JFileChooserjfc=newJFileChooser("choosefile");jfc.setDialogTitle("Chose..."); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); intresult1=jfc.showOpenDialog(null); if(result1==JFileChooser.APPROVE_OPTION) { FileselectedFile=jfc.getSelectedFile(); Stringpath=selectedFile.getPath(); OutputStreamos=s.getOutputStream(); PrintStreamps=newPrintStream(os); ps.println("getfile:"+ss[2]); ServerSocketss2=newServerSocket(HelpTool.localport); FileRecvListenThreadlt2=newFileRecvListenThread(ss2,path+"http://"); lt2.start(); } }//第一個(gè)參數(shù)為命令 Thread.sleep(100);Datebefor=newDate();bytecmd[]=newbyte[128];intb=0;while(b<cmd.length){b+=in.read(cmd,b,cmd.length-b);//把參數(shù)cmd所指的文件傳送cmd.length-b個(gè)字節(jié)到b指針?biāo)傅膬?nèi)存中}上面一段代碼為發(fā)送文件,用戶(hù)點(diǎn)擊sendfile,則通信對(duì)方將顯示用戶(hù)給你發(fā)送文件,是否接受的判斷框,如果點(diǎn)擊否,那么不接收文件,如果點(diǎn)擊是,那么打開(kāi)對(duì)話(huà)框choose,來(lái)選擇要保存文件的路徑。下面一段代碼為文件接收線(xiàn)程,通訊雙方建立socket套接字,啟動(dòng)線(xiàn)程來(lái)進(jìn)行文件的接收。publicFileReceiverThread(Socketsocket,Stringpath){try{this.socket=socket;this.path=path;this.in=this.socket.getInputStream();this.out=newPrintWriter(newBufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())),true);}catch(IOExceptione){e.printStackTrace();}this.start();//啟動(dòng)線(xiàn)程}publicvoidrun(){Stringinfo="";System.out.println("readytosendfile");try{while(true){//第一個(gè)參數(shù)為命令 Thread.sleep(100);Datebefor=newDate();bytecmd[]=newbyte[128];intb=0;while(b<cmd.length){b+=in.read(cmd,b,cmd.length-b);//把參數(shù)cmd所指的文件傳送cmd.length-b個(gè)字節(jié)到b指針?biāo)傅膬?nèi)存中}intends=0;for(inti=0;i<cmd.length;i++){if(cmd[i]==-0){ends=i;break;}}Stringcmds=newString(cmd,0,ends);Dateafter=newDate();longdiff=after.getTime()-befor.getTime();diff/=1000;info="傳輸完成!文件已經(jīng)保存到:"+filenames+",文件大小:"+filesizes+" 字節(jié),"+"共用時(shí)間:"+diff+"秒";intresult=javax.swing.JOptionPane.showConfirmDialog(null,info,"文件傳 輸",javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);fos.close();break;}}}}該段代碼為文件傳輸,首先將外儲(chǔ)中的文件以文件流的形式提取到緩存中,然后通信雙方通過(guò)Socket套結(jié)字建立連接,并將緩存中存放的文件流進(jìn)行發(fā)送。用戶(hù)1向用戶(hù)2發(fā)送文件時(shí),先發(fā)送請(qǐng)求信息給用戶(hù)2,用戶(hù)2接收到用戶(hù)1的請(qǐng)求信息后,對(duì)用戶(hù)1發(fā)送回應(yīng)信息,如果用戶(hù)2同意接收文件請(qǐng)求,則開(kāi)始文件傳輸,如果用戶(hù)2不同意接收文件請(qǐng)求,則停止傳輸。經(jīng)過(guò)上述步驟,就完成了一個(gè)簡(jiǎn)易的文件傳輸程序。不僅支持各類(lèi)型文件的傳輸,還支持大文件的傳輸。程序界面并不美觀,代碼也有需要完善的地方,不過(guò)重點(diǎn)還是程序的功能本身,希望大家通過(guò)這個(gè)小程序能夠清楚地理解文件傳輸?shù)臋C(jī)制。

5系統(tǒng)測(cè)試為了保證軟件的質(zhì)量和可靠性,應(yīng)力求在分析、設(shè)計(jì)等各個(gè)開(kāi)發(fā)階段結(jié)束前,對(duì)軟件進(jìn)行嚴(yán)格技術(shù)評(píng)審。但由于人們能力的局限性,審查不能發(fā)現(xiàn)所有的錯(cuò)誤。而且在編碼階段還會(huì)引進(jìn)大量的錯(cuò)誤。這些錯(cuò)誤和缺陷如果遺留到軟件交付投入運(yùn)行之時(shí),終將會(huì)暴露出來(lái)。但到那時(shí),不僅改正這些錯(cuò)誤的代價(jià)更高,而且往往造成很惡劣的后果。軟件測(cè)試就是在軟件投入運(yùn)行前,對(duì)軟件需求分析、設(shè)計(jì)規(guī)格說(shuō)明和編碼的最終復(fù)審,是軟件質(zhì)量保證的關(guān)鍵步驟。如果給軟件測(cè)試下定義,可以這樣講:軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程。或者說(shuō),軟件測(cè)試是根據(jù)軟件開(kāi)發(fā)各階段的規(guī)格說(shuō)明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)的一批測(cè)試用例(即輸入一些數(shù)據(jù)而得到其預(yù)期的結(jié)果),并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過(guò)程。5.1測(cè)試方案測(cè)試方案包括預(yù)定要測(cè)試的功能、應(yīng)該輸入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果,其目標(biāo)是設(shè)計(jì)一組可能發(fā)現(xiàn)錯(cuò)誤的數(shù)據(jù)。測(cè)試任何產(chǎn)品都有黑盒測(cè)試和白盒測(cè)試兩種方法。黑盒測(cè)試又稱(chēng)為功能測(cè)試,是在程序接口進(jìn)行的測(cè)試,它只檢查

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論