




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