版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要隨著網(wǎng)絡(luò)通信技術(shù)和計(jì)算機(jī)技術(shù)的進(jìn)一步開展,即時(shí)通信(InstantMessaging)正在成為網(wǎng)絡(luò)在線活動(dòng)中不可缺少的業(yè)務(wù),對(duì)它的研究是互聯(lián)網(wǎng)應(yīng)用中一個(gè)熱點(diǎn)課題。即時(shí)通信軟件的誕生,推動(dòng)了企業(yè)工作效率的提高,降低了辦公費(fèi)用,給企業(yè)的管理帶來了新的思路和方法,并引起了人們對(duì)該應(yīng)用領(lǐng)域的關(guān)注。本文在現(xiàn)有的網(wǎng)絡(luò)通信技術(shù)、數(shù)據(jù)庫技術(shù)和信息平安技術(shù)的根底上設(shè)計(jì)并實(shí)現(xiàn)了新型的企業(yè)即時(shí)通信系統(tǒng)(EIM,EnterpriseInstantMessaging)。該系統(tǒng)為用戶提供了一個(gè)集文字通信、文件傳輸于一體的即時(shí)通信平臺(tái),根本滿足了企業(yè)用戶的要求。在對(duì)即時(shí)通信系統(tǒng)的效勞器端和客戶端的主要組成模塊詳細(xì)剖析后,論文研究了各個(gè)模塊的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)方式,分別研究了每個(gè)模塊的主要功能,并給出了模塊運(yùn)行效果圖。系統(tǒng)實(shí)現(xiàn)后,對(duì)系統(tǒng)進(jìn)行了功能測(cè)試,并分析測(cè)試數(shù)據(jù)。實(shí)驗(yàn)數(shù)據(jù)說明,該系統(tǒng)具有易于實(shí)現(xiàn)、可靠性高、易于擴(kuò)展、傳輸效率高等特點(diǎn),到達(dá)了預(yù)定的設(shè)計(jì)目標(biāo)。關(guān)鍵詞:即時(shí)通信,Socket,通信模型,文件傳輸AbstractWiththenetworkcommunicationtechnologyandthefurtherdevelopmentofcomputertechnology,instantmessaging(InstantMessaging)isbecominganindispensablenetworkofonlinebusinessactivities;itsresearchisahottopicinInternetapplications.Thebirthofinstantmessagingsoftware,topromotetheworkefficiencyoftheenterprise,reducingbusinesscosts,totheenterprise'smanagementhasbroughtnewideasandmethods,andarousedtheconcernoftheapplications.Thesubjectintheexistingnetworkcommunicationtechnology,databasetechnologyandinformationsecuritytechnologybasedonthedesignandimplementationofanewtypeofenterpriseinstantmessagingsystem(EIM,EnterpriseInstantMessaging).Thesystemprovidesuserswithasetoftextcommunicationfiletransfer,instantmessagingplatformsinone,basicallymeettherequirementsofbusinessusers.Then,thepaperoftheinstantmessagingsystemserverandclientmodulesofthemaincomponentsofadetailedanalysis,discussesthedetaileddesignofeachmoduleandimplementation,respectively,describedthemainfunctionofeachmodule,andgivesthemoduleflowchart.Finally,thepaperoftheinstantmessagingsystemdesignedforserver-sideperformancetest,andtestdatawereanalyzed.Experimentaldatashowthatthesystemhaseasytoimplement,reliable,scalable,andhightransmissionefficiency,achieveditsdesigngoals.Keywords:InstantMessaging,Socket,CommunicationModel,FileTransfer目錄1緒論11.1課題背景11.2研究現(xiàn)狀11.3研究意義21.4研究?jī)?nèi)容31.5論文結(jié)構(gòu)31.6本章小結(jié)42Socket相關(guān)技術(shù)研究52.1主流即時(shí)通信模型52.1.1P2P模型52.1.2C/S模型62.2即時(shí)通信主流的通信協(xié)議72.2.1UDP協(xié)議72.2.2TCP協(xié)議82.3Socket技術(shù)82.4多線程技術(shù)92.5JDBC技術(shù)102.6開發(fā)工具介紹112.6.1Eclipse簡(jiǎn)介11MySQL簡(jiǎn)介122.6.3Visio簡(jiǎn)介132.7本章小結(jié)133對(duì)Socket通信需求分析143.1即時(shí)通信系統(tǒng)總體需求143.2系統(tǒng)功能描述143.3系統(tǒng)協(xié)議的選定143.4系統(tǒng)設(shè)計(jì)性能分析153.5本章小結(jié)154實(shí)現(xiàn)Socket通信的方案和關(guān)鍵模塊的設(shè)計(jì)164.1系統(tǒng)總體結(jié)構(gòu)的描述16系統(tǒng)功能模塊設(shè)計(jì)174.2效勞器端工作流程19客戶端工作流程214.3總體實(shí)現(xiàn)方案和類的設(shè)計(jì)224.4關(guān)鍵模塊詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)234.4.1利用Socket進(jìn)行TCP連接23面向連接的Socket機(jī)制的模塊設(shè)計(jì)274.5文件傳輸模塊284.6本章小結(jié)295對(duì)程序進(jìn)行調(diào)試與測(cè)試,并對(duì)結(jié)果進(jìn)行分析305.1Socket通信的應(yīng)用305.2聊天效勞器端305.3聊天客戶端325.4聊天系統(tǒng)的運(yùn)行界面33結(jié)論34具體工作如下34參考文獻(xiàn)35致謝37附錄A英語原文38附錄B漢語翻譯531緒論即時(shí)通信(InstantMessaging)軟件是我國目前上網(wǎng)用戶使用率最高的軟件之一,即時(shí)通信系統(tǒng)(InstantMessagingSystem)可使人們?cè)诰W(wǎng)上識(shí)別在線用戶并與之實(shí)時(shí)交流。目前,即時(shí)通信和、一樣,已經(jīng)成為企業(yè)員工商務(wù)溝通中廣泛使用的交流工具,但個(gè)人即時(shí)通信軟件在提高了溝通效率的同時(shí)也帶來了一些難以管理的問題,如平安性問題、用戶伸縮性問題等。如何使即時(shí)通信真正為企業(yè)效勞,發(fā)揮其長(zhǎng)處,并對(duì)其有效管理,已經(jīng)成為研究的一個(gè)新課題。為此論文研究開發(fā)了企業(yè)級(jí)即時(shí)通信系統(tǒng),此系統(tǒng)具備個(gè)人即時(shí)通信系統(tǒng)的功能,是一款可管理、可控制的企業(yè)級(jí)即時(shí)通信系統(tǒng)。通過對(duì)國內(nèi)外現(xiàn)有的即時(shí)通信軟件詳細(xì)地分析研究,提出了不同的即時(shí)通信模型,構(gòu)建了適合于企業(yè)的即時(shí)通信系統(tǒng),并通過實(shí)踐驗(yàn)證了其具有很好的可行性與適用性。1.1課題背景企事業(yè)的信息化開展,越來越需要不同系統(tǒng)協(xié)同工作,這就要求通過網(wǎng)絡(luò)進(jìn)行即時(shí)通信?,F(xiàn)在企事業(yè)單位采用和電子郵件通信手段,雖然起了很大的溝通作用,但還是無法實(shí)現(xiàn)即時(shí)通信。還有些單位采用市面上流行的即時(shí)通信軟件,比方ICQ、騰訊QQ、EMS等軟件,但這些軟件一般針對(duì)個(gè)人通信,屬于公共效勞軟件的一種,處于開放網(wǎng)絡(luò)環(huán)境下,聊天對(duì)象與聊天內(nèi)容不可控制,上班時(shí)使用EMS、QQ可能會(huì)降低工作效率。EMS、QQ必須登錄Internet才能使用,因而它們?cè)跒槠笫聵I(yè)或機(jī)構(gòu)用戶提供協(xié)作支持的同時(shí),也帶來了來自公眾網(wǎng)絡(luò)的信息干擾,存在影響工作效率和信息平安的隱患,所以并不太適合企(事)業(yè)內(nèi)部的通信。還有的就是使用在本地局域網(wǎng)內(nèi)即時(shí)傳送消息和文件的小工具比方WinpopupX,它沒有效勞器端,通過在線列表和操作系統(tǒng)的網(wǎng)上鄰居獲取在線用戶或以網(wǎng)上鄰居中的計(jì)算機(jī)為對(duì)象進(jìn)行通信,沒有平安性也不便于企業(yè)管理。在這種情況下,有必要自主開發(fā)企事業(yè)內(nèi)部的即時(shí)通信軟件[1]。1.2研究現(xiàn)狀目前,信息產(chǎn)業(yè)在我國開展很快,已取得了一些成就。國家研究院對(duì)中國信息化調(diào)查結(jié)果顯示,“實(shí)時(shí)企業(yè)〞這一概念被受訪者認(rèn)為是中國信息化最有應(yīng)用前景的技術(shù),認(rèn)同率高達(dá)60%[2],顯示了即時(shí)通信軟件在國內(nèi)市場(chǎng)強(qiáng)勁的開展勢(shì)頭。即時(shí)通信軟件在中國市場(chǎng)迅猛增長(zhǎng),各路廠商們正在紛紛推出自己的產(chǎn)品,能滿足企業(yè)需求的還是比擬少。而且目前的即時(shí)通信系統(tǒng)大多存在以下問題:1.標(biāo)準(zhǔn)化目前即時(shí)通信的開展存在的最突出問題就是相關(guān)通信協(xié)議和標(biāo)準(zhǔn)不統(tǒng)一,各個(gè)即時(shí)通信軟件采用不同的語言和協(xié)議標(biāo)準(zhǔn)而無法相互通信[3]。由于各大即時(shí)通信廠家考慮自身的商業(yè)利益,到目前為止還沒有完全制定統(tǒng)一標(biāo)準(zhǔn)的通信協(xié)議。但作為一種基于IP技術(shù)的通信根底軟件,即時(shí)通信最終成為互通互聯(lián)、開放式的在線通信工具肯定是大勢(shì)所趨。即時(shí)通信已經(jīng)成為語音及文本的在線實(shí)時(shí)通信的主要技術(shù),它必將成為未來移動(dòng)商務(wù)、在線協(xié)作及Internet應(yīng)用的核心,同時(shí)也將繼承IP技術(shù)的開放風(fēng)格,扮演比電子郵件更為重要的角色。2.平安性在即時(shí)通信系統(tǒng)的開展過程中,如何保障系統(tǒng)平安、為用戶提供的可靠效勞同樣重要。一個(gè)即時(shí)通信系統(tǒng)可能會(huì)保存大量用戶的個(gè)人信息,如何保證這些信息的平安將是一個(gè)長(zhǎng)期課題[4]。所以,建立統(tǒng)一、完善的平安體系也是未來開展的一個(gè)主要趨勢(shì)。3.伸縮性即時(shí)通信從支持幾十個(gè)個(gè)人用戶,到支持上百萬的個(gè)人用戶同時(shí)在線,這需要一個(gè)非常好的可伸縮性,如何建立一個(gè)好的可伸縮的體系結(jié)構(gòu)支持高并發(fā)量的用戶群體也是即時(shí)通信軟件提供商要面臨的問題。1.3研究意義隨著網(wǎng)絡(luò)技術(shù)的開展,即時(shí)通信正在成為在線活動(dòng)中不可或缺的業(yè)務(wù)。由于即時(shí)通信效勞是一種公共效勞,處于開放網(wǎng)絡(luò)環(huán)境下,因而它為企業(yè)或機(jī)構(gòu)用戶提供協(xié)作支持的同時(shí),也帶來了來自公眾網(wǎng)絡(luò)的干擾,存在影響工作效率甚至信息平安的隱患。從個(gè)人即時(shí)通信向企業(yè)即時(shí)通信的演化,是目前即時(shí)通信領(lǐng)域的研究熱點(diǎn)[5],基于Socket的即時(shí)通信技術(shù)的出現(xiàn)那么解決了這一問題,其主要作用包括以下幾個(gè)方面:1.應(yīng)用了目前最為流行的即時(shí)通信技術(shù),使員工之間快速、便捷的交流。將大局部工作由手工處理轉(zhuǎn)變?yōu)橛?jì)算機(jī)處理,減少了人工錯(cuò)誤和通信本錢,提高了工作人員的工作效率。2.建立了一個(gè)局部的管理的環(huán)境,通過建立平安對(duì)等組,實(shí)現(xiàn)一個(gè)可在局部范圍內(nèi)從事特定工作的區(qū)域。3.建立了一個(gè)具有監(jiān)督機(jī)制的環(huán)境,在平安對(duì)等組中,根據(jù)平安級(jí)別的上下,各個(gè)成員對(duì)等點(diǎn)的某些特定行為可以被監(jiān)控并作相應(yīng)記錄。1.4研究?jī)?nèi)容通過對(duì)市場(chǎng)上現(xiàn)有的國內(nèi)外商業(yè)級(jí)即時(shí)通信系統(tǒng)的功能、架構(gòu)詳細(xì)的研究,將一些技術(shù)和想法融入到系統(tǒng)的實(shí)現(xiàn)過程中,論文研究的基于Socket的局域網(wǎng)即時(shí)通信系統(tǒng)主要實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的私聊、多人群聊、即時(shí)發(fā)送文件和歷史記錄的保存等功能。主要實(shí)現(xiàn)方法包括:1.利用WinSock技術(shù)實(shí)現(xiàn)實(shí)時(shí)通信整個(gè)系統(tǒng)通信基于TCP/IP的通信技術(shù),通過調(diào)用WinSock的API實(shí)現(xiàn)相互之間的通信,而WinSock利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通信工作。2.采用P2P與C/S混合模式來實(shí)現(xiàn)整個(gè)系統(tǒng)的通信架構(gòu)確定用戶之間通信模式為P2P模式便于直接通信高效傳輸信息,用戶與效勞器之間采用C/S模式用于通信的初始聯(lián)接及保存用戶信息和通信過程中的一些相關(guān)數(shù)據(jù)。3.應(yīng)用多線程使網(wǎng)絡(luò)效勞器具有了多用戶訪問數(shù)據(jù)轉(zhuǎn)發(fā)的功能,進(jìn)而解決多用戶間的并發(fā)通信問題。4.通信協(xié)議的解析與約定確定客戶端與效勞器端之間及客戶端與客戶端之間的通信協(xié)議。5.?dāng)?shù)據(jù)庫的管理與應(yīng)用研究系統(tǒng)效勞端使用的數(shù)據(jù)庫訪問技術(shù)。6.界面實(shí)現(xiàn)在界面實(shí)現(xiàn)的根底上完成具體的設(shè)計(jì)與實(shí)現(xiàn)工作。1.5論文結(jié)構(gòu)論文共分六章。第一章為緒論,介紹了本文的研究背景,提出了實(shí)現(xiàn)即時(shí)通信的關(guān)鍵技術(shù),并闡述了這些技術(shù)在國內(nèi)外的研究現(xiàn)狀以及開發(fā)此通信軟件的必要性與可行性,進(jìn)而提出了本文的研究方向,即設(shè)計(jì)一個(gè)企業(yè)即時(shí)通信系統(tǒng)。第二章對(duì)系統(tǒng)應(yīng)用的相關(guān)技術(shù)進(jìn)行描述,主要描述實(shí)現(xiàn)系統(tǒng)所需的通信原理、網(wǎng)絡(luò)編程根底以及一些技術(shù)方面的根本概念與根本思想。第三章是系統(tǒng)總體設(shè)計(jì),介紹了軟件的整體(效勞器和客戶機(jī))設(shè)計(jì)思路和概要設(shè)計(jì),從總體上介紹軟件的設(shè)計(jì)要求、工作流程以及各個(gè)功能模塊,對(duì)系統(tǒng)中的關(guān)鍵技術(shù)進(jìn)行闡述。第四章對(duì)實(shí)現(xiàn)Socket通信的各個(gè)模塊進(jìn)行了研究與分析。第五章是系統(tǒng)的測(cè)試與結(jié)果分析,為了到達(dá)可靠性和可用性,對(duì)軟件進(jìn)行了功能測(cè)試。第六章也是全文的最后一章,對(duì)全文所開展的工作進(jìn)行了總結(jié)。1.6本章小結(jié)本章首先介紹了該課題的課題背景,初步認(rèn)識(shí)該系統(tǒng),了解了研究該系統(tǒng)的重要性。接著介紹了國內(nèi)外研究現(xiàn)狀以及研究意義,了解了該系統(tǒng)在當(dāng)今社會(huì)上的定位以便于在前人研究根底上能有所創(chuàng)新。接著介紹了研究?jī)?nèi)容,明確了該系統(tǒng)所研究的方向和內(nèi)容。最后對(duì)整個(gè)論文的組織結(jié)構(gòu)進(jìn)行了描述,使參閱者對(duì)論文有大致了解。2Socket相關(guān)技術(shù)研究企業(yè)即時(shí)通信系統(tǒng)是在客戶端效勞器程序設(shè)計(jì)根底上按照軟件工程設(shè)計(jì)思想,采用大量的計(jì)算機(jī)程序設(shè)計(jì)技術(shù)和網(wǎng)絡(luò)通信技術(shù)設(shè)計(jì)并實(shí)現(xiàn)。本章主要研究主流的即時(shí)通信模型、網(wǎng)絡(luò)通信技術(shù)、程序設(shè)計(jì)等。2.1主流即時(shí)通信模型當(dāng)代主流的即時(shí)通信模型主要有P2P模型與C/S模型,兩種軟件各有利弊,許多計(jì)算公司把P2P和C/S一樣的看重,經(jīng)常把兩者結(jié)合在一起使用。P2P模型P2P(PeertoPeer,對(duì)等連接或?qū)Φ染W(wǎng)絡(luò))模型,是指網(wǎng)絡(luò)中的物理節(jié)點(diǎn)在邏輯上以相同的地位進(jìn)行通信的模型,而不是處理能力的對(duì)等[6]。相對(duì)于C/S模型,其弱化了效勞器的概念,系統(tǒng)中的各個(gè)節(jié)點(diǎn)不再區(qū)分效勞器和客戶端的角色關(guān)系,每個(gè)節(jié)點(diǎn)既可請(qǐng)求效勞,也可提供效勞,節(jié)點(diǎn)之間可以直接交換資源和效勞而不必通過效勞器。P2P的最大特點(diǎn)就是用戶之間直接共享資源,使得PC不再是被動(dòng)的客戶端,而成為具有效勞器和客戶端雙重特征的設(shè)備,當(dāng)然P2P也有許多缺乏之處。首先P2P缺乏管理機(jī)制,管理者再也無法對(duì)其用戶進(jìn)行必要的管理,不像在C/S模式中只需在中心點(diǎn)進(jìn)行管理,所以P2P模型的網(wǎng)絡(luò)資源往往并不可靠[6]。其次P2P網(wǎng)絡(luò)中數(shù)據(jù)的平安性難以保證,P2P模型如圖2.1所示。圖2.1P2P模型圖C/S模型C/S(Client/Server,客戶/效勞器)模型,簡(jiǎn)稱C/S架構(gòu)。該模型可以合理利用兩端硬件環(huán)境優(yōu)勢(shì),將任務(wù)合理分配到客戶端和效勞器上,降低系統(tǒng)通信開銷。在這種結(jié)構(gòu)中,效勞器處于一個(gè)中心地位。效勞器是一個(gè)擁有強(qiáng)大處理能力和很大帶寬的高性能計(jì)算機(jī),數(shù)據(jù)和信息都保存在效勞器上。效勞器始終處于工作狀態(tài),一般同時(shí)為多個(gè)客戶提供效勞,它被動(dòng)地接受客戶連接,根據(jù)客戶的請(qǐng)求提供相應(yīng)的效勞。這就造成了效勞器設(shè)計(jì)的復(fù)雜性。特別是像即時(shí)通信效勞器這類具有社區(qū)性的效勞器,它只有為群體提供效勞才有意義。即時(shí)通信效勞器是數(shù)據(jù)中心,需要同時(shí)應(yīng)對(duì)眾多客戶的請(qǐng)求[7]。C/S通信主要特點(diǎn)是客戶端之間的通信都要通過效勞器的轉(zhuǎn)發(fā),會(huì)造成效勞太集中,在C/S模型中,當(dāng)網(wǎng)絡(luò)增大時(shí),效勞器的壓力就越大。當(dāng)增加一個(gè)客戶,效勞器的性能就會(huì)弱化,甚至?xí)剐谄魇Ф鴮?dǎo)致整個(gè)網(wǎng)絡(luò)的癱瘓等,其優(yōu)點(diǎn)是便于集中管理,像這種結(jié)構(gòu)一般用在用戶數(shù)量少的局域網(wǎng)內(nèi)。C/S模型圖如圖2.2所示。圖2.2C/S模型圖2.2即時(shí)通信主流的通信協(xié)議傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報(bào)UDP是TCP/IP協(xié)議族的兩個(gè)主要的傳輸協(xié)議,這兩個(gè)協(xié)議都使用IP作為網(wǎng)絡(luò)層協(xié)議[8]。在網(wǎng)絡(luò)通信傳輸機(jī)制中,TCP是屬于“面向連接,可靠傳輸〞的類型,面向連接的傳輸意味著在進(jìn)行通信以前,需要在兩個(gè)系統(tǒng)之間建立邏輯連接,在每個(gè)數(shù)據(jù)傳輸?shù)倪^程中都需要進(jìn)行應(yīng)答以保證數(shù)據(jù)包的完整。這種方法需要的網(wǎng)絡(luò)開銷較大,但卻提供一種可靠的傳輸層效勞。UDP是屬于“面向無連接,不可靠傳輸〞的類型,該協(xié)議只負(fù)責(zé)接收和傳送上層協(xié)議傳遞的消息,UDP本身不做任何檢測(cè)、修改與應(yīng)答,上層協(xié)議需要自己處理這些事務(wù)。TCP、UDP最大的區(qū)別在于為應(yīng)用協(xié)議提供不同的效勞。UDP協(xié)議用戶數(shù)據(jù)報(bào)協(xié)議UDP是建立在網(wǎng)際協(xié)議之上的,提供面向無連接、不可靠的數(shù)據(jù)報(bào)傳輸效勞的傳輸協(xié)議[9]。UDP傳輸不像TCP傳輸一樣需要預(yù)先建立一條連接,UDP把數(shù)據(jù)發(fā)送出去但不進(jìn)行過失控制和流量控制,報(bào)文可能喪失、重復(fù)或者失序,而發(fā)送方卻得不到通知的,數(shù)據(jù)也不會(huì)被重傳。因此,UDP提供的是一種不可靠的應(yīng)用數(shù)據(jù)傳輸效勞。它不需要通過一些握手協(xié)議確保連接的可靠性,發(fā)送方直接把數(shù)據(jù)播送到網(wǎng)絡(luò)上,任何欲接收者都可接收到數(shù)據(jù)。其優(yōu)點(diǎn)在于:1.使用UDP時(shí),每個(gè)數(shù)據(jù)中都給出了完整的地址信息,發(fā)送數(shù)據(jù)之前不需要建立發(fā)送方與接收方的連接,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時(shí)延。2.不使用擁塞控制,也不保證可靠傳輸,因此主機(jī)不需要維持具有許多參數(shù)的、復(fù)雜的連接狀態(tài)表。3.UDP不進(jìn)行流量控制,沒有序列與確認(rèn)、沒有超時(shí)重發(fā)等機(jī)制,因此它處理和傳輸數(shù)據(jù)的速度快。作為一種面向無連接的傳輸協(xié)議,基于UDP的應(yīng)用程序在高可靠性、地延遲的網(wǎng)絡(luò)中運(yùn)動(dòng)的很好,但是在通信子網(wǎng)的效勞質(zhì)量相對(duì)很低下的Internet上,它可能就無法運(yùn)行了,因?yàn)閿?shù)據(jù)報(bào)的喪失過于頻繁。原因就在于UDP的不可靠性,而這些應(yīng)用程序自身可能有沒有提供可靠性保障。因此,基于UDP的應(yīng)用程序如果想在可靠性低下的網(wǎng)絡(luò)中運(yùn)行的話,必須自己提供可靠性保障,例如遺失數(shù)據(jù)報(bào)重重傳、失序的數(shù)據(jù)報(bào)重新組合等。TCP協(xié)議TCP是一個(gè)面向連接的、可靠的傳輸層協(xié)議,協(xié)議提供的效勞包括面向連接、雙向、有序并且無重復(fù)的數(shù)據(jù)流傳送、有效的流量控制、全雙工操作和多路復(fù)用。它主要的功能是提供大量數(shù)據(jù)的傳輸并確保其傳輸無誤,并提供錯(cuò)誤檢查、數(shù)據(jù)復(fù)原以及數(shù)據(jù)超時(shí)重傳等機(jī)制,適用于傳輸可靠性要求比擬高的數(shù)據(jù)傳輸[9]。因此即時(shí)通信系統(tǒng)的消息傳輸一般是建立在TCP協(xié)議根底之上的,客戶與效勞器之間都是通過TCP傳輸數(shù)據(jù),效勞器端口一般固定。由于TCP是面向連接的,但是在國內(nèi)目前IP地址短缺,很多時(shí)候采用通過局域網(wǎng)連入Internet的網(wǎng)絡(luò)狀況,TCP的對(duì)等連接顯然不能滿足所有的要求,而且目前由于黑客軟件和病毒的泛濫,大局部上網(wǎng)的個(gè)人計(jì)算機(jī)都配置了防火墻在很大程度上阻止了許多的入站請(qǐng)求。所以數(shù)據(jù)傳輸大都是先嘗試直接連接,如果連接不通的話采用通過效勞器中轉(zhuǎn)的方式。2.3Socket技術(shù)隨著Internet的迅猛開展,網(wǎng)絡(luò)通信應(yīng)用程序的開發(fā)成為一個(gè)研究熱點(diǎn)。Windows環(huán)境下進(jìn)行通信程序設(shè)計(jì)的最根本方法是采用Socket技術(shù)實(shí)現(xiàn)[10]。應(yīng)用程序調(diào)用Socket的API(應(yīng)用程序編程接口)實(shí)現(xiàn)相互之間的通信,又利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通信工作。Socket工作原理如圖2.3所示:應(yīng)用程序B應(yīng)用程序A應(yīng)用程序B應(yīng)用程序A網(wǎng)絡(luò)接口,例如,WindowsSocket網(wǎng)絡(luò)接口,例如,WindowsSocket網(wǎng)絡(luò)效勞協(xié)議接口,例如TCP/IP網(wǎng)絡(luò)效勞協(xié)議接口,例如TCP/IP操作系統(tǒng),例如Windows操作系統(tǒng),例如Windows物理通信介質(zhì)物理通信介質(zhì)圖2.3Socket工作原理圖Sockets也稱為套接字,是一種網(wǎng)絡(luò)編程接口,它是通信端點(diǎn)的一種抽象,提供了一種發(fā)送和接收數(shù)據(jù)的機(jī)制。用戶目前可以使用兩種類型的套接字,它們是流式套接字(StreamSockets)和數(shù)據(jù)報(bào)套接字(DatagramSockets),這兩種套接字傳輸?shù)臄?shù)據(jù)類型是不同的,因而其使用方法和相應(yīng)的程序設(shè)計(jì)模型也是不同的[11]。2.4多線程技術(shù)操作系統(tǒng)是一個(gè)多任務(wù)的系統(tǒng),支持多任務(wù)調(diào)度和處理,基于該功能所提供的多任務(wù)空間,程序員可以完全控制應(yīng)用程序中每一個(gè)片段的運(yùn)行,從而編寫高效率的應(yīng)用程序。所謂多任務(wù)通常包括這樣兩大類:?jiǎn)芜M(jìn)程和多線程。進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,當(dāng)一個(gè)程序開始運(yùn)行時(shí),它就是一個(gè)進(jìn)程,進(jìn)程包括運(yùn)行中的程序和程序所使用到的內(nèi)存和系統(tǒng)資源[13];而一個(gè)進(jìn)程又是由多個(gè)線程所組成的,線程是程序中的一個(gè)執(zhí)行流,線程是系統(tǒng)分配處理器時(shí)資源的根本單元,或者進(jìn)程之內(nèi)獨(dú)立執(zhí)行的一個(gè)單元,對(duì)于操作系統(tǒng)而言,其調(diào)度單元是線程[14]。每個(gè)線程都有自己的專有存放器,但代碼區(qū)是共享的,即不同的線程可以執(zhí)行同樣的函數(shù)。多線程是指,程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程來執(zhí)行不同的任務(wù),也就是說允許單個(gè)程序創(chuàng)立多個(gè)并行執(zhí)行的線程來完成各自的任務(wù),也就是多進(jìn)程。多線程的應(yīng)用可以大大地提高CPU的利用率,在多線程程序中,一個(gè)線程必須等待的時(shí)候,CPU可以運(yùn)行其它的線程而不是等待。在即時(shí)通信系統(tǒng)開發(fā)中,主要用多線程來解決多用戶同時(shí)與效勞器進(jìn)行通信以及客戶端同時(shí)與其它多個(gè)客戶端通信的問題。其根本設(shè)計(jì)思路是:效勞器端啟動(dòng)后,進(jìn)入偵聽模式,如果有客戶端連接的信號(hào)收到,效勞器就自己新建一個(gè)Socket,然后新建一個(gè)線程用來和需要連接的客戶端通信,同時(shí),為了能夠使windows窗口響應(yīng),還要發(fā)送事件給父窗口,接著自己繼續(xù)偵聽。新建的線程執(zhí)行完畢,自動(dòng)關(guān)閉連接,釋放資源。這樣,就實(shí)現(xiàn)了Socket的連接和多線程通信。2.5JDBC技術(shù)本系統(tǒng)采用的是客戶/效勞器三層結(jié)構(gòu),即客戶端、效勞器以及數(shù)據(jù)庫。我們所用到的訪問數(shù)據(jù)庫的技術(shù)是JDBC。JDBC即活動(dòng)的數(shù)據(jù)對(duì)象,是Microsoft開發(fā)的用于訪問數(shù)據(jù)庫的。其顯著特點(diǎn)是快速、簡(jiǎn)單。JDBC(JavaDataBaseConnectivity,Java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為數(shù)據(jù)庫開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純JavaAPI編寫數(shù)據(jù)庫應(yīng)用程序。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個(gè)程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個(gè)程序,或?yàn)樵L問Informix數(shù)據(jù)庫又編寫另一個(gè)程序等等,程序員只需用JDBCAPI寫一個(gè)程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時(shí),將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺(tái)編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行,這也是Java語言“編寫一次,處處運(yùn)行〞的優(yōu)勢(shì)。 Java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接數(shù)據(jù)庫的標(biāo)準(zhǔn)方法。JDBC對(duì)Java程序員而言是API,對(duì)實(shí)現(xiàn)與數(shù)據(jù)庫連接的效勞提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫的連接提供了標(biāo)準(zhǔn)方法。JDBC使用已有的SQL標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫連接標(biāo)準(zhǔn)。JDBC實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡(jiǎn)單、嚴(yán)格類型定義且高性能實(shí)現(xiàn)的接口。Java具有鞏固、平安、易于使用、易于理解和可從網(wǎng)絡(luò)上自動(dòng)下載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是Java應(yīng)用程序與各種不同數(shù)據(jù)庫之間進(jìn)行對(duì)話的方法。而JDBC正是作為此種用途的機(jī)制。JDBC擴(kuò)展了Java的功能。Java和JDBC的結(jié)合使信息傳播變得容易和經(jīng)濟(jì)。企業(yè)可繼續(xù)使用它們安裝好的數(shù)據(jù)庫,并能便捷地存取信息,即使這些信息是儲(chǔ)存在不同數(shù)據(jù)庫管理系統(tǒng)上。新程序的開發(fā)期很短。安裝和版本控制將大為簡(jiǎn)化。程序員可只編寫一遍應(yīng)用程序或只更新一次,然后將它放到效勞器上,隨后任何人就都可得到最新版本的應(yīng)用程序[15]。簡(jiǎn)單地說,JDBC可做三件事:與數(shù)據(jù)庫建立連接、發(fā)送操作數(shù)據(jù)庫的語句并處理結(jié)果。2.6開發(fā)工具介紹在開發(fā)過程中主要用到Eclipse、MySQL數(shù)據(jù)庫和MicrosoftOfficeVisio等工具,下面對(duì)這些開發(fā)工具做一下詳細(xì)介紹。Eclipse簡(jiǎn)介Eclipse最初由OTI和IBM兩家公司的IDE產(chǎn)品開發(fā)組創(chuàng)立,起始于1999年4月。IBM提供了最初的Eclipse代碼根底。目前由IBM牽頭,圍繞著Eclipse工程已經(jīng)開展成為了一個(gè)龐大的Eclipse聯(lián)盟。Eclipse是一個(gè)開發(fā)源碼工程,它其實(shí)是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其開放源碼,任何人都可以免費(fèi)得到,并可以在此根底上開發(fā)各自的插件,因此越來越受人們關(guān)注[16]。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。Eclipse最初主要用來Java語言開發(fā),但是目前也可以作為其他計(jì)算機(jī)語言比方C++和Python的開發(fā)工具。雖然大多數(shù)用戶很樂于將Eclipse當(dāng)作IDE來使用,但Eclipse的目標(biāo)不僅限于此。Eclipse還包括插件開發(fā)環(huán)境,這個(gè)組件主要針對(duì)希望擴(kuò)展Eclipse的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣?xùn)|西都是插件,對(duì)于給Eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場(chǎng)所。Eclipse主要特點(diǎn):1.增加了WindowBuilder,一個(gè)流行的Eclipse開發(fā)GUI構(gòu)建器,用戶需要以安裝插件的形式獲得此功能。2.EclipseMarket,用戶可以在線獲取應(yīng)用市場(chǎng)上種類繁多的Eclipse插件(包括免費(fèi)的和收費(fèi)的),相比原來的Installnewsoftware(現(xiàn)在仍然存在并可用),更加直接和便捷。3.Xtext2.0使得它更容易創(chuàng)立領(lǐng)域特定語言。4.EGit1.0提供Git版本控制系統(tǒng)的緊密集成。5.更好地與Maven整合,包括啟動(dòng)Maven的構(gòu)建和維護(hù)pom文件。6.Jubula提供Java和HTML的自動(dòng)化GUI測(cè)試功能。MySQL簡(jiǎn)介MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQLAB公司。在2023年1月16號(hào)被Sun公司收購。而2023年,SUN又被Oracle收購。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi)。這樣就增加了速度并提高了靈活性。MySQL的SQL“結(jié)構(gòu)化查詢語言〞。SQL是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了GPL(GNU通用公共許可證)。由于其體積小、速度快、總體擁有本錢低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有本錢而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫[17]。MySQL數(shù)據(jù)庫還有以下特點(diǎn):1.使用C和C++編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性。2.支持Linux、MacOS、Solaris、Windows等多種操作系統(tǒng)。3.為多種編程語言提供了API。這些編程語言包括C、C++、Java、PHP等。4.支持多線程,充分利用CPU資源。5.優(yōu)化的SQL查詢算法,有效地提高查詢速度。6.既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端效勞器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。7.提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫連接途徑。8.提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具。9.可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。10.支持多種存儲(chǔ)引擎。Visio簡(jiǎn)介MicrosoftOfficeVisio是微軟公司出品的一款的軟件,它有助于IT和商務(wù)專業(yè)人員輕松地可視化、分析和交流復(fù)雜信息。它能夠?qū)㈦y以理解的復(fù)雜文本和表格轉(zhuǎn)換為一目了然的Visio圖。該軟件通過創(chuàng)立與數(shù)據(jù)相關(guān)的Visio圖來顯示數(shù)據(jù),這些圖易于刷新,并能夠顯著提高生產(chǎn)率。使用OfficeVisio中的各種圖表了解、操作和共享企業(yè)內(nèi)組織系統(tǒng)、資源和流程的有關(guān)信息[18]。雖然Visio是繪制流程圖使用率最高的軟件之一,但也有自己的一些缺乏。所以,結(jié)合實(shí)際情況選擇適宜的替代工具不失為一種明智的選擇。。2.7本章小結(jié)本章對(duì)系統(tǒng)所應(yīng)用的技術(shù)進(jìn)行描述,首先對(duì)系統(tǒng)所使用的模型進(jìn)行了描述,對(duì)兩種模型進(jìn)行了比照。接著對(duì)系統(tǒng)所使用的協(xié)議進(jìn)行描述,闡述了各自的優(yōu)缺點(diǎn)。接著對(duì)系統(tǒng)所用到的技術(shù)進(jìn)行描述。以便于查找相關(guān)資料,掌握相關(guān)技術(shù)。3對(duì)Socket通信需求分析根據(jù)前面所研究和分析的兩種通信模型及關(guān)鍵技術(shù),本章將這些技術(shù)同系統(tǒng)的需求聯(lián)系起來,提出了系統(tǒng)的總體結(jié)構(gòu)和工作流程。系統(tǒng)采用基于TCP/IP協(xié)議之上的C/S與P2P混合結(jié)構(gòu),即客戶端與效勞器之間的C/S通信結(jié)構(gòu)和客戶端之間的P2P通信結(jié)構(gòu)的結(jié)合。系統(tǒng)的工作流程分為效勞器端和客戶端工作流程。3.1即時(shí)通信系統(tǒng)總體需求即時(shí)通信系統(tǒng)主要用于實(shí)現(xiàn)政府機(jī)構(gòu)、企業(yè)單位、社區(qū)生活的網(wǎng)絡(luò)化,促使政府機(jī)構(gòu)、企業(yè)單位、社區(qū)信息文件即時(shí)發(fā)布和快速傳達(dá)。即時(shí)通信系統(tǒng)以“先進(jìn)合理的應(yīng)用理念〞、“高效率的通信效勞〞,為用戶提供了一套快捷的即時(shí)信息交流和辦公的平臺(tái),以增強(qiáng)企事業(yè)單位內(nèi)部的信息交流,解決其內(nèi)部信息公告、信息交流、文件傳送等問題,降低溝通本錢,提高單位的工作效率,為各企事業(yè)單位提供方便、快捷的即時(shí)通信效勞[19]。3.2系統(tǒng)功能描述本系統(tǒng)主要實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的私聊,多人群聊,發(fā)送網(wǎng)絡(luò)圖片,即時(shí)發(fā)送文件,歷史記錄的保存等功能。同時(shí)保證數(shù)據(jù)即時(shí)快速的傳遞。表3.1所示。表3.1系統(tǒng)功能表文本通信點(diǎn)對(duì)點(diǎn)會(huì)話通信,點(diǎn)對(duì)多點(diǎn)的消息和通知群發(fā),信息存儲(chǔ)等功能文件傳輸效勞器共享文件查詢,客戶端上傳文件,客戶端下載文件等歷史記錄保存對(duì)用戶的通話記錄進(jìn)行管理3.3系統(tǒng)協(xié)議的選定系統(tǒng)的傳輸協(xié)議可以采用TCP與UDP兩種協(xié)議。由于本設(shè)計(jì)中信息的交互在效勞器與客戶機(jī)、客戶機(jī)與客戶機(jī)之間進(jìn)行,對(duì)效勞器與客戶機(jī)的信息傳輸可靠性要求比擬高,因此通過TCP來實(shí)現(xiàn),而客戶機(jī)與客戶機(jī)之間要求信息傳輸效率高,通信協(xié)議就可采用UDP協(xié)議。在本系統(tǒng)的設(shè)計(jì)中,協(xié)議選擇既有TCP協(xié)議也有UDP協(xié)議,系統(tǒng)中的C/S模式采用TCP協(xié)議,P2P模式采用UDP協(xié)議。由于文件傳輸局部需要保證文件的準(zhǔn)確無誤的傳送,因此在客戶機(jī)與客戶機(jī)之間采用TCP協(xié)議來實(shí)現(xiàn)。3.4系統(tǒng)設(shè)計(jì)性能分析作為企(事)業(yè)單位內(nèi)部員工簡(jiǎn)便的辦公和溝通平臺(tái),企業(yè)即時(shí)通信系統(tǒng)需要保證數(shù)據(jù)通信的即時(shí)性以及通信過程和信息存儲(chǔ)的平安性[20],為企事業(yè)單位的使用者提供信息平安保障,同時(shí)減少系統(tǒng)資源的消耗,保證系統(tǒng)運(yùn)行的低故障率。這些都是一個(gè)有實(shí)用價(jià)值的軟件必須具備的性能,具體如以下四點(diǎn)所述:1.?dāng)?shù)據(jù)通信完整與可靠性:即時(shí)通信即用戶間能實(shí)時(shí)發(fā)送和接收各種信息,包括文本通信和文件傳輸,確保數(shù)據(jù)的可到達(dá)性、確保數(shù)據(jù)解讀的正確性,防止數(shù)據(jù)喪失或數(shù)據(jù)錯(cuò)位,從而保證消息傳送的可靠性。2.通信效率和公平性:這主要表達(dá)在效勞器端。效勞器需要同時(shí)處理所有用戶發(fā)送的各類信息,并且完成數(shù)據(jù)庫存儲(chǔ)、讀取、更新等操作;還需要采用適當(dāng)方法提高效勞器接收、解讀、處理和發(fā)送數(shù)據(jù)的效率,在指定時(shí)間內(nèi)完成需要的通信量,提高系統(tǒng)的即時(shí)通信性能,同時(shí)保證數(shù)據(jù)處理的公平性,保證各客戶端的信息能夠被及時(shí)響應(yīng)和處理。3.系統(tǒng)可控性:系統(tǒng)可控性是指系統(tǒng)運(yùn)行期間完成數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)庫備份、系統(tǒng)故障恢復(fù)等任務(wù)的性能,包括用戶注冊(cè)管理、登錄管理、客戶端運(yùn)行過程中監(jiān)控等模塊的設(shè)計(jì)。防止重要數(shù)據(jù)的喪失或被篡改,提高系統(tǒng)的運(yùn)行可靠性,增強(qiáng)系統(tǒng)使用者的信心。3.5本章小結(jié)本章主要對(duì)系統(tǒng)的總體設(shè)計(jì)及功能模塊進(jìn)行描述,首先對(duì)系統(tǒng)的總體需求進(jìn)行分析,然后介紹各功能模塊,最后對(duì)客戶端,和效勞器的工作流程進(jìn)行了描述,并畫出流程圖,為開發(fā)系統(tǒng)做好準(zhǔn)備。4實(shí)現(xiàn)Socket通信的方案和關(guān)鍵模塊的設(shè)計(jì)4.1系統(tǒng)總體結(jié)構(gòu)的描述即時(shí)通信系統(tǒng)是在某一個(gè)或假設(shè)干個(gè)企事業(yè)單位內(nèi)部使用的即時(shí)溝通和辦公通信的工具和平臺(tái),具有即時(shí)通信、用戶群特定等特點(diǎn)。本系統(tǒng)采用的是三層式的C/S構(gòu)架來保證網(wǎng)絡(luò)通信的機(jī)制:客戶端、效勞器端,效勞數(shù)據(jù)庫??蛻舳死肨CP通信協(xié)議,并通過基于UDP通信協(xié)議的P2P技術(shù)與其他客戶端進(jìn)行交流;效勞器處理客戶端發(fā)送來的信息,并利用TCP通信協(xié)議將信息反應(yīng)回客戶端以及保存用戶的在線與離線狀態(tài);效勞數(shù)據(jù)庫主要負(fù)責(zé)用戶注冊(cè)信息保存,用戶聊天記錄的保存。其系統(tǒng)總體框架如圖4.1所示。數(shù)據(jù)庫服數(shù)據(jù)庫服務(wù)器JDBCC/S(TCP) C/S(TCP)客戶端客戶端C/S(TCP)客戶端客戶端 P2P(UDP) P2P(UDP) 客戶端客戶端 P2P(UDP)圖4.1即時(shí)通信系統(tǒng)框架圖基于Socket的局域網(wǎng)即時(shí)通信系統(tǒng)系統(tǒng)構(gòu)架如圖4.2、圖4.3所示。點(diǎn)對(duì)點(diǎn)私聊點(diǎn)對(duì)點(diǎn)私聊多人群聊多人群聊效勞器用戶效勞器用戶文件傳輸文件傳輸歷史記錄保存歷史記錄保存圖4.2即時(shí)通信系統(tǒng)框架圖(C/S)文字通信文字通信用戶用戶用戶用戶文字傳輸文字傳輸圖4.3即時(shí)通信系統(tǒng)框架圖(P2P)系統(tǒng)功能模塊設(shè)計(jì)根據(jù)企業(yè)內(nèi)部溝通的需要,以及從實(shí)際出發(fā),系統(tǒng)功能模塊圖如圖4.4所示:1.效勞器功能(1)部門和用戶管理功能模塊在企業(yè)內(nèi)部溝通中必須得了解企業(yè)內(nèi)部的組織架構(gòu),這個(gè)模塊就是系統(tǒng)管理員在按照企業(yè)實(shí)際組織結(jié)構(gòu),創(chuàng)立了各級(jí)部門并輸入部門信息,然后根據(jù)部門再創(chuàng)立用戶信息,用戶不需要自由的添加,最終完成企業(yè)組織的搭建;(2)用戶登錄處理模塊此模塊主要是進(jìn)行登錄驗(yàn)證,如果驗(yàn)證通過,效勞器會(huì)將數(shù)據(jù)庫中的用戶狀態(tài)改為在線,并通知其他在線用戶;(3)用戶狀態(tài)通知模塊用戶進(jìn)行狀態(tài)檢測(cè),好友在線,在好友列表中顯示,如果好友不在列表中,即時(shí)通信功能模塊即時(shí)通信功能模塊客戶端客戶端效勞器效勞器用戶下線模塊歷史記錄查詢模塊文本通信模塊文本通信模塊用戶登錄與注冊(cè)模塊用戶下線模塊歷史記錄查詢模塊文本通信模塊文本通信模塊用戶登錄與注冊(cè)模塊用戶文件轉(zhuǎn)模塊發(fā)用戶下線處理模塊用戶消息轉(zhuǎn)發(fā)模塊用戶狀態(tài)通知模塊用戶登錄管理模塊部門用戶管理模塊用戶文件轉(zhuǎn)模塊發(fā)用戶下線處理模塊用戶消息轉(zhuǎn)發(fā)模塊用戶狀態(tài)通知模塊用戶登錄管理模塊部門用戶管理模塊圖圖4.4系統(tǒng)功能模塊圖用戶狀態(tài)為離線;(4)用戶消息、文件轉(zhuǎn)發(fā)用于發(fā)給離線用戶的消息或文件;(5)用戶下線處理模塊用戶下線,斷開連接,修改數(shù)據(jù)庫中的用戶狀態(tài)并通知其他用戶;2.客戶端功能客戶端提供用戶友好操作界面,負(fù)責(zé)發(fā)出請(qǐng)求和接收結(jié)果,主要功能有用戶登錄、文字通信、文件傳輸、歷史記錄保存、好友管理等,通過底層協(xié)議傳輸數(shù)據(jù),并在協(xié)議解析模塊解析信息。4.2效勞器端工作流程效勞器運(yùn)行后,開啟效勞,那么效勞器開始偵聽用戶請(qǐng)求,如有信息發(fā)送過來,效勞器首先發(fā)送回確認(rèn)信息,然后,建立一個(gè)線程,處理接收到的數(shù)據(jù)。在線程里,按照接收到數(shù)據(jù)的類別(用特殊字符來區(qū)分),進(jìn)行相應(yīng)的處理,如有需要,會(huì)向用戶發(fā)送處理的結(jié)果,處理結(jié)束后,線程就結(jié)束了。這樣,可以實(shí)時(shí)接收每個(gè)用戶的請(qǐng)求,不會(huì)因?yàn)樘幚硪粋€(gè)用戶的請(qǐng)求,而忽略了其它用戶。效勞器端即時(shí)通信工作流程如圖4.5所示。開始開始啟動(dòng)效勞啟動(dòng)效勞監(jiān)聽客戶端連接監(jiān)聽客戶端連接返回返回 N 用戶連接請(qǐng)求用戶連接請(qǐng)求 N 登錄成功登錄成功用戶登錄Y用戶登錄 Y 建立合法連接,顯示用戶上線通知建立合法連接,顯示用戶上線通知響應(yīng)用戶發(fā)出的請(qǐng)求響應(yīng)用戶發(fā)出的請(qǐng)求對(duì)方上線 Y 對(duì)方上線文本通信保存到本地連接 N文本通信保存到本地連接 Y建立連接文本傳輸 N 建立連接文本傳輸 Y轉(zhuǎn)發(fā)給對(duì)方轉(zhuǎn)發(fā)給對(duì)方完成文件傳輸用戶退出N完成文件傳輸用戶退出 N保存文件用戶下線通知Y保存文件用戶下線通知退出退出圖4.5效勞器端工作流程客戶端工作流程客戶端即時(shí)通信流程如圖4.6所示。開始開始顯示登錄界面顯示登錄界面 N 驗(yàn)證成功建立連接驗(yàn)證成功建立連接結(jié)束結(jié)束 Y顯示主界面顯示主界面文件傳輸添加刪除好友文件傳輸文件傳輸添加刪除好友文件傳輸向效勞器發(fā)送請(qǐng)求向效勞器發(fā)送請(qǐng)求效勞器接受請(qǐng)求并處理效勞器接受請(qǐng)求并處理實(shí)現(xiàn)用戶請(qǐng)求實(shí)現(xiàn)用戶請(qǐng)求客戶端客戶端退出 N Y結(jié)束結(jié)束圖4.6客戶端通信流程圖客戶端的即時(shí)通信工作流程可作如下描述:1.啟動(dòng)客戶端,首先進(jìn)行注冊(cè),注冊(cè)成功2.顯示登錄主界面,輸入賬號(hào)和密碼,用戶開始登錄;3.客戶端開始在線偵聽,用戶可以在主界面進(jìn)行某種操作;4.用戶可以發(fā)送各種聊天信息,文件傳輸請(qǐng)求等應(yīng)用請(qǐng)求;5.請(qǐng)求發(fā)出后自動(dòng)等待效勞器返回的數(shù)據(jù),解讀該數(shù)據(jù)并判定請(qǐng)求的結(jié)果;6.執(zhí)行結(jié)果,并保存處理信息至本地鏈接(假設(shè)干文件組成);7.在客戶端退出前循環(huán)執(zhí)行用戶的各種操作,并發(fā)送各種請(qǐng)求;8.客戶端退出那么斷開該連接。4.3總體實(shí)現(xiàn)方案和類的設(shè)計(jì)1.系統(tǒng)總體實(shí)現(xiàn)方案系統(tǒng)將采用C/S方式設(shè)計(jì),效勞器主要為客戶端效勞,通過響應(yīng)客戶端的請(qǐng)求訪問數(shù)據(jù)庫,給用戶提供相應(yīng)的信息,效勞器數(shù)據(jù)庫使用MySql做數(shù)據(jù)庫管理系統(tǒng)。信息交流的絕大局部功能都在系統(tǒng)的客戶端完成??蛻舳酥饕δ芏际腔赑2P技術(shù)的,因此客戶端功能的實(shí)現(xiàn)主要就是如何建立P2P的連接,建立連接后就能輕松完成包括發(fā)送消息,文本交談,發(fā)送文件等功能。2.系統(tǒng)通信核心類類用于描述一組具有相同屬性、操作、關(guān)系和語義的對(duì)象[20]。其中主要包括消息類和類圖,基nnectio類ConThread,另外還有其它的10幾個(gè)類,分別用于各種類型的操作。(1)ConnectionThread該類是客戶端發(fā)送給效勞器消息,接收效勞器消息的類,也是客戶端眾多線程中的主線程(2)RegisterInfo和RegisterFrameRegisterFrame類用來生成注冊(cè)頁面,完成注冊(cè)界面相應(yīng)的布局,RegisterInfo類用來生成填寫注冊(cè)信息界面,驗(yàn)證注冊(cè)信息格式是否正確,如果不正確給出相應(yīng)的提示信息(3)ChatF和ChatF1ChatF1類主要實(shí)現(xiàn)客戶端與客戶端點(diǎn)對(duì)點(diǎn)的私聊,實(shí)現(xiàn)文件傳輸,發(fā)送消息主要用函數(shù)sendMessage(),文件傳輸主要在actionPerformed()中實(shí)現(xiàn),ChatF類主要實(shí)現(xiàn)多人群聊發(fā)送消息也是用函數(shù)sendMessage()來實(shí)現(xiàn)(4)History該類主要用于歷史記錄讀取,關(guān)閉聊天窗口,如果歷史記錄為空給出提示信息(5)ListF主要用于生成在線好友列表(6)FindFriendFrame該類主要用于根據(jù)qq號(hào)查找好友,然后添加好友,實(shí)現(xiàn)通信(7)Dao該類用于實(shí)現(xiàn)效勞器與數(shù)據(jù)庫的連接,處理數(shù)據(jù)(8)Server該類是效勞器實(shí)現(xiàn)通信,與客戶端進(jìn)行交互的類,用于接收客戶端的各種操作請(qǐng)求,處理相應(yīng)的請(qǐng)求(每個(gè)請(qǐng)求由特殊字符來區(qū)分),響應(yīng)請(qǐng)求,實(shí)現(xiàn)客戶端與客戶端,客戶端與效勞器實(shí)現(xiàn)通信。4.4關(guān)鍵模塊詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)主要對(duì)各個(gè)功能模塊實(shí)現(xiàn)做具體的描述,加深對(duì)系統(tǒng)的認(rèn)識(shí)。4.4.1利用Socket進(jìn)行TCP連接Socket進(jìn)行TCP網(wǎng)絡(luò)連接,是一種客戶/效勞器的連接類型,利用Socket的API進(jìn)行連接的程序時(shí)序圖如圖4.7所示。TCP客戶端TCP效勞端TCP客戶端TCP效勞端Socket〔〕Socket〔〕Bind〔〕Bind〔〕Socket〔〕Listen〔〕Socket〔〕Listen〔〕Accept〔〕Accept〔〕等待客戶請(qǐng)求Connect〔〕等待客戶請(qǐng)求Connect〔〕Send〔〕Recv〔〕Send〔〕Recv〔〕Recv〔〕Send〔〕Recv〔〕Send〔〕CloseSocket〔〕CloseSocket〔〕CloseSocket〔〕CloseSocket〔〕圖4.7Socket的TCP連接時(shí)序圖1.流式套接字流式套接字可以將數(shù)據(jù)按順序無重復(fù)地發(fā)送到目的地,它提供的是一種可靠的面向連接的數(shù)據(jù)傳輸方式。不管是對(duì)單個(gè)的數(shù)據(jù)報(bào),還是對(duì)數(shù)據(jù)包,流式套接字都提供了一種流式數(shù)據(jù)傳輸,是TCP傳輸協(xié)議的接口[12]。當(dāng)用戶想發(fā)送大批量數(shù)據(jù)或想讓發(fā)送的數(shù)據(jù)按順序無重復(fù)地到達(dá)目的地時(shí),使用流式套接字是最方便的。此外,在數(shù)據(jù)傳輸時(shí),如果連接斷開,應(yīng)用程序會(huì)被通知的。由于流式套接字用的是面向連接的協(xié)議,所以必須首先建立連接然后才能從數(shù)據(jù)流中讀出數(shù)據(jù),而不是從一個(gè)數(shù)據(jù)報(bào)或一個(gè)記錄讀出數(shù)據(jù)。流式套接字的效勞進(jìn)程和客戶進(jìn)程在通信前必須創(chuàng)立各自的套接字并建立連接,然后才能對(duì)相應(yīng)的套接字進(jìn)行“讀〞、“寫〞操作,實(shí)現(xiàn)數(shù)據(jù)傳輸。使用流式套接字時(shí),用戶在發(fā)送、接收數(shù)據(jù)之前同樣必須首先建立連接,然后才能傳輸數(shù)據(jù),流式套接字編程模型的工作流程如圖4.7所示。首先,效勞器要?jiǎng)?chuàng)立一個(gè)用于監(jiān)聽的套接字,把它綁定到眾所周知的效勞器端口上,然后調(diào)用listen函數(shù)使它處于監(jiān)聽狀態(tài);客戶機(jī)在創(chuàng)立套接字后,即可調(diào)用connect函數(shù),請(qǐng)求與效勞器套接字連接;效勞器套接字在收到客戶機(jī)的連接請(qǐng)求后,調(diào)用accept函數(shù)來接收客戶機(jī)的連接請(qǐng)求,并創(chuàng)立另一個(gè)用于通信的套接字。用此套接字和客戶機(jī)上的套接字形成網(wǎng)絡(luò)通信管道的兩個(gè)端點(diǎn),然后就可以在效勞器和客戶機(jī)之間進(jìn)行數(shù)據(jù)傳輸了。效勞器上的監(jiān)聽套接字仍處于監(jiān)聽的狀態(tài),隨時(shí)準(zhǔn)備接受其他客戶機(jī)的連接請(qǐng)求。傳輸結(jié)束后,客戶機(jī)調(diào)用closeSocket函數(shù)關(guān)閉套接字,效勞器也調(diào)用該函數(shù)關(guān)閉用于監(jiān)聽和通信的套接字,釋放資源。2.?dāng)?shù)據(jù)報(bào)套接字?jǐn)?shù)據(jù)報(bào)套接字節(jié)提供了不可靠的、無連接的數(shù)據(jù)包通信方式。數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證報(bào)文的可靠、無過失。實(shí)際使用中,數(shù)據(jù)報(bào)套接字一般用于一些輕負(fù)載的局域網(wǎng)上的計(jì)算機(jī)之間的通信,同一個(gè)分組數(shù)據(jù)報(bào)可能不止一次地被發(fā)送,一般要等到接收方發(fā)回確認(rèn)收到的消息才停止發(fā)送。對(duì)于在TCP/IP上實(shí)現(xiàn)的Socket,數(shù)據(jù)報(bào)套接字節(jié)使用UDP協(xié)議[9]。無連接的效勞器一般都是面向事務(wù)處理的,大多數(shù)的數(shù)據(jù)報(bào)套接字應(yīng)用程序?qū)⑹褂靡粋€(gè)事件序列來完成客戶應(yīng)用程序和效勞器應(yīng)用程序之間的通信,其編程過程相對(duì)流式套接字要簡(jiǎn)單些如圖4.8所示。對(duì)于接收端(一般為效勞器端),先用Socket函數(shù)建立套接字,在通過bind函數(shù)把這個(gè)套接字和準(zhǔn)備接收數(shù)據(jù)的IP地址信息綁定在一起,這和前面流套接字一樣,但不同的是它不必調(diào)用listen和accept,只需要等待接收數(shù)據(jù)。并且由于它是無連接的,因此可以接收網(wǎng)絡(luò)上任何一臺(tái)機(jī)器所發(fā)的數(shù)據(jù)包。圖4.8、圖4.9別為流式套接字和數(shù)據(jù)報(bào)套接字應(yīng)用程序時(shí)序圖。Socket〔〕Socket〔〕Socket〔〕Socket〔〕Bind〔〕Bind〔〕Rendform()〔〕Rendform()〔〕Bind〔〕Bind〔〕等待客戶請(qǐng)求等待客戶請(qǐng)求效勞請(qǐng)求Send〔〕處理請(qǐng)求Send〔〕處理請(qǐng)求效勞響應(yīng)Rendform()Send〔〕Rendform()Send〔〕Close〔〕Close()Close〔〕Close()圖4.8流式套接字圖Socket〔〕Socket〔〕Bind〔〕Bind〔〕Listen〔〕Listen〔〕Socket〔〕Socket〔〕Accept〔〕Accept〔〕Connect〔〕建立連接Connect〔〕等待客戶請(qǐng)求等待客戶請(qǐng)求Rend〔〕請(qǐng)求數(shù)據(jù)Write〔〕Rend〔〕Write〔〕應(yīng)答數(shù)據(jù)Write〔〕Read〔〕Write〔〕Read〔〕Close〔〕Close〔〕Close〔〕Close〔〕圖4.9數(shù)據(jù)報(bào)套接字圖面向連接的Socket機(jī)制的模塊設(shè)計(jì)圖4.10是一個(gè)典型的面向連接的Socket通信機(jī)制的示意圖。它首先由效勞器建立Socket并將該Socket聯(lián)編到某個(gè)端口上,并進(jìn)入監(jiān)聽狀態(tài),同時(shí)監(jiān)聽是否有與自己端口相對(duì)應(yīng)的連接請(qǐng)求。連接是由客戶發(fā)出的,客戶方在建立自己的Socket后,向效勞器發(fā)出連接請(qǐng)求,效勞器在檢測(cè)到連接后接受,這樣就建立了一個(gè)完整的Socket連接。從圖4.10可以看出,效勞器方必須首先啟動(dòng),然后守候在某一個(gè)端口上監(jiān)聽客戶方的連接請(qǐng)求,一旦連接建立,就可以像普通流機(jī)制那樣進(jìn)行讀/寫,只需調(diào)用close〔〕即可結(jié)束Socket連接。通過該方式建立起來的C/S程序即可實(shí)現(xiàn)一臺(tái)效勞器端和一臺(tái)客戶端的通信。效勞器端聯(lián)編到某一個(gè)端口聯(lián)編到某一個(gè)端口調(diào)用bind創(chuàng)立效勞器端Sock〔〕創(chuàng)立效勞器端Sock〔〕客戶端創(chuàng)立服客戶端Socket〔〕監(jiān)聽來自客戶端的連接請(qǐng)求,調(diào)用listen創(chuàng)立服客戶端Socket〔〕監(jiān)聽來自客戶端的連接請(qǐng)求,調(diào)用listen向效勞器端發(fā)送連接請(qǐng)求調(diào)用connect〔〕阻塞,等待客戶端連接請(qǐng)求調(diào)用accept〔〕向效勞器端發(fā)送連接請(qǐng)求調(diào)用connect〔〕阻塞,等待客戶端連接請(qǐng)求調(diào)用accept〔〕 效勞請(qǐng)求接受來自于客戶的請(qǐng)求數(shù)據(jù),調(diào)用read〔〕發(fā)送請(qǐng)求數(shù)據(jù)調(diào)用接受來自于客戶的請(qǐng)求數(shù)據(jù),調(diào)用read〔〕發(fā)送請(qǐng)求數(shù)據(jù)調(diào)用write〔〕數(shù)據(jù)請(qǐng)求數(shù)據(jù)數(shù)據(jù)請(qǐng)求數(shù)據(jù)接受響應(yīng)數(shù)據(jù)返回相應(yīng)的數(shù)據(jù)調(diào)用write〔〕接受響應(yīng)數(shù)據(jù)返回相應(yīng)的數(shù)據(jù)調(diào)用write〔〕圖4-1基于連接的效勞端、客戶端流程圖圖4.104.5文件傳輸模塊1.文件傳輸?shù)膶?shí)現(xiàn)文件傳輸是通過使用多線程、套接字、自定義的傳輸命令等技巧,實(shí)現(xiàn)了多個(gè)用戶之間文件傳輸,并可以在傳輸過程中進(jìn)行簡(jiǎn)單交互的功能。文件傳輸除了能實(shí)現(xiàn)文件的接收與發(fā)送的根本功能外,還需要考慮以下方面:(1)文件在傳輸過程中應(yīng)不影響用戶界面的操作;(2)在傳輸文件前,發(fā)送方應(yīng)先發(fā)送請(qǐng)求,接收方可以同意或拒絕文件發(fā)送,接收方同意后才能進(jìn)行文件傳輸;(3)在文件在傳輸過程中,可以顯示文件的信息,如文件名、保存路徑、文件大??;(4)文件在傳輸過程中接收方和發(fā)送方都可以取消該文件傳輸過程;(5)一個(gè)用戶可以同時(shí)和多個(gè)用戶進(jìn)行文件傳輸,而且每?jī)蓚€(gè)用戶之間,可以同時(shí)接收或發(fā)送多個(gè)文件,接收和發(fā)送可以同時(shí)進(jìn)行。本系統(tǒng)文件傳輸?shù)膶?shí)現(xiàn)主要由ClientTest、ClientSocket、Jprocess和ServerTest類實(shí)現(xiàn)。其中ServerTest類主要用于發(fā)送文件,ClientTest類用于計(jì)算文件的長(zhǎng)度、接收文件,Jprocess類用于生成文件發(fā)送的進(jìn)度條,文件傳輸功能實(shí)現(xiàn)如圖4.11所示。圖4.11文件傳輸功能實(shí)現(xiàn)圖2.文件傳輸?shù)膱?zhí)行流程首先是文件發(fā)送端與接收端啟用發(fā)送線程與監(jiān)聽線程,發(fā)送端向接收端提出連接請(qǐng)求,接收端收到請(qǐng)求后啟用接收線程,接收端在收到文件屬性后,發(fā)送同意接收消息,雙方就可以開始發(fā)送與接收文件,直到發(fā)送完畢。4.5本章小結(jié)本章首先進(jìn)行了對(duì)系統(tǒng)的總體實(shí)現(xiàn)方案和類的設(shè)計(jì)進(jìn)行了研究,研究了它所用到的協(xié)議,其次說明了各類的功能,再說明了系統(tǒng)如何實(shí)現(xiàn)各個(gè)功能,最后概述了系統(tǒng)的詳細(xì)設(shè)計(jì)和具體實(shí)現(xiàn)方法,畫出了各局部的圖示。5對(duì)程序進(jìn)行調(diào)試與測(cè)試,并對(duì)結(jié)果進(jìn)行分析5.1Socket通信的應(yīng)用結(jié)合上面的Socket通信的根本原理,下面用java實(shí)現(xiàn)了流式Socket通信多用戶聊天系統(tǒng).從總體來看,這是一個(gè)支持多Client的Socket通信的聊天系統(tǒng),根據(jù)設(shè)計(jì)過程中效勞器和客戶連接的方式,有兩種解決的方案;方案一:在一臺(tái)計(jì)算機(jī)上啟動(dòng)多個(gè)效勞器程序,而指定效勞器監(jiān)聽端口號(hào)不同,一個(gè)效勞器對(duì)應(yīng)一個(gè)客戶機(jī)。方案二:將效勞器寫成多線程的,不同的處理線程為不同的客戶效勞.主線程只負(fù)責(zé)循環(huán)等待,處理線程負(fù)責(zé)網(wǎng)絡(luò)連接,接收客戶輸入的信息??紤]到第一種方案,如果要啟動(dòng)多個(gè)客戶的話,要占用的監(jiān)聽端口號(hào)多,通信比第二種方案更不方便,所以下面我是采用第二種方案來實(shí)現(xiàn)的。5.2聊天效勞器端聊天效勞端的主要任務(wù)有兩個(gè):一是監(jiān)聽某端口,建立與客戶的Socket連接,處理一個(gè)客戶的連接后,能很快再進(jìn)入監(jiān)聽狀態(tài);二是處理與客戶的通信,由于聊天是客戶之間進(jìn)行,所以效勞器的職責(zé)是將客戶發(fā)送的消息轉(zhuǎn)發(fā)給其他客戶。為了實(shí)現(xiàn)兩個(gè)目標(biāo),必須設(shè)法將任務(wù)分開,可以借助多線程技術(shù),在效勞方為每個(gè)客戶連接建立一個(gè)通信線程,通信線程負(fù)責(zé)接受客戶的消息并將消息轉(zhuǎn)發(fā)給其他客戶。這樣主程序的任務(wù)就簡(jiǎn)單化,循環(huán)監(jiān)聽客戶連接,每個(gè)客戶連接成功后,創(chuàng)立一個(gè)通信線程,并將與Socket對(duì)應(yīng)的輸入輸出流傳給該線程。程序代碼如下:public〔lasstalkserver{publicstaticClient]allclient=nc}vClient[20};//存放所有通信線程publicstaticintclientnum=0;//連接客戶數(shù)publicstaticvoidmain(Stringargs}]){try{ServerSockets=nrwServerSocket(8000);//建立監(jiān)聽效勞while(true){Sockets1=s.accept();//等待客戶連接DataOutputStream<los=nc}vDataOutputStream(s1.get0utputStream());DatalnputStreamdin=newDatalnputStream(s1.getInputStream());allclient}〔lientnum}=nc}vClient(dientnum,dos,din);allclient}clientnum}.start();//創(chuàng)立與客戶對(duì)應(yīng)的通信線〔lientnum++;}}〔atch(IOExceptione){}}}〔lassClientextendsThread{intid;//客戶標(biāo)識(shí)DataOutputStream<los;//去往客戶的輸出流DatalnputStreamdin;//來自客戶的輸入流publicClient(inti<1,DataOutputStream<los,DatalnputStreamdin){this.i<1=i<1;this.<los=<los;this.<lin=<lin;}publicvoidrun(){while(true)//循環(huán)讀取客戶數(shù)據(jù)轉(zhuǎn)發(fā)給其他客戶(try(intm=talks。二.clientnum;//客戶數(shù)Stringmessage=“第〞+(id+1)+“個(gè)客戶發(fā)言:〞+din.readUTF();//讀客戶數(shù)據(jù),無數(shù)據(jù)時(shí)線程掛起。for(inti=0;i<m;i++){talks。二.alldient}i}.<los.writeUTF(metesage);//轉(zhuǎn)發(fā)給其他戶}}〔atch(IOExceptione){}}}}每個(gè)通信線程均在循環(huán)檢測(cè)是否本線程對(duì)應(yīng)的客戶有數(shù)據(jù)發(fā)送過來,一旦接收到數(shù)據(jù)就通過循環(huán)將數(shù)據(jù)發(fā)送到所有客戶(包括自己)的Socket通道。5.3聊天客戶端客戶端的職責(zé)也有兩個(gè):一是能提供一個(gè)圖形界面實(shí)現(xiàn)聊天信息的輸入和顯示,其中包括處理用戶輸入事件;二是要隨時(shí)接收來自其他客戶的信息并顯示出來.因此,在客戶端也采用多線程實(shí)現(xiàn),應(yīng)用程序主線程負(fù)責(zé)圖形界面的輸入處理,而接收消息線程負(fù)責(zé)讀取其它客戶發(fā)來的數(shù)據(jù)。每個(gè)用戶首先向效勞器請(qǐng)求連接后,才能與其他客戶進(jìn)行連接.所以對(duì)應(yīng)效勞器端端口等待連接,在客戶端要請(qǐng)求效勞器連接,也即先實(shí)例化Socket類,傳入主機(jī)的ip地址和效勞器端口號(hào)。Sockets1=newSocket(“LBG",8000);主機(jī)接收到請(qǐng)求后,建立連接,效勞端產(chǎn)生一個(gè)Socket實(shí)例,同該客戶端建立通信,效勞器端和客戶端同時(shí)翻開輸入和輸出流進(jìn)行數(shù)據(jù)的傳輸。DataInputStre}n<lis=newDataInputStre}n(s1.gelInputStream());finalDataOutputStrearn<los=newDataOutputStrearn(s1.get0utputStream());當(dāng)客戶要發(fā)送數(shù)據(jù)的時(shí)候,先將數(shù)據(jù)發(fā)送到效勞器,然后由效勞器轉(zhuǎn)發(fā)給其他正在檢測(cè)的用戶,下面代碼就是主要負(fù)責(zé)向其他客戶發(fā)送數(shù)據(jù)。publicvoidactionPerformed(ActionEvente){try{<los.writeUTF(""+input.getText());//發(fā)送數(shù)據(jù)}〔itch(IOExceptionz){}}});客戶端必須時(shí)刻檢測(cè)效勞器端有無數(shù)據(jù)數(shù)據(jù)發(fā)出,如果檢測(cè)到其他客戶發(fā)送了消息后,接收消息線程讀取網(wǎng)絡(luò)消息,顯示在聊天界面中。try{Stringstr=newString(dis.readUTF());//讀取其他客戶經(jīng)效勞器轉(zhuǎn)發(fā)的消息<Iisplayarea.append(str+"/n");//將消息添加到文本域顯示}〔atch(IOExceptione){}5.4聊天系統(tǒng)的運(yùn)行界面圖5.1是聊天系統(tǒng)的運(yùn)行界面,其中第一個(gè)是效勞器,其他是三個(gè)不同的客戶。圖5.1系統(tǒng)運(yùn)行界面5.5本章小結(jié)這是一個(gè)流式Socket通信的應(yīng)用,實(shí)現(xiàn)了網(wǎng)上多用戶聊天,在系統(tǒng)中還有許多方面值得改良,例如:如何修改效勞方,使用戶自己發(fā)送的消息不顯示在自己的文本域中;增加一個(gè)用戶名輸入界面,用戶輸入身份后再進(jìn)入聊天界面;在客戶方顯示用戶列表,可以選擇將信息發(fā)送給哪些用戶.這些方面得到改良后就可以極大地提高其應(yīng)用價(jià)值。結(jié)論本文主要研究和實(shí)現(xiàn)了一種符合當(dāng)前學(xué)校實(shí)際應(yīng)用需求的即時(shí)通信系統(tǒng)。課題研究了兩層C/S模型和P2P模型混合設(shè)計(jì)的模式,不同類型的效勞采用不同的通信模型,有效減輕效勞器負(fù)擔(dān),提高了網(wǎng)絡(luò)利用率。該系統(tǒng)按照面向?qū)ο蠓椒ㄔO(shè)計(jì)并封裝了大量的類,并且大量采用了多線程技術(shù),這些方法和技術(shù)有效增強(qiáng)了效勞器的并發(fā)處理能力,同時(shí)也有利于系統(tǒng)開發(fā)與維護(hù)工作的開展。具體工作如下1.研究了即時(shí)通信技術(shù)的開展歷程,以及主流即時(shí)通信系統(tǒng)采用的通信模式和通信協(xié)議;目前主要的即時(shí)通信模式包括P2P和C/S模式,主要的即時(shí)通信通用協(xié)議包括了基于TCP協(xié)議和基于UDP協(xié)議及各大廠商各自定義私有協(xié)議;分析了主流信息系統(tǒng)在應(yīng)用環(huán)境中存在的缺乏。2.分析了一個(gè)P2P和C/S相結(jié)合的混合通信模型。使用TCP協(xié)議與UDP協(xié)議分別實(shí)現(xiàn)了客戶機(jī)與效勞器之問的C/S通信模型以及客戶機(jī)與客戶機(jī)之間的P2P通信模型,有效減輕了效勞器的負(fù)擔(dān)。3.設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)即時(shí)通信系統(tǒng),包括了即時(shí)通信效勞端和即時(shí)通信客戶端;即時(shí)通信效勞器主要實(shí)現(xiàn)部門與用戶信息管理、接收客戶端登錄、下線、離線的文本信息、向客戶端發(fā)送狀態(tài)通知、離線的文本信息等功能;即時(shí)通信客戶端主要實(shí)現(xiàn)登錄效勞器、文本、文件通信等功能。4.通過測(cè)試環(huán)境和實(shí)際網(wǎng)絡(luò)環(huán)境,對(duì)即時(shí)通信系統(tǒng)進(jìn)行了功能測(cè)試,驗(yàn)證了即時(shí)通信系統(tǒng)的有效性、高效性。參考文獻(xiàn)[1]佘其炯.?dāng)?shù)字通信世界.即時(shí)通信系統(tǒng)的現(xiàn)狀與開展趨勢(shì)[J],2007,06:41-43[2]姚翌.騰訊通RTX3.3發(fā)布企業(yè)互聯(lián)與集成技術(shù)世界領(lǐng)先[J].計(jì)算機(jī)與網(wǎng)絡(luò)2004,07(30):15-16[3]李遠(yuǎn)杰等.主流即時(shí)通軟件通信協(xié)議分析術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2005,07(15):4-6[4]王宇,盧昱.計(jì)算機(jī)工程.信息網(wǎng)絡(luò)的通信平安控制[J],2006(32卷、12期):173-175[5]康曉寧.讓溝通隨時(shí)進(jìn)行——中建國際企業(yè)即時(shí)通信應(yīng)用實(shí)例[J].微電腦世界,2004,04:14-16[6]王珊,薩師煊的數(shù)據(jù)庫系統(tǒng)概論〔第四版〕[M].北京高等教育出版社,2007[7]嚴(yán)俊海.java程序設(shè)計(jì)教程.清華大學(xué)出版社,2007[8](美)DouglasE.Comer,DavidL.Stevens著.TCP/IP網(wǎng)絡(luò)互聯(lián)技術(shù)卷3,客戶.效勞器編程與應(yīng)用(Windows套接字版)[M].北京:清華大學(xué)出版社,2004,6:1.300[9]何進(jìn),謝松巍.基于Socket的TCP/IP網(wǎng)絡(luò)通訊模式研究[J].計(jì)算機(jī)應(yīng)用研究;2001年08期[10]張海藩.軟件工程導(dǎo)論[M].北京清華大學(xué)出版社,2023[11]周坤,傅德勝.計(jì)算機(jī)工程與設(shè)計(jì).基于WindowsSocket的網(wǎng)絡(luò)數(shù)據(jù)傳輸及其平安[J],2007(28):5381-5388[12]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第五版)[M].北京電子工業(yè)出版社,2023.184-188[13]耿祥議,張躍平.Java2實(shí)用教程[M].清華大學(xué)出版社,2023,10:226-411[14]戴大蒙.基于非阻塞式Winsock的多線程網(wǎng)絡(luò)通信機(jī)制[J].計(jì)算機(jī)工程,2006,6:25-27[15]JDBC-百度百科.://baike.baidu/view/2737974.htm.2011-8-15[16]Eclipse-百度百科.://baike.baidu/view/23576.htm.2011-10-26[17]MySQl-百度百科.://baike.baidu/view/24816.htm.2011-8-15[18]Visio-百度百科.://baike.baidu/view/18289.htm.2011-10-18[19]康曉寧.讓溝通隨時(shí)進(jìn)行——中建國際企業(yè)即時(shí)通信應(yīng)用實(shí)例[J].微電腦世界,2004,(4):14-16[20]聶元銘,丘平編著.網(wǎng)絡(luò)信息平安技術(shù)[M].北京:科學(xué)出版社,2001,〔02〕:1-200[21][美]沙赫(SchachS.R.)著.面向?qū)ο笈c經(jīng)典軟件工程[M].北京:機(jī)械工業(yè)出版社,2002,10:1-103[22]胡荷芬,張帆,高斐.UML系統(tǒng)建模根底教程.清華大學(xué)出版社,2023,(05)致謝感謝沈陽理工大學(xué)對(duì)我?guī)啄甑呐囵B(yǎng)!本課題在論文的寫作過程中,得到了教授的悉心指導(dǎo)。屢次詢問開發(fā)進(jìn)程,幫助我開拓開發(fā)思路,并給予熱忱鼓勵(lì)。趙運(yùn)弢副教授嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,樂觀隨和的處事態(tài)度,不僅教我如何設(shè)計(jì)和寫作,更重要的是教會(huì)了我為人處事的態(tài)度和方法,雖歷時(shí)僅數(shù)月,卻讓我終生受益。臨近畢業(yè),特別感謝我的輔導(dǎo)員解穎老師四年來對(duì)我的關(guān)心和幫助,她年輕的朝氣和踏踏實(shí)實(shí)的作風(fēng),不僅激發(fā)我更加勤奮好學(xué),而且從多方面給我?guī)矸e極的影響。其次是感謝父母對(duì)我的養(yǎng)育,父母讓我接受良好的教育,不僅讓我學(xué)會(huì)了為人處事的道理還讓我學(xué)到了珍貴的知識(shí),為我踏入社會(huì)打下了根底。最后是感謝我的同學(xué)對(duì)我的支持和幫助。論文的完成,離不開老師和同學(xué)們的幫助,對(duì)于我來說,這是一筆值得我珍惜的巨大財(cái)富。忠心的感謝所有教過和未教過我的老師們,謝謝你們對(duì)我們的付出,我祝愿每位老師在今后的工作中一帆風(fēng)順,生活幸福。附錄A英語原文AdvancesincomputernetworkcommunicationtechnologyThe1990swastherapiddevelopmentofinformationandcommunicationtechnologyera.Intheexchangeoftechnology,digitalanddatacommunicationsonthebasisoftechnologicaldevelopment,computernetworktechnologyandinformationcommunicationtechnologycloselyintegratedrelationshipfurther,informationandcommunicationtechnologythankstocomputertechnologyandthelatestachievementsinmicroelectronics,hasbeenanunprecedenteddevelopment.Thedevelopmentofdigitalsignaltechnologytomaketraditionalanalogsignalstodigitalcommunicationstechnologychanges.Currently,data,text,voice,imagesandvideoandothermultimediainformationcommunicationhasbecomeareality,IntegratedServicesDigitalNetwork((ISDN)communicationservicesintherapidlydeveloping.Circuitswitching,packetswitching,usingawiredorwirelesschannels,includingridgepaircable,coaxialcable,fiberopticcable,terrestrialmicrowaveandsatellitechannelcombinedwitheachother,weavingavarietyofcommunicationnetworks,coveringfixedandmobilecommunications,acrosstimeandspaceconstraints,fornewscommunication,culture,sciencecommunication,informationconsultingservices,officemanagementaswellashumanwork,productionandlifeinallaspectsofinformationandcommunicationtocreateunprecedentedconditions,gaverisetoanewtechnologicallevel.
Incomputernetworksandinformationandcommunicationtechnologywithgeneralizedevolutionprocess,themainroleistocomputernetworkcommunication.Articleoutlinessomeofthefollowingelements:1computernetworkcommunicationtechnologydevelopmentinfourmainstages;2computerLANandWANtechnologydevelopment;3ATMtransmissiontechnology;4ATMLANemulationtechnology;5computernetworkcommunicationsequipmenttechnologydevelopment.Acomputernetworkcommunication.
Thefourmainstagesoftechnologicaldevelopmentcomputernetworkcommunicationhasundergonethreemainstages,isnowenteringitsfourthstageineachofthesestagesbyastageofgenerationofcomputerhardware,devicedriversandapplications,andeachstagegreatlyexpandedthecomputerapplications.1.1Thefirstphase(1965to1975).
Itisdominatedbylargecentralmainframecomputingperiod,whichisgeneratedduringaseriesofdedicatednetworkarchitecture(typicallysuchasIBM'sSNA).Itprovidesthehostandterm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 修車工人合同范例
- 購房轉(zhuǎn)合同范例
- 涼亭購銷合同范例
- 廠房鋼結(jié)構(gòu)合同范例
- 工程水車租賃合同范例
- 制訂藥柜合同范例
- 水泥塊買賣合同范例
- 薪保底合同范例
- 工地招工散工合同范例
- 勘察設(shè)計(jì)補(bǔ)充合同范例
- 垃圾運(yùn)輸清運(yùn)合同
- 基礎(chǔ)工程-趙明華-第二章
- 腎病科主任述職報(bào)告
- 2023-2024全國初中物理競(jìng)賽試題第11講壓強(qiáng)(解析版)
- 擴(kuò)大高水平對(duì)外開放課件
- 衛(wèi)生院年度工作總結(jié)
- 2024年供應(yīng)鏈管理師(一級(jí))資格考試復(fù)習(xí)題庫(含答案)
- 《地理信息系統(tǒng)》課程中的思政元素科技服務(wù)于人與自然和諧共生
- 校招面試官培訓(xùn)課件
- 資產(chǎn)管理基礎(chǔ)知識(shí)
- GB/T 7260.1-2023不間斷電源系統(tǒng)(UPS)第1部分:安全要求
評(píng)論
0/150
提交評(píng)論