




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、重慶大學(xué)網(wǎng)絡(luò)教育學(xué)院 畢業(yè)設(shè)計(jì)(論文)題目 即時(shí)聊天軟件的開發(fā)與實(shí)現(xiàn) 學(xué)生所在校外學(xué)習(xí)中心 山西晉中煤炭系統(tǒng) 批次 層次 專業(yè) 131 專升本 計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 號 W13119700 學(xué) 生 王 芳 指 導(dǎo) 教 師 胥 斌 起 止 日 期 2014年4月-2014年10月 目 錄摘 要II1 前言11.1 課題選題背景11.2即時(shí)通信的概念和特點(diǎn)11.3即時(shí)聊天系統(tǒng)的發(fā)展22 涉及的相關(guān)技術(shù)及協(xié)議22.1 Java語言22.2 C/S模式介紹32.3 Hibernate框架簡介43 系統(tǒng)需求分析43.1即時(shí)聊天消息的一般需求43.2 即時(shí)消息的協(xié)議需求53.3 即時(shí)消息的安全需求53.4
2、即時(shí)信息加密和鑒別53.5 即時(shí)通訊系統(tǒng)需求54 系統(tǒng)設(shè)計(jì)54.1即時(shí)聊天系統(tǒng)的實(shí)施原理64.2軟件設(shè)計(jì)流程74.3功能模塊劃分84.4 數(shù)據(jù)庫概要設(shè)計(jì)85 詳細(xì)設(shè)計(jì)95.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)95.1.2 主服務(wù)器類的設(shè)計(jì)95.1.2 登錄驗(yàn)證模塊115.1.3 注冊處理模塊115.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)125.2.1 用戶注冊模塊125.2.2 用戶登錄135.2.3 在線用戶顯示設(shè)計(jì)145.2.4 聊天信息發(fā)送與接收155.3 數(shù)據(jù)庫設(shè)計(jì)166 結(jié)論17參考文獻(xiàn)19附錄1摘 要計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時(shí)通訊方式日益受到人們的青睞。即時(shí)聊天工具在實(shí)現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員
3、可以遠(yuǎn)距離進(jìn)行直觀、真實(shí)的視音交流的同時(shí),利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進(jìn)行處理。本課題研究的是支持內(nèi)部網(wǎng)絡(luò)交流的系統(tǒng)網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)。該系統(tǒng)使用Java語言進(jìn)行編程。系統(tǒng)采用C/S結(jié)構(gòu)模式,支持局域網(wǎng)和Internet。該系統(tǒng)采用軟件工程的瀑布模型進(jìn)行開發(fā),分別討論了系統(tǒng)的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)和編碼、以及整個(gè)系統(tǒng)的運(yùn)行和測試。關(guān)鍵詞:即時(shí)聊天 系統(tǒng) Java C/S II1 前言交流對于人類社會(huì)及其每個(gè)成員都至關(guān)重要。直接交流的方式包括語言、文字等,而遠(yuǎn)程交流還需借助于一些先進(jìn)的工具如電話、網(wǎng)絡(luò)等。本課題研究的是支持內(nèi)部網(wǎng)絡(luò)交流的系統(tǒng)網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)。該課題在實(shí)
4、施的過程中需要使用Java語言。1.1 課題選題背景計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)高速發(fā)展的今天,即時(shí)通訊方式日益受到人們的青睞。即時(shí)通訊工具在實(shí)現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠(yuǎn)距離進(jìn)行直觀、真實(shí)的視音交流的同時(shí),利用多媒體的技術(shù),它還可以幫助使用者對工作中各種信息進(jìn)行處理。大家都知道,網(wǎng)絡(luò)上常用的即時(shí)通訊工具之一有ICQ。其實(shí),ICQ是英文“I seek you”的簡稱,中文意思是“我找你”。ICQ最大的功能便是即時(shí)信息交流,只要記得對方的號碼,上網(wǎng)時(shí)可以呼他,無論他在哪里,只要他上網(wǎng)打開ICQ,人們就可以隨時(shí)交流。目前即時(shí)聊天系統(tǒng)種類眾多,功能也較為齊全。該課題現(xiàn)在所研究的即時(shí)通訊系統(tǒng),其目標(biāo)
5、是定位于企業(yè)內(nèi)部網(wǎng)絡(luò),解決企業(yè)或單位的溝通及協(xié)同的問題,提高工作效率。企業(yè)內(nèi)部員工可以利用該通訊系統(tǒng)隨時(shí)隨地發(fā)送文字消息、進(jìn)行多人群聊、消息群發(fā)、傳送文件、音頻視頻對話等。系統(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í)間、金錢聚集到一個(gè)地方,通過網(wǎng)絡(luò),就能實(shí)現(xiàn)面對面的溝通,提高了效率。MSN、QQ等公共消息系統(tǒng),由于聊天對象及內(nèi)容的不可控,若在企業(yè)內(nèi)部使用,可能會(huì)降低工作效率。而該即時(shí)通訊系統(tǒng)將自己的服務(wù)器端安裝在企業(yè)內(nèi),并且人員的創(chuàng)建是由系統(tǒng)管理員來完成,因此很好
6、的解決了這個(gè)問題。即時(shí)通訊帶給了更大的互動(dòng)性,人們在交流彼此的看法、意見時(shí),發(fā)現(xiàn)采用你來我往的方式達(dá)到的效果最為明顯。這就體現(xiàn)了互動(dòng)性。通過使用及時(shí)通訊系統(tǒng),大家不需要離開電腦,不需要借助其它額外的工具,就可以在線實(shí)時(shí)地交流工作。1.2即時(shí)通信的概念和特點(diǎn)即時(shí)通訊(IM)是一個(gè)允許兩人或多人使用網(wǎng)絡(luò)即時(shí)地傳遞文字信息、檔案、語音與視頻交流的終端服務(wù)。即時(shí)通訊不同于e-mail在于它的交談是即時(shí)的?!?】大部分的即時(shí)通訊服務(wù)提供了presence awareness的特性顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在在線與能否與聯(lián)絡(luò)人交談。在早期的即時(shí)通訊程序中,使用者輸入的每一個(gè)字符都會(huì)即時(shí)顯示在雙方的銀幕,且
7、每一個(gè)字符的刪除與修改都會(huì)即時(shí)的反應(yīng)在銀幕上。這種模式比起使用e-mail更像是電話交談,充分體現(xiàn)了其實(shí)時(shí)特性。在現(xiàn)在的即時(shí)通訊程序中,為了畫面的完整美觀和交流方便,交談中的另一方通常只會(huì)在本地端按下送出鍵(Enter或是Ctrl+Enter)后才會(huì)看到信息。1.3即時(shí)聊天系統(tǒng)的發(fā)展二十世紀(jì)七十年代早期,一種較早的即時(shí)通訊形式是柏拉圖系統(tǒng)(PLATO system)。八十年代,UNIX/Linux的交談即時(shí)信息被廣泛的使用于工程師與學(xué)術(shù)界,九十年代即時(shí)通訊更可跨越了操作系統(tǒng)平臺交流,1996年11月,首個(gè)廣泛被非UNIX/Linux使用者用于因特網(wǎng)的即時(shí)通訊軟件ICQ出現(xiàn)。通常認(rèn)為ICQ是現(xiàn)在
8、流行使用的即時(shí)通訊軟件的開山之作。ICQ源于以色列特拉維夫的Mirabils公司。該公司成立于1996年月,也就是在這個(gè)時(shí)候,四個(gè)月后的1996年11月,互聯(lián)網(wǎng)上最出名,下載使用人數(shù)最多的免費(fèi)軟件ICQ誕生了,她是由幾個(gè)以色列的年輕人制作的,在無人投資的情況下,他們向全球互聯(lián)網(wǎng)用戶提供免費(fèi)下載使用,到了1998年,Mirabilis公司的ICQ用戶已經(jīng)發(fā)展到1200萬人,并以每月100萬用戶的速度增加。這時(shí)候,ICQ公司由于其潛在的巨大商業(yè)廣告價(jià)值,已經(jīng)成為許多大公司爭相購買的對象,1998年ICQ公司將自己開發(fā)的軟件連同用戶一起“賣”給了美國在線(AOL),售價(jià)2.87億美元。據(jù)美國在線19
9、99年底稱,ICQ使用者已達(dá)5000萬,其中超過三分之二的使用者居住在美國本土以外的世界各地。ICQ造就的實(shí)時(shí)通信成了互聯(lián)網(wǎng)世界中發(fā)展最快的一個(gè)領(lǐng)域。2 涉及的相關(guān)技術(shù)及協(xié)議為了保證課題能正常實(shí)施,先來分析一下課題所需要的相關(guān)技術(shù)和協(xié)議。2.1 Java語言經(jīng)過認(rèn)真的討論分析,綜合各種計(jì)算機(jī)高級語言的特征和適應(yīng)范圍,最終決定選擇純面向?qū)ο蟮腏ava語言來完成畢業(yè)論文的設(shè)計(jì),下面就技術(shù)可行性方面,對Java語言作一簡要介紹。Sun公司的口號就是“網(wǎng)絡(luò)就是計(jì)算機(jī)”,Java能使所有東西從桌面計(jì)算平穩(wěn)的轉(zhuǎn)變?yōu)榛诰W(wǎng)絡(luò)的計(jì)算,它是專門為此而建立的,并顯然是為了完成這個(gè)任務(wù)而來的。使用Java語言,可以
10、相對輕松的一天編寫一個(gè)有條理的網(wǎng)絡(luò)程序。今天,Java的網(wǎng)絡(luò)功能正在飛躍發(fā)展,不斷有新的特性增加到這個(gè)有價(jià)值的基礎(chǔ)上,JavaSoft實(shí)驗(yàn)室正在不斷努力使Java更加完善。就Java語言的主要特點(diǎn),本人歸納如下:Java程序設(shè)計(jì)的開發(fā)過程與運(yùn)行環(huán)境Java是解釋型的高級編程語言,所以Java程序的開發(fā)通常需要經(jīng)過編寫源程序、編譯生成字節(jié)碼和運(yùn)行三個(gè)過程。這里要提到,Java應(yīng)用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個(gè)部分。Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼字節(jié)碼。這一編譯過程同C/C+的編譯有些不同。當(dāng)C編譯器編譯生成一個(gè)對象的代碼時(shí),該代碼是為在某一特定硬件平臺運(yùn)行而
11、產(chǎn)生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。Java編譯器卻不將對變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個(gè)方法所在的地址。這樣就有效的保證了Java的可移植性和安全性?!?】2.2 C/S模式介紹20世紀(jì)90年代出現(xiàn)并迅速占據(jù)主導(dǎo)地位的一種計(jì)算模式為客戶機(jī)/服務(wù)器模式,簡稱為C/S模式,它實(shí)際上就是把主機(jī)終端模式中原來全部集中在主機(jī)部分的任務(wù)一分為二,保留在主機(jī)上的部分負(fù)責(zé)集中處理和匯總運(yùn)算,成為服務(wù)器;而下放到終端
12、的部分負(fù)責(zé)為用戶提供友好的交互界面,稱為客戶機(jī)?!?】相對于以前的模式,C/S模式最大的改進(jìn)是不再把所有軟件都裝進(jìn)一臺計(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)對用戶的響應(yīng)速度和響應(yīng)能力??蛻魴C(jī)和服務(wù)器之間通過相應(yīng)的網(wǎng)絡(luò)協(xié)議來進(jìn)行通訊??蛻魴C(jī)向服務(wù)器發(fā)出數(shù)據(jù)請求,服務(wù)器將數(shù)據(jù)傳送給客戶機(jī)進(jìn)行計(jì)算,計(jì)算完畢,
13、計(jì)算結(jié)果可返回給服務(wù)器。這種模式的優(yōu)點(diǎn)充分利用了客戶機(jī)的性能,使計(jì)算能力大大提高;另外,由于客戶機(jī)和服務(wù)器之間的通訊是通過網(wǎng)絡(luò)協(xié)議進(jìn)行的,是一種邏輯的聯(lián)系,因此物理上在客戶機(jī)和服務(wù)器兩端是易于擴(kuò)充的。C/S模式是目前占主流的網(wǎng)絡(luò)計(jì)算模式。該模式在操作過程中采取的是主動(dòng)請示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請示提供相應(yīng)服務(wù)(過程如下):(1)打開一個(gè)通信通道同時(shí)通知本地主機(jī),服務(wù)器愿意在某一個(gè)公認(rèn)地址上接收客戶請求。(2)等待某個(gè)客戶請求到達(dá)該端口。(3)接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號。(4)返回第二步,等待另一客戶請求。(5)關(guān)閉該服務(wù)器??蛻舳耍?1)打開一個(gè)通信通道,并連接到
14、服務(wù)器所在主機(jī)的特定端口。(2)向服務(wù)器發(fā)送服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求。(3)請求結(jié)束后關(guān)閉通信通道并終止。分布運(yùn)算和分布管理是客戶機(jī)/服務(wù)器模式的特點(diǎn)。最后選擇了C/S模式。2.3 Hibernate框架簡介Hibernate是一種Java語言下的對象關(guān)系映射解決方案。它是一種自由、開源的軟件。它用來把對象模型表示的對象映射到基于SQL 的關(guān)系模型結(jié)構(gòu)中去,為面向?qū)ο蟮念I(lǐng)域模型到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的映射,提供了一個(gè)使用方便的框架。 主要作用有:Hibernate 不僅管理Java 類到數(shù)據(jù)庫表的映射(包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方
15、法,可以大幅度減少開發(fā)時(shí)人工使用SQL 和JDBC 處理數(shù)據(jù)的時(shí)間。【4】它的設(shè)計(jì)目標(biāo)是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來。無論是從設(shè)計(jì)草案還是從一個(gè)遺留數(shù)據(jù)庫開始,開發(fā)人員都可以采用Hibernate。在應(yīng)用方面,Hibernate對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,它既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。最具革命意義的是,Hibernate可以在應(yīng)用EJB(Enterprise JavaBeans是Jav
16、a應(yīng)用于企業(yè)計(jì)算的框架)的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。3 系統(tǒng)需求分析前面兩章介紹了課題的選題背景和相關(guān)的技術(shù)基礎(chǔ)和協(xié)議。在本章中將討論一下即時(shí)通訊系統(tǒng)的需求分析。3.1即時(shí)聊天消息的一般需求3.1.1一般即時(shí)消息格式需求(1)所有實(shí)體必須至少使用一種消息格式;(2)一般即時(shí)消息格式必須定義發(fā)信者和即時(shí)收件箱的標(biāo)識;(3)一般即時(shí)消息格式必須包含一個(gè)讓接收者可以回消息的地址;(4)一般即時(shí)信息格式必須允許對信息有效負(fù)載的編碼和鑒別(非ASCII內(nèi)容);(5)必須提供擴(kuò)展和注冊即時(shí)消息格式的模式的機(jī)制。3.1.2可靠性需求協(xié)議必須存在機(jī)制,保證即時(shí)消息成功投遞或者投遞失敗的時(shí)
17、候,發(fā)信者獲得足夠的信息。3.1.3性能需求(1)即時(shí)消息的傳輸必須足夠的迅速;(2)即時(shí)消息的內(nèi)容必須足夠豐富;(3)即時(shí)消息的長度盡量足夠的長。3.2 即時(shí)消息的協(xié)議需求協(xié)議是一系列的步驟,它包括雙方或者多方,設(shè)計(jì)它的目的是要完成一項(xiàng)任務(wù)。即時(shí)通訊協(xié)議,參與的雙方或者多方是即時(shí)通訊的實(shí)體。協(xié)議必須是雙方或者多方參與的,一方單獨(dú)完成的就不算協(xié)議。這樣在協(xié)議動(dòng)作的過程中,雙方必須交換信息,包括控制信息、狀態(tài)信息等等。這些信息的格式必須是協(xié)議參與方同意并且遵循的。好的協(xié)議要求清楚、完整,每一步都必須有明確的定義,并且不會(huì)引起誤解;對每種可能的情況必須規(guī)定具體的動(dòng)作。3.3 即時(shí)消息的安全需求A發(fā)
18、送即時(shí)消息M給B,有以下幾種情況和相關(guān)需求:(1)如果無法發(fā)送,A必須接到確認(rèn);(2)如果M被投遞了,B只能接受M一次;(3)協(xié)議必須為B提供方法檢查A發(fā)送了這條信息;(4)協(xié)議必須允許B使用另一條即時(shí)信息,回復(fù)信息;(5)協(xié)議必須為A提供方法保證沒有其他個(gè)體C可以篡改M;3.4 即時(shí)信息加密和鑒別(1)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被監(jiān)聽或者破壞;(2)協(xié)議必須提供方法保證通知和即時(shí)消息的置信度,未被重排序或者回放;(3)協(xié)議必須提供方法保證通知和即時(shí)消息被正確的實(shí)體閱讀;(4)協(xié)議必須允許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時(shí)通訊系統(tǒng)需求3.5.1
19、 注冊需求(1)即時(shí)通訊系統(tǒng)擁有多個(gè)賬戶,允許多個(gè)用戶注冊;(2)一個(gè)用戶可以注冊多個(gè)ID;(3)注冊所使用的帳號類型為字母ID。3.5.2 通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3)用戶可以加密/解密消息等。4 系統(tǒng)設(shè)計(jì)在這里我們將該即時(shí)通訊系統(tǒng)命名為CHAT,現(xiàn)在對該系統(tǒng)進(jìn)行總體設(shè)計(jì)。采用客戶機(jī)/服務(wù)器(C/S)的模式來設(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)用表示層,也就是我們說的客戶端,這是應(yīng)用程序的用戶接口部分。給即時(shí)通訊工具設(shè)計(jì)一個(gè)客戶層具有很多優(yōu)點(diǎn),這是因?yàn)榭蛻魧訐?dān)
20、負(fù)著用戶與應(yīng)用間的對話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直接地進(jìn)行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序就可以了,而不會(huì)影響其他兩層。服務(wù)層又叫做功能層,相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(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.
21、1.1 工作方式和技術(shù)原理典型的IM工作方式如下:登陸CHAT通訊服務(wù)器,獲取一個(gè)自建立的歷史的交流對象列表(同事列表),然后自身標(biāo)志為在線狀態(tài),當(dāng)好友列表中的某人在任何時(shí)候登錄上線并試圖通過你的計(jì)算機(jī)聯(lián)系你時(shí),IM系統(tǒng)會(huì)發(fā)一個(gè)消息提醒你,然后你能與他建立一個(gè)聊天會(huì)話通道進(jìn)行各種消息如鍵入文字、通過語音等的交流,從技術(shù)上來說,聊天系統(tǒng)的基本技術(shù)原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器,服務(wù)器通過讀取用戶數(shù)據(jù)庫來驗(yàn)證用戶身份,如果驗(yàn)證通過,登記用戶A的IP地址、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標(biāo)志,此時(shí)用戶A在IM系統(tǒng)中的狀態(tài)為在線
22、(Online Presence)。第二步,根據(jù)用戶A存儲(chǔ)在IM服務(wù)器上的好友列表(Buddy List),服務(wù)器將用戶A在線的相關(guān)信息發(fā)送給也同時(shí)在線的IM好友的PC機(jī),這些信息包括在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務(wù)器把用戶A存儲(chǔ)在服務(wù)器上的好友列表及相關(guān)信息回送到他的客戶端機(jī),這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)。4.1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務(wù)
23、器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機(jī)發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復(fù)到用戶A的PC機(jī),這樣雙方的即時(shí)文字消息就不再IM服務(wù)器中轉(zhuǎn),而是直接通過網(wǎng)絡(luò)進(jìn)行點(diǎn)對點(diǎn)的通訊,即對等通訊方式(Peer To Peer)?!?】(2)在線代理通訊用戶A與用戶B的點(diǎn)對點(diǎn)通訊由于防火墻、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢,IM服務(wù)器將會(huì)主動(dòng)提供消息中轉(zhuǎn)服務(wù),即用戶A和用戶B的即時(shí)消息全部先發(fā)送到IM服務(wù)器,再由服務(wù)器轉(zhuǎn)發(fā)給對方。4.2軟件設(shè)計(jì)流程因?yàn)樵撓到y(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進(jìn)行設(shè)計(jì),分為幾大步驟:先進(jìn)
24、行需求分析,再是系統(tǒng)設(shè)計(jì),然后是詳細(xì)設(shè)計(jì)與編碼,其次是軟件的測試,最后是軟件的運(yùn)行和維護(hù)?!?】在實(shí)際過程中這些步驟經(jīng)常是重疊和彼此間有信息交換,它不是一個(gè)簡單線性過程,而是包括開發(fā)步驟的多個(gè)反復(fù)。如圖2所示。需求分析系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)與編碼軟件測試軟件運(yùn)行與維護(hù)圖2 即時(shí)通訊系統(tǒng)開發(fā)流程圖4.3功能模塊劃分該即時(shí)聊天工具按如下過程完成通信:(1)客戶向服務(wù)器注冊,告知服務(wù)器該客戶監(jiān)聽某主題;(2)客戶注冊之后,向服務(wù)器發(fā)送消息;(3)服務(wù)器再把消息發(fā)送給所有監(jiān)聽此主題的客戶。根據(jù)以上描述,該系統(tǒng)功能模塊圖請見圖3。即時(shí)聊天系統(tǒng)服務(wù)器端客戶端建立連接存儲(chǔ)數(shù)據(jù)監(jiān)聽用戶新建用戶登 錄通訊交流圖3 通
25、訊系統(tǒng)的功能模塊4.3.1 服務(wù)器端由圖3可知服務(wù)器端完成至少3大功能:建立連接、存儲(chǔ)數(shù)據(jù)和監(jiān)聽客戶。這3大功能的具體含義如下:(1)建立一個(gè)ServerSocket連接,不斷偵聽是否有客戶端連接或者斷開連接。(2)服務(wù)器端是一個(gè)信息發(fā)送中心,所有客戶端的信息都傳到服務(wù)器端,再由服務(wù)器根據(jù)要求分發(fā)出去。(3)數(shù)據(jù)庫數(shù)據(jù)操作包括將用戶信息存儲(chǔ)到數(shù)據(jù)庫等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務(wù)器端建立通信信道,向服務(wù)器端發(fā)送新建用戶的信息,接收來自服務(wù)器的信息進(jìn)行注冊。(2)用戶登錄:客戶端與服務(wù)器端建立通信信道,
26、向服務(wù)器端發(fā)送信息,完成用戶登錄。(3)通信交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。4.4 數(shù)據(jù)庫概要設(shè)計(jì)因?yàn)楸鞠到y(tǒng)采用的是2級C/S結(jié)構(gòu)模式,所以,為了減少服務(wù)器的存儲(chǔ)量,方便程序設(shè)計(jì),本系統(tǒng)只對用戶信息進(jìn)行存儲(chǔ)。利用JAVA中的hibernate框架技術(shù)進(jìn)行存儲(chǔ)。在Hibernate中,各表的映射文件.hbm.xml可以通過工具生成,在本系統(tǒng)中,用戶表信息可以用Xml代碼實(shí)現(xiàn)。用戶表(user)表1 用戶信息表名稱字段名稱類別主鍵非空用戶編號id數(shù)字是是登錄名CustName文本否是登錄密碼CustPassword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email文本
27、否是5 詳細(xì)設(shè)計(jì)5.1 服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn)作為C/S模式下的系統(tǒng)開發(fā),很顯然服務(wù)器端程序的設(shè)計(jì)是非常重要的。下面就服務(wù)器端的相關(guān)程序模塊進(jìn)行設(shè)計(jì),并一定程度上實(shí)現(xiàn)了相關(guān)功能。5.1.2 主服務(wù)器類的設(shè)計(jì)設(shè)計(jì)服務(wù)器時(shí)需要考慮如下幾個(gè)因素:(1)服務(wù)器的運(yùn)行速度;(2)服務(wù)器的響應(yīng)速度,包括新建連接和發(fā)送數(shù)據(jù)的響應(yīng)速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。針對TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)服務(wù)器的程序結(jié)構(gòu)需要考慮以下的因素:(1)多線程;(2)多進(jìn)程;(3)單線程。主服務(wù)器類實(shí)現(xiàn)了服務(wù)器端的多線程,使用SeverSocket s=newServerSocket(1001
28、)語句在1001端口創(chuàng)建套接口;使用new ServerThread(socket)語句創(chuàng)建新的線程。主服務(wù)器類調(diào)用ServerThread類,而每個(gè)ServerThread實(shí)體就是一個(gè)獨(dú)立的線程,剛好對應(yīng)于客戶端的連接請求響應(yīng)線程。服務(wù)器端有一個(gè)(或多個(gè))進(jìn)程在指定的端口等待客戶的連接信息,一旦連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r(shí)候向服務(wù)器端發(fā)出連接請求。實(shí)現(xiàn)界面如圖4。圖4 服務(wù)器啟動(dòng)界面現(xiàn)就其中一些核心代碼進(jìn)行講解。public class AppServer extends Thread其中public是JAVA的關(guān)鍵字,用來表示該類是共有,在整個(gè)
29、程序里都可以訪問到它;Class表示類定義,它后面接著用戶定義的類的類名為AppServer;extends表示繼承的意思,他后面的類Thread是子類,能夠繼承父類AppServer所定義的一些變量。這條語言表示的意思就是聲明一個(gè)公共類AppServer,用子類Thread繼承父類AppServer中的一些變量。static boolean newMessage。其中,static是關(guān)鍵字,表示靜態(tài)變量,Boolean表示變量類型為布爾型,變量名為newMessage。這條語句的意思是定義一個(gè)靜態(tài)變量newMessage,它的類型為布爾型。值得強(qiáng)調(diào)的是布爾型數(shù)據(jù)只有兩個(gè)值true和false
30、,并且它們不對應(yīng)人數(shù)整數(shù)值。if(start) sFrame.txtStatus.setText(已啟動(dòng).);log(null,服務(wù)器已啟動(dòng). );else sFrame.txtStatus.setText(關(guān)閉中.);這是一條if條件判斷語句,它表示變量start如果不為空,那么執(zhí)行語句第一個(gè)大括號中的語句,如果為空,則執(zhí)行else中的語句。其中,log為輸出語句,表示在窗口中輸出“服務(wù)器已啟動(dòng)”信息。public void run() try while (start) Socket client = serverSocket.accept();Connection con = new C
31、onnection(client, u, v, userInfo); catch (IOException e) log(e, 不能監(jiān)聽!);這個(gè)函數(shù)的作用是監(jiān)聽用戶信息,void表示定義的函數(shù)不需要返回值,while是循環(huán)語句關(guān)鍵字,在語句中的意思為直到start的值不為空,將循環(huán)執(zhí)行后面括號的語句,直到start值為空后,循環(huán)才結(jié)束。Connection con表示連接用戶信息。Catch是對java中的異常進(jìn)行捕獲,并且能夠拋出異常,便于程序能夠正常運(yùn)行。5.1.2 登錄驗(yàn)證模塊系統(tǒng)的登錄模塊是比較重要的,這是用戶的一個(gè)身份驗(yàn)證,是通訊系統(tǒng)必須的一個(gè)功能模塊。如果客戶端輸入的字符串表方式
32、需要登錄,那么服務(wù)器在接收到該信息后連接數(shù)據(jù)庫,準(zhǔn)備從數(shù)據(jù)庫選擇昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過來的號碼和密碼信息后,設(shè)定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較輸入的用戶名和密碼數(shù)據(jù)庫信息來卻請用戶的登錄是否成功。以下為登陸驗(yàn)證的流程圖。符合不符合登陸系統(tǒng)輸入信息驗(yàn)證進(jìn)入系統(tǒng)圖5 用戶登錄流程圖5.1.3 注冊處理模塊新建用戶是即時(shí)通訊工具的一個(gè)基本功能。用戶新建過程也在線程監(jiān)聽函數(shù)run()中。新建用戶的過程是這樣的:首先使用Register_Customer()方法加載數(shù)據(jù)庫驅(qū)動(dòng)類;然后使用dao.getUser()方法獲取數(shù)據(jù);在獲取注冊名時(shí),進(jìn)行判斷,查看用戶名是否重復(fù),如果重
33、復(fù),則向客戶端彈出提示信息,見圖6;如果不重復(fù),服務(wù)器接收客戶端用戶發(fā)送的昵稱、密碼、用戶E-mail等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建;最后向用戶反饋?zhàn)猿晒π畔?。圖6 注冊名重復(fù)提示信息5.2 客戶端的設(shè)計(jì)與實(shí)現(xiàn)前一章介紹了服務(wù)器端的設(shè)計(jì)與實(shí)現(xiàn),對于C/S模式的系統(tǒng)而言,還必須對系統(tǒng)的客戶端進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。下面就來解決這樣一個(gè)問題??蛻舳送ㄟ^Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過構(gòu)造BufferedReader、PrintWriter來建立輸入流和輸出流,雙方通過該輸入流和輸出流來相互傳遞信息。只要收到客戶端的連接請求,服務(wù)器利用accept()函數(shù)返回一個(gè)新建的Socke
34、t對象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊、登錄和查找同事等請求,服務(wù)器收到請求后,針對不同的消息處理請求。5.2.1 用戶注冊模塊當(dāng)用戶向服務(wù)器端發(fā)出注冊請求后,客戶端將向服務(wù)器發(fā)送客戶傳遞的信息,諸如客戶的昵稱、性別、個(gè)人資料等信息。等服務(wù)器接收完畢后,服務(wù)器會(huì)通過hibernate框架讀取數(shù)據(jù)庫信息,并進(jìn)行判斷,最后在客戶端收到服務(wù)器的反饋信息。現(xiàn)對部分關(guān)鍵語句進(jìn)行講解。public class Register extends JFrame implements ActionListener Toolkit toolkit=Toolkit.getDefaultToolkit();JB
35、utton btnOk,btnCancel,btnClear;public Register(String ip) btnOk=new JButton(確定(O); btnOk.setMnemonic(O); btnOk.setToolTipText(保存注冊信息); btnOk.setBounds(250,135,80,25);Implement繼承于接口類時(shí)用的關(guān)鍵詞【7】,在數(shù)據(jù)接口位置使用,在這里表示類ActionListen類繼承類Register。JButton btnOk,btnCancel,btnClear。這條語句中,JButton其實(shí)是一個(gè)類,名為JButton按鈕類,它是
36、JAVA中自帶的一種控件,當(dāng)鼠標(biāo)移入、移出、被點(diǎn)擊所定義的3個(gè)變量時(shí),會(huì)觸發(fā)JButton類,從而執(zhí)行相應(yīng)的操作。如在類Register中,當(dāng)鼠標(biāo)點(diǎn)擊“確定”按鈕時(shí),則會(huì)觸發(fā)類JButton定義的變量btnOk,并且為其賦值,進(jìn)而調(diào)用setToolTipText方法,將注冊信息進(jìn)行保存。而setBounds類是JAVA自帶類,他能夠設(shè)置組件位置【8】,即確定注冊窗口位置。見圖7。圖7 用戶注冊界面5.2.2 用戶登錄當(dāng)用戶點(diǎn)擊登錄時(shí),客戶端發(fā)起請求與服務(wù)端建立連接,登錄信息首先在客戶端做驗(yàn)證,然后通過填寫的服務(wù)器IP地址申請與服務(wù)端建立連接。而在服務(wù)器端,有一個(gè)主線程專門創(chuàng)建SOCKET服務(wù),
37、等待客戶端的連接,每當(dāng)客戶端發(fā)起連接的申請時(shí),與之建立連接,并創(chuàng)建一個(gè)線程,將建立的連接交給這個(gè)線程處理,并將連接存入一個(gè)集合中,用于后續(xù)業(yè)務(wù)的處理。然后服務(wù)器將反序列化客戶端傳輸過來的數(shù)據(jù),生成一個(gè)用戶對象。從中獲取登錄填寫的信息,根據(jù)用戶名和密碼在數(shù)據(jù)庫中查找數(shù)據(jù),如果能夠找到表示登錄成功,反之,登錄不成功。最后將登錄的結(jié)果通過文本發(fā)送給客戶端發(fā)送給服務(wù)端。最后,如果通過驗(yàn)證,得到一個(gè)標(biāo)志,進(jìn)入聊天主窗體,否則彈出登錄失敗的對話框,讓用戶重新登錄。登陸界面見圖8圖8 用戶登陸界面現(xiàn)對部分關(guān)鍵代碼進(jìn)行講解:public void actionPerformed(ActionEvent ae)
38、Object source=ae.getSource();if (source.equals(btnLogin) if(txtUserName.getText().equals() | pwdPassword.getText().equals() JOptionPane op1=new JOptionPane(); op1.showMessageDialog(null,用戶名或密碼不能為空); else strServerIp=txtServer.getText(); login(); 該語句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如果不為空,則調(diào)用login方法
39、。這里equals表示接受變量的值;“|”表示“或”的意思,;showMessageDialog是JAVA的自帶控件,作用是在當(dāng)前界面彈出對話框;關(guān)鍵字new,是一種調(diào)用方法,表示能夠直接調(diào)用類的構(gòu)造方法。5.2.3 在線用戶顯示設(shè)計(jì)用戶完成登錄后,客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請求讀取在線人員名單;服務(wù)器收到該請求,開始讀取數(shù)據(jù)庫中的user表并得到同事的號碼,向客戶端發(fā)送這些信息;客戶收到服務(wù)器信息后,在主窗口顯示顯現(xiàn)成員的昵稱。其實(shí)現(xiàn)代碼如下:for (int i=0;imessobj.userOnLine.size();i+) String User=(Stri
40、ng)messobj.userOnLine.elementAt(i); lstUserList.addItem(User); 這里采用了for循環(huán),定義變量i,初值為0,只要i滿足;imessobj.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ā)送與接收都是通過Socket類實(shí)現(xiàn)的。使用Socket對網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請求,一旦連接成功,打開會(huì)
41、話;會(huì)話完成后,關(guān)閉Socket。也就是說,在服務(wù)端開啟socket服務(wù),客戶端每一次連接成功時(shí)也都會(huì)同時(shí)創(chuàng)建一個(gè)線程來處理這次連接的請求,而該連接會(huì)被保存在一個(gè)集合中,直到服務(wù)結(jié)束,連接關(guān)閉,該線程也會(huì)結(jié)束,同時(shí)從連接的集合中移除該連接。(1)信息發(fā)送用戶在每次發(fā)送信息時(shí),首先向服務(wù)器發(fā)送的是自己信息和發(fā)送對象信息,然后再通過Socket類向服務(wù)器發(fā)送信息。當(dāng)然,在每次輸入信息后,輸入信息框的內(nèi)容將會(huì)被清空。關(guān)鍵代碼如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMessage=txtMessa
42、ge.getText(); chatobj.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); txtMes
43、sage.setText(); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系統(tǒng)獲取發(fā)送信息者的昵稱,發(fā)送信息內(nèi)容以及發(fā)送對象的昵稱;chPrivateChat.isSelected()?true:false這是一個(gè)判斷語句,表示信息值是否為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則賦false。在上文中,我們講到了catch有拋出異常的作用,而trycatch也是具有相同的功能,try 塊塊是需要捕獲異常的,因?yàn)槲募锌赡懿淮嬖?,?huì)導(dǎo)致程序崩潰,所以直接捕獲,也可以直接th
44、rows 出去,讓調(diào)用該方法的方法去捕獲,從而使程序能夠正常進(jìn)行。此外,函數(shù)Socket(strServerIp,1001) 用來創(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)的信息輸出原理是將所有輸入信息通過socket類向服務(wù)器發(fā)送,然后直接從服務(wù)器中突出信息。關(guān)鍵代碼如下:Socket toServer;toServer=new Socket(strServerIp,1001);/將信
45、息發(fā)往服務(wù)器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStream streamtoserver=new ObjectOutputStream (toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收來自服務(wù)器的信息由于上文以對很多方法進(jìn)行講解,現(xiàn)主要對ObjectOutputStream進(jìn)行講解。ObjectOutputStream 將 Java 對象的基本數(shù)據(jù)類型和圖形寫入 OutputStre
46、am??梢允褂?ObjectInputStream 讀取(重構(gòu))對象。通過在流中使用文件可以實(shí)現(xiàn)對象的持久存儲(chǔ)。如果流是網(wǎng)絡(luò)套接字流,則可以在另一臺主機(jī)上或另一個(gè)進(jìn)程中重構(gòu)對象。也就是說通過ObjectOutputStream 將toServer.getOutputStream()進(jìn)行重構(gòu),從而將服務(wù)器接受的信息重構(gòu)到客戶機(jī)上,最后通過streamtoserver.writeObject()方法將信息寫在客戶端上。5.3 數(shù)據(jù)庫設(shè)計(jì)在前文我們已經(jīng)分析了數(shù)據(jù)庫的實(shí)現(xiàn)是采用了hibernate框架中的.XML映射。以下則為實(shí)現(xiàn)的關(guān)鍵代碼:- 其中,package=org.seler.bean表示調(diào)
47、用該框架bean中的數(shù)據(jù)包;auto-import=true表示hibernate框架中的將映射文件實(shí)體;property表示元素定義,name表示字段名;not-null表示是否設(shè)置該字段為空;unique表示是否設(shè)置該字段為唯一值;optimistic-lock指定此屬性做更新操作時(shí)是否需要樂觀鎖定; lazy指定是否采用延遲加載及加載策略,設(shè)置為false,表示此關(guān)聯(lián)對象不采用延遲加載。6 結(jié)論眾所周知,互聯(lián)網(wǎng)從誕生以來,就開始影響著地球的每一個(gè)角落,給予了人類一種全新的生活方式,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,新興的技術(shù)也層出不窮,即時(shí)通信系統(tǒng)就是這么一種以聊天形式為主的廣受歡迎的互聯(lián)網(wǎng)技術(shù)
48、。當(dāng)然,該課題討論的即時(shí)通訊系統(tǒng)是定位于內(nèi)部局域網(wǎng),供班級內(nèi)部人員使用的通訊系統(tǒng)。即時(shí)通信中最基本的功能就是通過計(jì)算機(jī)之間的文本數(shù)據(jù)的互換的形式實(shí)現(xiàn)思想的交流和溝通,它的優(yōu)點(diǎn)是方便快捷,為人們之間創(chuàng)建了一種新型的、廉價(jià)的、快速的、簡便的溝通方式。首先,本系統(tǒng)完全按照軟件工程的瀑布模型進(jìn)行開發(fā),雖然缺少部分開發(fā)文檔,但本論文則是按照需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),軟件的運(yùn)行和測試等的結(jié)構(gòu)進(jìn)行安排的。其次,本即時(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)對眾多
49、客戶的請求。再次,本文并沒有采用復(fù)雜的SQL,ORICLE等數(shù)據(jù)庫,而是通過hibernate框架對數(shù)據(jù)進(jìn)行映射,然后利用*.hbm.xml將數(shù)據(jù)進(jìn)行存儲(chǔ)。最后,在編寫這個(gè)聊天程序時(shí)遇到許許多多的問題,比如JAVA的圖形化界面如何編寫,該怎樣布局。這是java的一個(gè)弱項(xiàng),不像VB,DELPHI等語言可以使用已有的控件。后來也在網(wǎng)上找到一些setBounds類,雖然調(diào)用起來比較麻煩,但是熟悉后也覺得不是那么難。經(jīng)過一段時(shí)間的學(xué)習(xí)和工作,該即時(shí)聊天系統(tǒng)已經(jīng)初具雛形,實(shí)現(xiàn)了網(wǎng)絡(luò)即時(shí)通信工具的主要功能,為實(shí)現(xiàn)一個(gè)嶄新的可跨平臺的Java即時(shí)聊天工具打下了基礎(chǔ)。目前該即時(shí)聊天系統(tǒng)的1.0版本已經(jīng)投入試運(yùn)行中。參考文獻(xiàn)1 尹治本.計(jì)算機(jī)網(wǎng)絡(luò)及應(yīng)用教程M.成都:西南交通大學(xué)出版社.2002.8. 2熊曉敏,劉瑛,陳惠清.基于Java的網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)J.計(jì)算機(jī)與現(xiàn)代化,2005(12): 89-92. 3 羅軍舟,黎波濤,楊明,吳俊,黃健.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).北京:清華大學(xué)出版社.2005.8. 4 Bruce Eckel著,侯捷翻譯.Java編程思想M.北京:機(jī)械工業(yè)出版社出版,2000.9. 5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級下冊期末押題作文《-的我》
- 開源軟件供應(yīng)鏈管理與優(yōu)化
- 雙激光加工碳化鎢陶瓷顆粒在錫鎳青銅合金中的應(yīng)用研究
- 高校命運(yùn)共同體構(gòu)建與辦學(xué)資源共享機(jī)制研究
- 基于數(shù)據(jù)驅(qū)動(dòng)的鈣鈦礦材料性能預(yù)測智能計(jì)算框架構(gòu)建
- 邊界管理:掌握適可而止的藝術(shù)與策略
- 燃?xì)獍惭b工程質(zhì)量課件
- 紡織纖維檢驗(yàn)員崗位面試問題及答案
- 熊貓兒童課件
- 陶瓷裝飾材料創(chuàng)新研究-洞察闡釋
- 診所托管合同協(xié)議
- 質(zhì)量檢驗(yàn)(測)技術(shù)服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 信息必刷卷04(廣東省卷專用)2025年中考數(shù)學(xué)(解析版)
- 餐飲服務(wù)與管理課件 菜單的設(shè)計(jì)與制作
- 核電進(jìn)廠考試題及答案
- 公司員工飲水管理制度
- 山東師范大學(xué)《大學(xué)英語本科(專升本)》期末考試復(fù)習(xí)題及參考答案
- 聲譽(yù)風(fēng)險(xiǎn)培訓(xùn)
- 《SketchUp草圖大師教學(xué)》課件
- 職業(yè)技能培訓(xùn):保健按摩師
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
評論
0/150
提交評論