




已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄局域網(wǎng)聊天工具設(shè)計(jì)1文本聊天、文件傳輸及用戶管理1lan chat tool design2text chat, file transfer and user management2第1章 引言31.1 系統(tǒng)開發(fā)的背景31.2 聊天工具開發(fā)的目標(biāo)31.3 聊天工具開發(fā)的現(xiàn)實(shí)意義3第2章 開發(fā)平臺(tái)與相關(guān)知識(shí)簡(jiǎn)介52.1 系統(tǒng)綜合要求52.1.1 硬件要求:52.1.2 程序運(yùn)行環(huán)境:52.2 c# 簡(jiǎn)介52.3 microsoft .net framework 簡(jiǎn)介52.4 microsoft directx sdk 簡(jiǎn)介62.5 .net 與多線程技術(shù)62.6 c/s結(jié)構(gòu)與windows sockets網(wǎng)絡(luò)編程62.7 xml簡(jiǎn)介9第3章 需求分析103.1 用戶需求103.2 系統(tǒng)功能需求103.3 性能要求103.4 測(cè)試環(huán)境規(guī)定113.5 可行性研究11第4章 系統(tǒng)設(shè)計(jì)124.1 系統(tǒng)目標(biāo)124.2 系統(tǒng)功能結(jié)構(gòu)124.3 業(yè)務(wù)流程圖134.4 系統(tǒng)模塊劃分13第5章 系統(tǒng)模塊詳細(xì)設(shè)計(jì)145.1 文本聊天模塊實(shí)現(xiàn)145.1.1 文本聊天模塊概述145.1.2 文本聊天服務(wù)器工作原理145.1.3 文本聊天客戶端工作原理155.1.4 p2p文本聊天165.2 文件傳輸模塊實(shí)現(xiàn)195.2.1 文件傳輸模塊概述195.2.2 文件傳輸接收端工作原理195.2.3 文件傳輸發(fā)送端工作原理205.2.4 p2p文件傳輸215.3 用戶管理模塊實(shí)現(xiàn)245.3.1 用戶管理模塊概述245.3.2 用戶數(shù)據(jù)模型245.3.3 xml文檔結(jié)構(gòu)設(shè)計(jì)255.3.4 用戶信息的保存255.3.5 用戶數(shù)據(jù)的遍歷26第6章 系統(tǒng)測(cè)試286.1 系統(tǒng)測(cè)試概述286.2 白盒測(cè)試286.2.1 測(cè)試環(huán)境配置286.2.2 正確性測(cè)試286.3 黑盒測(cè)試296.3.1 測(cè)試環(huán)境配置296.3.2 功能性測(cè)試296.3.3 容錯(cuò)性測(cè)試296.3.4 性能與效率測(cè)試306.3.5 易用性測(cè)試316.3.6 文檔測(cè)試31第7章 主要問題及解決327.1 多線程問題327.2 套接字異常327.3 網(wǎng)絡(luò)流異常32參考文獻(xiàn)33附錄3448局域網(wǎng)聊天工具設(shè)計(jì) 文本聊天、文件傳輸及用戶管理摘要:隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,各種各樣基于網(wǎng)絡(luò)的應(yīng)用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布,通信,數(shù)據(jù)共享等等。局域網(wǎng)的發(fā)展也同樣迅速。很多政府機(jī)構(gòu),企業(yè),學(xué)校,都是先以一個(gè)統(tǒng)一的局域網(wǎng)聯(lián)結(jié)在一起,再分別接入internet。因此基于局域網(wǎng)的即時(shí)通信工具,就這樣應(yīng)運(yùn)而生了。本文提出了一個(gè)局域網(wǎng)聊天工具的設(shè)計(jì),并在windows平臺(tái)上加以了實(shí)現(xiàn)。本設(shè)計(jì)將語(yǔ)音聊天、文本聊天和文件傳輸?shù)裙δ芫C合在一個(gè)客戶端程序之內(nèi),使用c#語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程,用多線程實(shí)現(xiàn)不同的并行任務(wù),使用可擴(kuò)展標(biāo)記語(yǔ)言xml進(jìn)行簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)和管理,并進(jìn)行了人性化的界面設(shè)計(jì),使用起來(lái)簡(jiǎn)單方便,并且功能十分合理,又易于擴(kuò)展以及個(gè)性化定制。關(guān)鍵詞:局域網(wǎng);文本聊天;文件傳輸;可擴(kuò)展標(biāo)記語(yǔ)言;多線程 lan chat tool designtext chat, file transfer and user managementabstract:along with the high-speed development of the computer network technology, various of applications which are based on network were born, such as internet-based information releasing,communications,data sharing and so on. the development of lan is the same fast. because of some government institutions, enterprises and schools constitute a lan first ,then join into internet, the real-time lan-based communication tools emerged. this paper proposed a lan chat tool designing, and then implement it on windows platform. the design integrated voice-chat, text-chat and file-transfer and other functions in a client procedure. it used c # language for network programming with multi-threaded parallel to achieve different tasks, and it used xml to make simple data storage and management come true, and designed a user-friendly and easy to use interface , and its functions are reasonable and easy to extend, as well as customization.key words: lan; text-chat; file-transfer; xml; multi-threaded第1章 引言1.1 系統(tǒng)開發(fā)的背景當(dāng)今世界正處于信息時(shí)代,計(jì)算機(jī)和通信網(wǎng)絡(luò)是這一時(shí)代所謂“信息基礎(chǔ)設(shè)施”。隨著網(wǎng)絡(luò)的普及化,網(wǎng)絡(luò)作為人們相互間溝通與交流聯(lián)系的現(xiàn)代化工具日益重要,可以說現(xiàn)在人們的生活已經(jīng)離不開網(wǎng)絡(luò)。在現(xiàn)實(shí)生活中人們可以通過多種手段與家人親戚朋友交流通訊,像電話,電子郵件等。但這些手段都有些缺點(diǎn),要么費(fèi)用太高,要么實(shí)時(shí)性不強(qiáng),要么1次只能和1位好友進(jìn)行交流。于是這就需要1種便宜,快速,能同時(shí)與多個(gè)好友進(jìn)行通訊的網(wǎng)絡(luò)工具的出現(xiàn),而網(wǎng)絡(luò)聊天工具就滿足了這些需求,填補(bǔ)了這個(gè)空白。在互聯(lián)網(wǎng)相當(dāng)普及的今天,在互聯(lián)網(wǎng)上聊天對(duì)很多“網(wǎng)蟲”來(lái)說已經(jīng)是家常便飯了。聊天室程序可以說是網(wǎng)上最簡(jiǎn)單的多點(diǎn)通信程序。一個(gè)簡(jiǎn)單的聊天室, 從程序員的觀點(diǎn)來(lái)看就是在多個(gè)i/o端點(diǎn)之間實(shí)現(xiàn)多對(duì)多的通信。廣域網(wǎng)上的即時(shí)通信工具,如今一般采用udp或者 tcp協(xié)議體系來(lái)實(shí)現(xiàn),開發(fā)技術(shù)已經(jīng)比較成熟,這些軟件,在使用方面各有特色,在實(shí)現(xiàn)方面也各有所長(zhǎng),但基于這些產(chǎn)品正在商業(yè)運(yùn)營(yíng)階段,其實(shí)現(xiàn)方式屬于商業(yè)機(jī)密,具體細(xì)節(jié)不可能得知,但是它在大的方面無(wú)非就是利用各種平臺(tái)上的網(wǎng)絡(luò)通信接口,建構(gòu)基于tcp/ip,或者udp協(xié)議的軟件產(chǎn)品。網(wǎng)絡(luò)的飛速發(fā)展使網(wǎng)絡(luò)應(yīng)用程序的開發(fā)地位顯的越來(lái)越重要,而網(wǎng)絡(luò)應(yīng)用程序的開發(fā)和傳統(tǒng)應(yīng)用程序的開發(fā)在思想和實(shí)現(xiàn)上有很大的區(qū)別,隨著網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫(kù)管理系統(tǒng)的發(fā)展,c/s體系結(jié)構(gòu)在軟件的開發(fā)中越來(lái)越流行。因?yàn)檫@種結(jié)構(gòu)的應(yīng)用軟件可以充分發(fā)揮網(wǎng)絡(luò)的作用和數(shù)據(jù)庫(kù)系統(tǒng)的優(yōu)勢(shì),以滿足人們各種應(yīng)用的需求。1.2 聊天工具開發(fā)的目標(biāo)本設(shè)計(jì)的主要工作是設(shè)計(jì)一個(gè)基于windows平臺(tái)的局域網(wǎng)即時(shí)聊天工具,具體是采用p2p模式實(shí)現(xiàn)用戶之間的通信,然后闡述本軟件的功能、特點(diǎn)及使用方法,并詳細(xì)闡述開發(fā)本軟件所用的相關(guān)技術(shù),具體分析本軟件的各個(gè)模塊的功能及實(shí)現(xiàn)方法,說明本軟件的設(shè)計(jì)思想及方法。1.3 聊天工具開發(fā)的現(xiàn)實(shí)意義局域網(wǎng)聊天工具,是在局域網(wǎng)內(nèi)部使用的,用戶之間用來(lái)交流的一個(gè)工具,一般都具有文本聊天和文件傳輸功能。局域網(wǎng)聊天軟件因其使用簡(jiǎn)單,系統(tǒng)資源消耗少等優(yōu)點(diǎn),成為各企事業(yè)單位等的局域網(wǎng)內(nèi)廣泛應(yīng)用的軟件之一。當(dāng)前的局域網(wǎng)聊天工具有很多,最有名的算ipmsg(飛鴿傳書)。ipmsg能夠?qū)崿F(xiàn)局域網(wǎng)內(nèi)消息、文件傳遞。但是,ipmsg 在某些時(shí)候,在同一vlan下的用戶,能夠彼此看見對(duì)方,卻不能通信,因?yàn)槠洳捎玫氖莡dp協(xié)議作為消息傳遞協(xié)議,而這種傳輸是不穩(wěn)定的,所以有時(shí)候能看到對(duì)方的用戶之間不能實(shí)現(xiàn)互相通信,怎么辦呢?一種解決方法就是,采用tcp協(xié)議,面向連接的傳輸層協(xié)議作為消息傳遞協(xié)議,開發(fā)出相應(yīng)的網(wǎng)絡(luò)應(yīng)用程序就能夠?qū)崿F(xiàn)彼此連接的雙方進(jìn)行信息的傳遞。隨著互聯(lián)網(wǎng)的不斷發(fā)展,“互聯(lián)網(wǎng)要擔(dān)當(dāng)起通訊大任”的聲音不絕于耳。未來(lái)的電信業(yè)務(wù)將呈現(xiàn)多元化格局。同樣是話音業(yè)務(wù),可能是pstn網(wǎng)絡(luò)(傳統(tǒng)電話網(wǎng))提供的,可能是internet提供的,還可能是有線電視網(wǎng)絡(luò),甚至電力網(wǎng)、煤氣管道網(wǎng)提供的。而用戶的選擇也將包括電腦與電腦、電腦與電話、電話與電話、電話與(智能)手機(jī)等通話方式。這一切,都是以ip為基礎(chǔ)的通訊網(wǎng)絡(luò),而非傳統(tǒng)通訊模式的電信服務(wù)。所以,voip將是聊天工具的一個(gè)發(fā)展方向?,F(xiàn)有的局域網(wǎng)聊天工具,一般都不具備語(yǔ)音聊天的功能,本軟件集成了語(yǔ)音聊天模塊,用戶可以通過此軟件實(shí)現(xiàn)語(yǔ)音互通,提高局域網(wǎng)用戶之間信息傳遞效率以及交流質(zhì)量。通過開發(fā)本軟件,可以了解當(dāng)前流行的voip技術(shù),練習(xí)socket編程,擴(kuò)展知識(shí)面,鍛煉編程的能力等,所以極具研究?jī)r(jià)值。第2章 開發(fā)平臺(tái)與相關(guān)知識(shí)簡(jiǎn)介2.1 系統(tǒng)綜合要求2.1.1 硬件要求:pc機(jī):2臺(tái)或者2臺(tái)以上,ram256mb以上,cpu400mhz以上,硬盤40gb以上、耳麥各2副局域網(wǎng)2.1.2 程序運(yùn)行環(huán)境:系統(tǒng)開發(fā)平臺(tái):microsoft visual strdio 2005microsoft directx sdk (november 2008)系統(tǒng)開發(fā)語(yǔ)言:c#運(yùn)行平臺(tái):window2000,windows xp,windows server 2003運(yùn)行環(huán)境:microsoft .net freamwork 2.0分辨率:最佳效果 10247682.2 c# 簡(jiǎn)介c#(發(fā)音為c sharp)是由微軟公司所開發(fā)的一種面向?qū)ο?,且運(yùn)行于.net framework之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。c#的設(shè)計(jì)目的是簡(jiǎn)化網(wǎng)絡(luò)應(yīng)用。使用c#語(yǔ)言能夠迅速地架構(gòu)基于windows和internet的應(yīng)用程序和組件,如標(biāo)準(zhǔn)的windows應(yīng)用程序和控制臺(tái)應(yīng)用程序,編譯后生成的文件擴(kuò)展名為exe;程序庫(kù)應(yīng)用程序,編譯后生成的文件擴(kuò)展名為dll,主要用來(lái)共享程序代碼。2.3 microsoft .net framework 簡(jiǎn)介.net framework 是由微軟開發(fā),一個(gè)致力于敏捷軟件開發(fā)(agile software development)、快速應(yīng)用開發(fā)(rapid application development)、平臺(tái)無(wú)關(guān)性和網(wǎng)絡(luò)透明化的軟件開發(fā)平臺(tái)。.net是微軟為下一個(gè)十年對(duì)服務(wù)器和桌上型軟件工程邁出的第一步。net 包含許多有助于internet和intranet應(yīng)用迅捷開發(fā)的技術(shù)。.net 也為編程界面(api)提供了新功能和開發(fā)工具。這些革新使得程序設(shè)計(jì)員可以同時(shí)進(jìn)行windows應(yīng)用軟件和網(wǎng)絡(luò)應(yīng)用軟件以及元件和服務(wù)(web service)的開發(fā)。.net 提供了一個(gè)新的反射性的且面向?qū)ο蟪绦蛟O(shè)計(jì)編程界面。.net 設(shè)計(jì)得足夠通用化從而使許多不同高級(jí)語(yǔ)言都得以被匯集。2.4 microsoft directx sdk 簡(jiǎn)介sdk 是 software development kit 的縮寫,中文意思就是“軟件開發(fā)工具包”。這是一個(gè)覆蓋面相當(dāng)廣泛的名詞,可以這么說:輔助開發(fā)某一類軟件的相關(guān)文檔、范例和工具的集合都可以叫做 “sdk”。具體到我們這個(gè)系列教程,我們后面只討論廣義 sdk 的一個(gè)子集即開發(fā) windows 平臺(tái)下的應(yīng)用程序所使用的 sdk。sdk提供了一整套開發(fā) windows 應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。由于sdk 包含了使用 api的必需資料,所以人們也常把僅使用 api 來(lái)編寫 windows 應(yīng)用程序的開發(fā)方式叫做“sdk 編程”。而 api 和 sdk 是開發(fā) windows 應(yīng)用程序所必需的東西,所以其它編程框架和類庫(kù)都是建立在它們之上的,比如 vcl 和 mfc,雖然他們比起“sdk 編程”來(lái)有著更高的抽象度,但這絲毫不妨礙它們?cè)谛枰臅r(shí)候隨時(shí)直接調(diào)用 api 函數(shù)。2.5 .net 與多線程技術(shù)多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。在本質(zhì)上和結(jié)構(gòu)來(lái)說,.net是一個(gè)多線程的環(huán)境。有兩種主要的多線程方法是.net所提倡的:使用threadstart來(lái)開始你自己的進(jìn)程,直接的 (使用threadpool.queueuserworkitem)或者間接的(比如stream.beginread,或者調(diào)用 begininvoke)使用threadpool類。線程的基類是system.threading。所有線程通過cli來(lái)進(jìn)行管理。2.6 c/s結(jié)構(gòu)與windows sockets網(wǎng)絡(luò)編程通常的通信工具,都采用客戶機(jī)/服務(wù)器(c/s)體系結(jié)構(gòu),c/s結(jié)構(gòu)是這樣的一種結(jié)構(gòu):它包括一個(gè)客戶機(jī)(或前端),一個(gè)服務(wù)器(或稱后端),客戶機(jī)的作用是訪問和處理遠(yuǎn)程服務(wù)器上的數(shù)據(jù),服務(wù)器的作用是接收和處理客戶機(jī)的數(shù)據(jù)請(qǐng)求。有時(shí),可能有多個(gè)客戶向同一個(gè)服務(wù)器同時(shí)請(qǐng)求服務(wù),這就需要服務(wù)器決定怎樣處理這些請(qǐng)求。client/server結(jié)構(gòu)是當(dāng)前數(shù)據(jù)庫(kù)應(yīng)用程序中極為流行的一種方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來(lái)共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來(lái),任何客戶機(jī)都可以通過訪問服務(wù)器而獲得所需的信息。client/server模型最終可歸結(jié)為一種“請(qǐng)求/應(yīng)答”關(guān)系。一個(gè)請(qǐng)求總是首先被客戶發(fā)出,然后服務(wù)器總是被動(dòng)地接收請(qǐng)求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請(qǐng)求之前,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個(gè)客戶提出請(qǐng)求后,服務(wù)進(jìn)程被“喚醒”并且為客戶提供服務(wù),對(duì)客戶的請(qǐng)求做出所需要的應(yīng)答,如圖2-1所示。圖2-1 客戶機(jī)服務(wù)器通信結(jié)構(gòu)示圖為了方便client/server模型的網(wǎng)絡(luò)編程,90年代初,由microsoft聯(lián)合了其他幾家公司共同制定了一套windows下的網(wǎng)絡(luò)編程接口,即windows sockets規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的windows下的網(wǎng)絡(luò)編程接口?,F(xiàn)在的winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),你可以使用winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是tcp/ip協(xié)議。在ip連接領(lǐng)域有兩種通信類型:面向連接的(connection-oriented ) 和無(wú)連接的(connectionless)。在面向連接的套接字中,使用tcp協(xié)議來(lái)建立兩個(gè)ip地址端點(diǎn)之間的會(huì)話。一旦建立了這種連接,就可以在設(shè)備之間可靠地傳輸數(shù)據(jù)。為了建立面向連接的套接字,服務(wù)器端和客戶端必須分別進(jìn)行編程。在system.net.sockets 名空間下,有兩個(gè)專門用于tcp協(xié)議編程的類:tcpclient類和tcplistener類。這兩個(gè)類提供了直觀的易于使用的屬性和方法,從而降低了tcp協(xié)議編程的難度。一般情況下,使用tcpclient連接、發(fā)送和接收數(shù)據(jù),使用tcplistener監(jiān)聽是否有傳入的連接請(qǐng)求,使用close()方法釋放與tcpclient關(guān)聯(lián)的所有資源。c/s 模式下windows socket編程示意圖,如圖2-2所示。圖2-2 c/s 模式下socket編程具體到這個(gè)項(xiàng)目,服務(wù)器只是用來(lái)驗(yàn)證用戶的登錄,以及廣播用戶的登錄狀態(tài)等。具體的通信,采用p2p模式,每?jī)蓚€(gè)客戶端要進(jìn)行連接通信時(shí)都直接連通而不用通過服務(wù)器來(lái)進(jìn)行信息的中轉(zhuǎn),這樣設(shè)計(jì)的優(yōu)點(diǎn)是既可以對(duì)用戶進(jìn)行管理,又不會(huì)造成服務(wù)器的通信負(fù)擔(dān)。所以,系統(tǒng)結(jié)構(gòu)將設(shè)計(jì)成如圖2-3的方式。圖2-3 客戶機(jī)直接通信結(jié)構(gòu)示圖2.7 xml簡(jiǎn)介xml(extensible markup language)即可擴(kuò)展標(biāo)記語(yǔ)言,它與html一樣,都是sgml(standard generalized markup language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)。xml是internet環(huán)境中跨平臺(tái)的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴(kuò)展標(biāo)記語(yǔ)言xml是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然xml占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但xml極其簡(jiǎn)單易于掌握和使用。 xml與access,oracle和sql server等數(shù)據(jù)庫(kù)不同,數(shù)據(jù)庫(kù)提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,xml僅僅是展示數(shù)據(jù)。事實(shí)上xml與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡(jiǎn)單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使xml與眾不同。 xml的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使xml很快成為數(shù)據(jù)交換的唯一公共語(yǔ)言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持xml,那就意味著程序可以更容易的與windows、mac os, linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載xml數(shù)據(jù)到程序中并分析他,并以xml格式輸出結(jié)果。xml的主要作用有:(1)豐富文件(rich documents)- 自定文件描述并使其更豐富 (2)屬于文件為主的xml技術(shù)應(yīng)用 (3)標(biāo)記是用來(lái)定義一塊數(shù)據(jù)應(yīng)該如何呈現(xiàn) (4)解釋數(shù)據(jù)(metadata)- 描述其它文件或在線信息 (5)屬于數(shù)據(jù)為主的xml技術(shù)應(yīng)用 (6)標(biāo)記是用來(lái)說明一塊資料的意義 (7)組態(tài)檔案(configuration files)- 描述軟件的組態(tài)參數(shù)第3章 需求分析3.1 用戶需求隨著中小型企事業(yè)的不斷發(fā)展,在企業(yè)內(nèi)部實(shí)現(xiàn)局域網(wǎng)通信是必不可少的。局域聊工具就是一個(gè)非常好的局域網(wǎng)通信軟件,它可以在職工不移動(dòng)位置的情況下進(jìn)行在線聊天、文件傳遞、語(yǔ)音聊天。這樣,可以大大提高企業(yè)的工作效率,便于企業(yè)內(nèi)部職員的交流。根據(jù)用戶對(duì)聊天工具的要求,可分為以下幾點(diǎn):1、 操作簡(jiǎn)單方便、界面簡(jiǎn)潔美觀。2、 客戶端能夠注冊(cè)新用戶3、 可以在局域網(wǎng)實(shí)現(xiàn)文字和文件的傳輸4、 可以進(jìn)行聊天記錄保存5、 可以實(shí)現(xiàn)局域網(wǎng)語(yǔ)音聊天6、 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠3.2 系統(tǒng)功能需求這個(gè)程序要實(shí)現(xiàn)的功能如下:(1) 程序啟動(dòng)之后就能看到當(dāng)前哪些機(jī)器在線,哪些可以與之進(jìn)行對(duì)等通信。(2) 一旦有某個(gè)網(wǎng)內(nèi)的機(jī)器上線了,要有即時(shí)通知,并能及時(shí)更新用戶界面中的用戶列表。(3)當(dāng)雙擊某個(gè)列表項(xiàng)的時(shí)候,要彈出聊天對(duì)話框,可以在其中編輯要發(fā)送的聊天信息,并進(jìn)行發(fā)送。(4)聊天界面要人性化,下面是發(fā)送框,上面有已有聊天記錄,并借助滾動(dòng)條看到當(dāng)次所有的聊天記錄。(5) 當(dāng)有遠(yuǎn)程用戶向本機(jī)發(fā)送文件的時(shí)候,要彈出一個(gè)消息提示框,提示本機(jī)用戶,可以選擇接收或者拒絕。(6) 當(dāng)用戶覺得有必要保存聊天記錄時(shí),提供一個(gè)簡(jiǎn)單的聊天記錄保存功能。(7) 文件傳輸過程中,應(yīng)該有當(dāng)前傳輸狀態(tài)提示,并能夠?qū)鬏敽臅r(shí)等進(jìn)行計(jì)算,作為當(dāng)前網(wǎng)絡(luò)狀態(tài)的一種反饋。3.3 性能要求首先要求程序要完全可靠,可以應(yīng)付各種由于系統(tǒng)問題產(chǎn)生的錯(cuò)誤,比如初始網(wǎng)絡(luò)失敗,對(duì)方突然下線等。要求提前設(shè)想到類似的盡可能多的可能發(fā)生的事件,做出相應(yīng)的應(yīng)對(duì)措施,并向用戶提交簡(jiǎn)單易懂清晰明白的提示信息。程序要有良好的容錯(cuò)性,當(dāng)用戶進(jìn)行非法操作時(shí)或者系統(tǒng)本身出現(xiàn)問題時(shí)要能以最好的方式退出程序,避免發(fā)生程序假死現(xiàn)象。開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要交由別人接手開發(fā),或者自己由于種種原因需要進(jìn)行二次開發(fā),那么要保證以后能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路以及實(shí)現(xiàn)細(xì)節(jié)。要求程序?qū)λ\(yùn)行之系統(tǒng)的硬件條件要求盡可能低,運(yùn)行時(shí)內(nèi)存占用盡可能小,響應(yīng)速度要盡可能快。并且不發(fā)生內(nèi)存泄漏之類影響系統(tǒng)運(yùn)行的錯(cuò)誤事件。并且要求易于維護(hù)及擴(kuò)展。所以應(yīng)該采用模塊化開發(fā),各個(gè)模塊之間不要有太多的耦合,以免維護(hù)困難。3.4 測(cè)試環(huán)境規(guī)定在開發(fā)過程中由開發(fā)人員自己,也就是我和搭檔莫景順隨時(shí)進(jìn)行內(nèi)部部分白盒測(cè)試,在開發(fā)完成以后,自己進(jìn)行一個(gè)全面的白盒測(cè)試,然后請(qǐng)同學(xué)幫忙進(jìn)行黑盒測(cè)試。3.5 可行性研究(1)成本可行性分析本軟件只做開發(fā)學(xué)習(xí)使用,所以暫且不考慮經(jīng)濟(jì)成本及盈利問題。(2)技術(shù)可行性分析開發(fā)所需要的軟硬件平臺(tái)已經(jīng)搭建好,并進(jìn)行了合理而完善的需求分析,做好了充分的前期準(zhǔn)備工作,其次因?yàn)楸境绦虻钠脚_(tái)將基于windows,將要使用網(wǎng)絡(luò)通信技術(shù),而windows有完善成熟的網(wǎng)絡(luò)通信接口,以及與c#開發(fā)環(huán)境的嚴(yán)密契合能力,加之相類似的更大規(guī)模的internet通信工具產(chǎn)品也已有例在先,所以這個(gè)程序的開發(fā)在技術(shù)上是完全可行的。第4章 系統(tǒng)設(shè)計(jì)4.1 系統(tǒng)目標(biāo)根據(jù)用戶對(duì)聊天系統(tǒng)的要求,本聊天軟件可以實(shí)現(xiàn)以下目標(biāo):(1)用戶管理(2)登錄(3)當(dāng)有用戶登錄時(shí)會(huì)在客戶端在線用戶中添加顯示出來(lái)(4)當(dāng)有用戶下線時(shí)會(huì)從客戶端在線用戶中刪除其信息(5)實(shí)現(xiàn)客戶端間的文本聊天(6)實(shí)現(xiàn)客戶端間的語(yǔ)音聊天(7)實(shí)現(xiàn)客戶端間的文件傳輸(8)實(shí)現(xiàn)聊天記錄的保存4.2 系統(tǒng)功能結(jié)構(gòu)本系統(tǒng)中主要包括兩個(gè)部分:服務(wù)器端和客戶端。服務(wù)器端的功能包括:驗(yàn)證客戶注冊(cè)、添加新用戶、驗(yàn)證客戶登錄、廣播登錄用戶信息、廣播下線用戶信息??蛻舳说墓δ馨ǎ鹤?cè)新用戶、用戶登錄、文本聊天、語(yǔ)音聊天、文件傳輸??蛻舳斯δ芙Y(jié)構(gòu)如圖4-1所示。局域網(wǎng)聊天工具客戶端用戶驗(yàn)證文件傳輸文字聊天語(yǔ)音聊天連接用戶注冊(cè)用戶登錄發(fā)送文件接收文件接收消息消息記錄發(fā)送消息語(yǔ)音傳輸語(yǔ)音播放語(yǔ)音采集發(fā)起連接接受連接圖4-1 客戶端功能結(jié)構(gòu)4.3 業(yè)務(wù)流程圖局域網(wǎng)聊天系統(tǒng)的業(yè)務(wù)流程圖如圖4-2所示??蛻舳艘炎?cè)?登錄登錄驗(yàn)證主窗體對(duì)話框窗體服務(wù)器端服務(wù)器(記錄所有注冊(cè)用戶和顯示所有當(dāng)前在線用戶)注冊(cè)發(fā)消息發(fā)消息nyy服務(wù)器(記錄所有注冊(cè)用戶和顯示所有當(dāng)前在線用戶)n客戶端主窗體發(fā)消息對(duì)話框窗體發(fā)消息tcp/udp協(xié)議圖4-2 系統(tǒng)業(yè)務(wù)流程圖4.4 系統(tǒng)模塊劃分由圖4-1我們可以看出系統(tǒng)主要分為服務(wù)器端和客戶端兩大部分,經(jīng)過商討,我們決定把系統(tǒng)分為六個(gè)模塊:服務(wù)器模塊、客戶端模塊、語(yǔ)音聊天模塊、文本聊天模塊、文件傳輸模塊、用戶管理模塊。此系統(tǒng)由2個(gè)成員共同完成,各成員分工情況如表4-1所示。 表4-1小組成員分工情況表學(xué)號(hào)成員姓名負(fù)責(zé)模塊xxxxxxxxx服務(wù)器模塊、客戶端模塊、語(yǔ)音聊天模塊*文本聊天模塊、文件傳輸模塊、用戶管理模塊第5章 系統(tǒng)模塊詳細(xì)設(shè)計(jì)在本次開發(fā)過程中,我主要負(fù)責(zé)文本聊天、文件傳輸和用戶管理模塊的設(shè)計(jì)和實(shí)現(xiàn),現(xiàn)詳細(xì)地介紹這三個(gè)模塊的實(shí)現(xiàn)。5.1 文本聊天模塊實(shí)現(xiàn)5.1.1 文本聊天模塊概述凡是聊天工具,都少不了文本聊天功能,這是個(gè)基礎(chǔ)功能。通過文本聊天,局域網(wǎng)內(nèi)用戶能夠發(fā)送和接收文字信息,并在程序窗體上顯示出來(lái),相互之間進(jìn)行在線交流,并能根據(jù)用戶需要,對(duì)聊天記錄進(jìn)行簡(jiǎn)單的保存。文本聊天的信息傳輸協(xié)議主要有面向連接的tcp和無(wú)連接的udp。tcp協(xié)議是互聯(lián)網(wǎng)中最重的協(xié)議之一,主要特點(diǎn)是:保證數(shù)據(jù)包的準(zhǔn)確到達(dá);保證各數(shù)據(jù)包到達(dá)的順序和數(shù)據(jù)包發(fā)出的順序相同。udp協(xié)議提供了快速但不一定可靠的傳輸服務(wù),udp協(xié)議采用無(wú)連接的套接字,不需要在網(wǎng)絡(luò)設(shè)備之間發(fā)送連接信息,和tcp相比,udp缺乏雙方的握手信號(hào),因此不保證數(shù)據(jù)包一定到達(dá)目的地,可靠性不如tcp,而且,由于udp沒有任何對(duì)雙方會(huì)話的支持,不能保證各數(shù)據(jù)包到達(dá)的順序與數(shù)據(jù)包發(fā)出的順序相同。所以,在文本聊天模塊中,采用tcp協(xié)議來(lái)傳輸文本信息。5.1.2 文本聊天服務(wù)器工作原理開啟服務(wù)器,文本聊天窗體加載成功后,將啟動(dòng)監(jiān)聽線程,服務(wù)器主要是負(fù)責(zé)監(jiān)聽局域網(wǎng)內(nèi)的用戶的連接請(qǐng)求。收到客戶發(fā)起的連接請(qǐng)求后,若服務(wù)器處于空閑狀態(tài),彈出消息提示框,對(duì)請(qǐng)求進(jìn)行處理,服務(wù)器可以選擇接受或者拒絕客戶端的連接。若同意連接,則返回給客戶端同意信號(hào),開啟服務(wù)器的接收信息線程,并置消息發(fā)送事件為enable??蛻舳耸盏椒?wù)器返回的同意信號(hào)后,也開啟接收信息線程,并置消息發(fā)送事件為enable。通信雙方就可以進(jìn)行文字聊天了。若服務(wù)器端拒絕客戶端的連接,則關(guān)閉tcpconnect,并關(guān)閉網(wǎng)絡(luò)流,繼續(xù)執(zhí)行監(jiān)聽。客戶端得知服務(wù)器端關(guān)閉tcpconnect并關(guān)閉網(wǎng)絡(luò)流之后,則釋放本次socket和網(wǎng)絡(luò)流。若已建立連接,當(dāng)斷開連接時(shí),將向?qū)Ψ桨l(fā)送斷開信號(hào),然后將釋放socket和網(wǎng)絡(luò)流,不影響到下一次連接的接入。文本聊天服務(wù)器工作流程如圖5-1所示。開啟監(jiān)聽線程,監(jiān)聽端口否是開始同意連接請(qǐng)求?發(fā)送拒絕信號(hào)建立連接,允許發(fā)送消息事件,啟動(dòng)接受信息線程進(jìn)行文字消息通信是否是否斷開連接?發(fā)送斷開信號(hào),關(guān)閉文本聊天是終止否保存記錄?保存聊天記錄圖5-1文本聊天服務(wù)器程序流程圖5.1.3 文本聊天客戶端工作原理客戶端用來(lái)向服務(wù)器端發(fā)起一個(gè)連接,等待服務(wù)器的允許接入確認(rèn)。若服務(wù)器端同意連接請(qǐng)求,接收到服務(wù)器的同意連接信號(hào)后,開啟接收信息線程,并置消息發(fā)送事件為enable,通信雙方就可以進(jìn)行文本聊天了。若服務(wù)器端拒絕連接,則釋放socket連接并關(guān)閉網(wǎng)絡(luò)流。若已建立連接,當(dāng)斷開連接時(shí),將向?qū)Ψ桨l(fā)送斷開信號(hào),然后將釋放socket和網(wǎng)絡(luò)流,不影響到下一次連接的發(fā)起。文本聊天客戶端工作流程圖如圖5-2所示。連接服務(wù)器服務(wù)器同意連接?否是建立連接,允許發(fā)送消息事件,啟動(dòng)接受信息線程進(jìn)行文字消息通信開始是是否斷開連接?發(fā)送斷開信號(hào),關(guān)閉文本聊天否終止保存聊天記錄保存記錄?是否圖5-2 文本聊天客戶端程序流程圖5.1.4 p2p文本聊天1) 功能概述將文本聊天客戶端和服務(wù)器模塊,通過多線程技術(shù),集成在一個(gè)聊天窗體里面,窗體加載時(shí)進(jìn)行監(jiān)聽,有連接請(qǐng)求到達(dá),則為服務(wù)器端;試圖連接遠(yuǎn)程用戶,則為客戶端。它是建立在tcplistener以及tcpclient這兩個(gè)類基礎(chǔ)上的。程序?qū)崿F(xiàn)的原理也比較簡(jiǎn)單,但是用到了p2p技術(shù)非中心化的基本原則。簡(jiǎn)言之,用這個(gè)程序可以在網(wǎng)絡(luò)中發(fā)送、接受消息,任何一臺(tái)計(jì)算機(jī)既可以作為服務(wù)器端,又可以作為客戶端。2) 集成文本聊天工作流程圖集成主窗體創(chuàng)建后,加載監(jiān)聽線程。當(dāng)有接入連接請(qǐng)求,同意或拒絕接入請(qǐng)求,若同意,則按照文本聊天服務(wù)器模塊工作流程執(zhí)行。當(dāng)無(wú)接入請(qǐng)求,則判斷是否有嘗試連接遠(yuǎn)程服務(wù)端事件,若有,則按照文本聊天客戶端模塊工作流程執(zhí)行,如圖5-3所示。執(zhí)行監(jiān)聽線程,監(jiān)聽端口是否開始有接入連接請(qǐng)求是是否否連接服務(wù)器?是否是否斷開連接?連接雙方進(jìn)行消息通信是終止保存聊天記錄否保存記錄?發(fā)送斷開信號(hào),關(guān)閉文本聊天是本地或遠(yuǎn)程服務(wù)端允許?建立連接,允許發(fā)送消息事件,啟動(dòng)接受信息線程圖5-3 p2p文本聊天程序流程圖3) 集成主窗體設(shè)計(jì)主窗體是用來(lái)與用戶交互用的,所以加載時(shí)間不能太長(zhǎng),響應(yīng)速度應(yīng)足夠快,操作簡(jiǎn)單,設(shè)計(jì)人性化。所以,設(shè)計(jì)的時(shí)候,采用了一些通俗易懂的圖片和按鈕。文本輸入框設(shè)計(jì)了alt+s和ctrl+enter熱鍵功能,方便用戶快速的發(fā)送消息。當(dāng)用戶未輸入文字而嘗試發(fā)送時(shí),彈出消息提示框,提示不能發(fā)送空信息,節(jié)省系統(tǒng)和網(wǎng)絡(luò)資源。主窗體界面如圖5-4所示。圖5-4 集成主窗體界面文本聊天窗體主要控件屬性,見表5-1。表5-1 文本聊天窗體主要控件屬性表控件屬性值groupboxnamegroupbox1text信息顯示richtextboxnamerichtxtinfosreadonlytruerichtextboxnamerichtxtsentreadonlyfalseactivekeydownbuttonnamesendtext發(fā)送消息buttonnameclearboxtext清除屏幕buttonnamesavelogtext消息記錄4) 具體實(shí)現(xiàn)1、定義相關(guān)變量。2、集成主窗體創(chuàng)建后,創(chuàng)建一個(gè)tcplistener的對(duì)象,端口為5000,ip為任意。創(chuàng)建監(jiān)聽線程wait,wait線程執(zhí)行的是waitconn()方法,啟動(dòng)監(jiān)聽線程。調(diào)用getmyip()方法用于獲取本地ip地址,并在連接建立時(shí)傳給對(duì)方。當(dāng)wait線程監(jiān)聽到遠(yuǎn)程用戶的接入連接請(qǐng)求,彈出消息提示框,用戶可以選擇同意或拒絕接入請(qǐng)求。若同意,則創(chuàng)建接收信息線程th,并啟動(dòng)th。若用戶拒絕遠(yuǎn)程接入請(qǐng)求,則關(guān)閉網(wǎng)絡(luò)流nss,關(guān)閉tcps,并調(diào)用disconnect()重新初始化相關(guān)變量。3、接收信息時(shí),嘗試讀取網(wǎng)絡(luò)流,采用的是unicode編碼。讀取到的消息如果不為斷開連接信號(hào),則在聊天記錄框里面顯示出來(lái);若為斷開信號(hào),則執(zhí)行disconnect()方法關(guān)閉當(dāng)前連接。4、當(dāng)無(wú)接入請(qǐng)求,則判斷用戶是否有嘗試連接遠(yuǎn)程服務(wù)端事件。若有,創(chuàng)建tcpclient的對(duì)象tcpc,并嘗試連接遠(yuǎn)程主機(jī)。5、連接建立后,用戶單擊“發(fā)送消息”按鈕或者在輸入文本框內(nèi)按熱鍵“alt+s”或“ctrl+enter”,觸發(fā)send_click 事件。send_click事件主要是將用戶的輸入通過socket,采用網(wǎng)絡(luò)流的形式傳輸給遠(yuǎn)程用戶,編碼采用unicode,同時(shí)在聊天記錄框里面顯示出來(lái)。6、斷開連接或關(guān)閉窗體,需要將socket、網(wǎng)絡(luò)流以及接收信息線程th進(jìn)行關(guān)閉,重置各按鈕的可用狀態(tài)。若是關(guān)閉窗體,還需將wait線程關(guān)閉。5.2 文件傳輸模塊實(shí)現(xiàn)5.2.1 文件傳輸模塊概述除了文本聊天以外,局域網(wǎng)內(nèi)另外一個(gè)應(yīng)用是文件的共享。通過文件共享,企業(yè)能提高信息交換的速度,從而提高工作效率。文件共享的實(shí)現(xiàn)離不開文件傳輸。由于tcp協(xié)議能保證數(shù)據(jù)包的準(zhǔn)確到達(dá)以及各數(shù)據(jù)包到達(dá)的順序和數(shù)據(jù)包發(fā)出的順序相同,出于可靠性和效率考慮,本模塊也采用tcp協(xié)議來(lái)進(jìn)行用戶之間文件的傳輸。5.2.2 文件傳輸接收端工作原理開啟窗體后,接收端執(zhí)行監(jiān)聽線程。當(dāng)接收到客戶發(fā)起的文件傳入請(qǐng)求后,彈出消息提示對(duì)話框,提示用戶對(duì)請(qǐng)求進(jìn)行處理,同意或者拒絕接收。若同意接收,則彈出文件保存對(duì)話框,用戶選擇文件保存路徑并確認(rèn)后,發(fā)送接收信號(hào)給文件發(fā)送端,啟動(dòng)計(jì)時(shí)器開始接收文件流,將遠(yuǎn)程文件保存在本地,并在文件傳輸過程中對(duì)文件傳輸狀態(tài)進(jìn)行反饋,文件接收完畢后,關(guān)閉計(jì)時(shí)器,關(guān)閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若拒絕接收,則向發(fā)送端返回拒絕信號(hào),繼續(xù)執(zhí)行監(jiān)聽線程,等待下一次的文件傳入請(qǐng)求。文件傳輸接收端工作流程圖如圖5-5所示。執(zhí)行監(jiān)聽線程同意接收文件?否是發(fā)送同意接收信號(hào),啟動(dòng)計(jì)時(shí)器,接收文件流,反饋狀態(tài)終止接收發(fā)送端的文件傳入請(qǐng)求關(guān)閉計(jì)時(shí)器,關(guān)閉文件流將遠(yuǎn)程文件存儲(chǔ)至本地文件開始發(fā)送拒絕信號(hào)圖5-5 文件傳輸接收端程序流程圖5.2.3 文件傳輸發(fā)送端工作原理開啟窗體后,發(fā)送端選擇用戶需要發(fā)送的文件,向接收端發(fā)起的文件傳輸請(qǐng)求,若接收端端同意接收,開啟計(jì)時(shí)器,將本地文件通過網(wǎng)絡(luò)發(fā)送給接收端,并在文件傳輸過程中對(duì)文件傳輸狀態(tài)進(jìn)行反饋,文件發(fā)送完畢,關(guān)閉計(jì)時(shí)器,關(guān)閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若接收端拒絕接受文件,則取消本次文件發(fā)送,等待用戶的下一次文件發(fā)送事件。文件傳輸發(fā)送端工作流程圖如圖5-6所示。添加待傳送的文件接收端同意接收文件?否是啟動(dòng)計(jì)時(shí)器,發(fā)送文件流,反饋狀態(tài)終止向接收端發(fā)送文件傳輸請(qǐng)求關(guān)閉計(jì)時(shí)器,關(guān)閉文件流將本地文件發(fā)送至接收端開始圖5-6 文件傳輸發(fā)送端程序流程圖5.2.4 p2p文件傳輸1) 功能概述將文件發(fā)送端和接收端模塊,通過多線程技術(shù),集成在聊天窗體里面,窗體加載時(shí)進(jìn)行監(jiān)聽,有文件傳輸請(qǐng)求到達(dá),則為接收端,執(zhí)行接收端工作流程;若試圖發(fā)送文件到遠(yuǎn)程用戶,則為發(fā)送端,執(zhí)行發(fā)送端工作流程。這樣就實(shí)現(xiàn)了p2p模式對(duì)等傳輸。2) p2p文件傳輸工作流程圖負(fù)責(zé)接收文件的監(jiān)聽線程集成在聊天窗體內(nèi),當(dāng)聊天窗體加載時(shí),將開啟此線程。當(dāng)有文件傳入請(qǐng)求,用戶可以同意或者拒絕接收,若同意接收,則按照文件傳輸接收端模塊工作流程執(zhí)行。若在聊天窗體生存周期內(nèi),無(wú)接入連接請(qǐng)求,則判斷是否有用戶嘗試發(fā)送文件事件,若有,則按照文件傳輸發(fā)送端模塊工作流程執(zhí)行。p2p文件傳輸工作流程圖如圖5-7所示。否執(zhí)行監(jiān)聽線程,監(jiān)聽端口是否啟動(dòng)計(jì)時(shí)器,接收文件流,顯示文件接收狀態(tài)信息終止保存文件開始是是否接收端允許?啟動(dòng)計(jì)時(shí)器,發(fā)送文件流,顯示文件發(fā)送狀態(tài)信息將本地文件發(fā)送至接收端發(fā)送文件?否是有文件傳入請(qǐng)求允許接收?圖5-7 p2p文件傳輸程序流程圖3) 文件傳輸發(fā)送端窗體文件發(fā)送主要作用是發(fā)送本地文件至遠(yuǎn)程接收端,所以功能盡可能簡(jiǎn)單化,方便用戶操作,設(shè)計(jì)人性化。設(shè)計(jì)的時(shí)候,采用了一些簡(jiǎn)單按鈕,布局也和常用的窗體類似。為方便用戶快速的選取發(fā)送文件,所以文件路徑選擇框支持拖拽功能。當(dāng)用戶未選取文件前,開始按鈕不可用,當(dāng)用戶輸入的文件不存在時(shí),彈出消息提示框,提示文件不存在錯(cuò)誤。文件接收功能集成在聊天窗體內(nèi),文件發(fā)送窗體界面如圖5-8所示。圖5-8 文件發(fā)送窗體界面文件傳輸窗體主要控件屬性見表5-2。表5-2 文件傳輸窗體主要控件屬性控件屬性值textboxnametxtfilebuttonnamebtnbrowsetext瀏覽.buttonnamebtnstarttext開始buttonnamebtncanceltext取消labelnamelblstatusopenfiledialognamedlgopenfile4)具體實(shí)現(xiàn)1、定義相關(guān)變量。2、主窗體加載時(shí),創(chuàng)建文件接收監(jiān)聽線程receiverworker,并啟動(dòng)receiverworker線程。receiverworker線程執(zhí)行的是receiverstart()方法。在receiverstart()中,創(chuàng)建一個(gè)tcplistener的實(shí)例tcplistener,其監(jiān)聽局域網(wǎng)內(nèi)的任意ip地址在8088端口號(hào)上是否有傳入的連接嘗試。3、當(dāng)receiverworker線程監(jiān)聽到遠(yuǎn)程用戶的文件傳入請(qǐng)求,彈出消息提示框,用戶可以選擇同意或拒絕文件傳入請(qǐng)求。若同意,用戶選擇文件保存路徑后,向發(fā)起方發(fā)送同意接受信號(hào),并開啟計(jì)時(shí)器,讀取傳入的文件流并將其保存到本地文件,文件接收完畢時(shí)關(guān)閉計(jì)時(shí)器。若用戶拒絕文件傳入,則向遠(yuǎn)程主機(jī)發(fā)送一個(gè)拒絕信號(hào)。最后,執(zhí)行關(guān)閉binaryreader,關(guān)閉socket等操作。4、當(dāng)用戶打開文件發(fā)送窗體,主窗體調(diào)用其帶ip參數(shù)的構(gòu)造方法,實(shí)參為當(dāng)前與之建立連接的遠(yuǎn)程主機(jī)的ip地址,用于發(fā)送文件時(shí)建立socket連接使用。5、當(dāng)用戶向txtfile文本框內(nèi)輸入所選取的待發(fā)送文件后,用戶單擊“開始”按鈕,開啟用于向遠(yuǎn)端發(fā)送文件的senderworker線程。senderworker線程執(zhí)行senderstart()方法。senderstart()方法將創(chuàng)建一個(gè)tcpclient的實(shí)例tcpclient,嘗試連接指定的ip地址的8088端口,將文件的信息發(fā)送給遠(yuǎn)程主機(jī)并等待遠(yuǎn)程主機(jī)的確認(rèn)。若接收方同意接收文件,則啟動(dòng)計(jì)時(shí)器并打開binarywriter,將本地文件發(fā)送給遠(yuǎn)程主機(jī),文件傳輸完畢時(shí)關(guān)閉計(jì)時(shí)器。若遠(yuǎn)程主機(jī)拒絕接收,則關(guān)閉此次socket連接,等待下一次文件發(fā)送事件的觸發(fā)。5.3 用戶管理模塊實(shí)現(xiàn)5.3.1 用戶管理模塊概述不管是任何系統(tǒng),都必然會(huì)有用戶這個(gè)角色,因此用戶管理是每一個(gè)應(yīng)用中必不可少的部分。由于企業(yè)內(nèi)部的信息越來(lái)越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進(jìn)行溝通與交流,所以在本局域網(wǎng)聊天工具中,設(shè)計(jì)一個(gè)簡(jiǎn)單用戶管理模塊,對(duì)接入服務(wù)器的用戶進(jìn)行管理,能在一定程度上解決安全性問題。本模塊實(shí)現(xiàn)采用了xml技術(shù),二次開發(fā)時(shí),通過一定的修改,能夠很好的移植到數(shù)據(jù)庫(kù)上。5.3.2 用戶數(shù)據(jù)模型本模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的用戶管理,所管理的目標(biāo)是局域網(wǎng)內(nèi)客戶端用戶。模塊中只涉及到用戶一個(gè)模型,涉及到的屬性項(xiàng)目有 用戶id、用戶名(姓名)、密碼、注冊(cè)時(shí)間等,其e-r圖如圖5-9所示。圖5-9 用戶信息e-r圖5.3.3 xml文檔結(jié)構(gòu)設(shè)計(jì)xml分為文件序言(prolog)和文件主體兩個(gè)大的部分。在此文件中的第一行即是文件序言。它主要是告訴xml 解析器如何工作。其中,version 是標(biāo)明此 xml 文件所用的標(biāo)準(zhǔn)的版本號(hào)1.0,encoding 指明了此xml 文件中所使用的字符類型為utf-8。文件的其余部分都是屬于文件主體,userinfos.xml文件的內(nèi)容信息存放在此。文件主體是由開始的和結(jié)束的控制標(biāo)記組成,這個(gè)稱xml文件的“根元素”;是作為直屬于根元素下的“子元素”;在下又有、這些子元素。id是元素中的一個(gè)“屬性”,“1001”、“1002”等則是“屬性值”。userinfos.xml文檔結(jié)構(gòu)如圖5-10所示。圖5-10 userinfos.xml文檔結(jié)構(gòu)圖5.3.4 用戶信息的保存通過服務(wù)器監(jiān)聽,接收到客戶端的注冊(cè)請(qǐng)求后,獲取注冊(cè)用戶的信息,判斷用戶是否為第一個(gè)注冊(cè)用戶,若是,則創(chuàng)建userinfos.xml文檔,進(jìn)而創(chuàng)建userinfolist根節(jié)點(diǎn),在userinfolist內(nèi)創(chuàng)建用戶user節(jié)點(diǎn),設(shè)置id屬性,然后在user節(jié)點(diǎn)下創(chuàng)建用戶名、密碼、創(chuàng)建時(shí)間等節(jié)點(diǎn),將相應(yīng)的信息保存到各節(jié)點(diǎn)中。若userinfos.xml已存在,遍歷userinfolist,查找該注冊(cè)用戶名在userinfos.xml中是否已存在。若用戶名不存在,則在userinfolist內(nèi)創(chuàng)建新的user節(jié)點(diǎn),然后在user節(jié)點(diǎn)下創(chuàng)建用戶名、密碼、創(chuàng)建時(shí)間等,將用戶信息添加進(jìn)userinfos.xml文檔中。若用戶名已被注冊(cè),則通過服務(wù)器向客戶端返回用戶名已經(jīng)被注冊(cè)的提示信息。保存數(shù)據(jù)的流程圖如圖5-11所示。是否是第一個(gè)注冊(cè)用戶?是獲取最后一個(gè)用戶的id號(hào)并將id加1作為該user的id屬性值否創(chuàng)建xml文檔創(chuàng)建根節(jié)點(diǎn)向user節(jié)點(diǎn)中添加用戶名、密碼、注冊(cè)時(shí)間節(jié)點(diǎn)在根節(jié)點(diǎn)內(nèi)添加user節(jié)點(diǎn)設(shè)置user的id屬性值1001用戶是否已存在?否是返回用戶已存在在根節(jié)userinfoslist內(nèi)添加user節(jié)點(diǎn)開始結(jié)束圖5-11 保存數(shù)據(jù)的程序流程圖5.3.5 用戶數(shù)據(jù)的遍歷在新用戶注冊(cè)或者已注冊(cè)用戶登錄時(shí),需要在userinfos.xml文檔中查找用戶名是否存在,這個(gè)就涉及到xml文件的遍歷。遍歷xml文件的主要流程是,先進(jìn)入根節(jié)點(diǎn),開始對(duì)節(jié)點(diǎn)進(jìn)行遍歷。若節(jié)點(diǎn)不存在,則返回不存在信息,結(jié)束遍歷;否則進(jìn)入節(jié)點(diǎn),對(duì)其子節(jié)點(diǎn)進(jìn)行對(duì)比。若匹配成功,則返回用戶名存在信息;若不匹配,則繼續(xù)遍歷下一個(gè)節(jié)點(diǎn)。工作流程圖如圖5-12所示。返回不存在進(jìn)入user節(jié)點(diǎn)用戶名匹配?y返回存在進(jìn)入根節(jié)點(diǎn)第i個(gè)user結(jié)點(diǎn)是否存在否是否是i=1i=i+1開始結(jié)束圖5-12 用戶數(shù)據(jù)的遍歷程序流程圖第6章 系統(tǒng)測(cè)試6.1 系統(tǒng)測(cè)試概述測(cè)試的目的是為了發(fā)現(xiàn)功能是否達(dá)到,或者是否有更多的缺陷!這里的缺陷是泛稱的,它可以指功能的錯(cuò)誤,也可以指性能低下,易用性差等。測(cè)試總是先假設(shè)程序中存在缺陷,再通過執(zhí)行程序來(lái)發(fā)現(xiàn)并最終改正缺陷。理解測(cè)試的目的是個(gè)很重要的意識(shí)問題。如果說測(cè)試的目的是為了說明程序中沒有缺陷,那么測(cè)試人員就會(huì)向這個(gè)目標(biāo)靠攏,因而下意識(shí)地選用一些不易暴露錯(cuò)誤的測(cè)試示例。這樣的測(cè)試是虛假的。測(cè)試只能證明缺陷存在,而不能證明缺陷不存在。這個(gè)真理告訴我們,對(duì)于一個(gè)復(fù)雜的系統(tǒng)而言,無(wú)論采取什么樣的測(cè)試手段都不能證明缺陷已經(jīng)不復(fù)存在。“徹底地測(cè)試”只是一種理想。在實(shí)踐中,測(cè)試要考慮時(shí)間、費(fèi)用等限制,不允許無(wú)休止地測(cè)試。測(cè)試有助于提高軟件的質(zhì)量,但是提高軟件的質(zhì)量不能依賴于測(cè)試。因?yàn)樽鰹橐粋€(gè)本科畢業(yè)設(shè)計(jì),本系統(tǒng)并不會(huì)真正發(fā)布到廣大的用戶群中去,所以只能做測(cè)試,而無(wú)法完成測(cè)試。關(guān)于測(cè)試人員的安排,由我本人和莫景順一起做白盒測(cè)試,由同學(xué)幫助做黑盒測(cè)試。6.2 白盒測(cè)試6.2.1 測(cè)試環(huán)境配置白盒測(cè)試可在開發(fā)系統(tǒng)的本機(jī)上直接進(jìn)行,所以不需要進(jìn)行特殊的配置。6.2.2 正確性測(cè)試正確性測(cè)試檢查軟件的功能是否符合規(guī)格說明。由于正確性是軟件最重要的質(zhì)量因素,所以其測(cè)試也最重要。在集成p2p文本聊天時(shí),最開始只
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025物業(yè)租賃合同補(bǔ)充協(xié)議
- 2025家庭全包裝修合同樣本
- 2025贈(zèng)與合同范本模板
- 四川省南充市西充縣天寶初級(jí)中學(xué)2024-2025學(xué)年八年級(jí)下學(xué)期期中考試語(yǔ)文試卷(含答案)
- 電梯定期檢驗(yàn)合同協(xié)議
- 瓷磚加固工程合同協(xié)議
- 電商居間協(xié)議合同協(xié)議
- 特殊鋼板采購(gòu)合同協(xié)議
- 白酒代理經(jīng)銷合同協(xié)議
- 玻璃窗施工合同協(xié)議
- 六、七年級(jí)走進(jìn)文言文譯文
- 旅館業(yè)特種行業(yè)許可審批告知承諾書
- 鼻前庭囊腫摘除術(shù)后護(hù)理查房
- 幼兒園中班美術(shù)《瘋狂的頭發(fā)》課件
- 2023自然語(yǔ)言處理導(dǎo)論
- 南京文化與歷史課件
- 半月板損傷的護(hù)理查房
- 滬教版初中數(shù)學(xué)初二數(shù)學(xué)上冊(cè)《二次根式的運(yùn)算》教學(xué)設(shè)計(jì)
- 緩交訴訟費(fèi)申請(qǐng)書模板
- 糧庫(kù)出租合同書本
- 皮膚科治療知情同意書
評(píng)論
0/150
提交評(píng)論