2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  局域網(wǎng)聊天工具設(shè)計(jì)1</p><p>  ——文本聊天、語音聊天、好友列表及用戶信息管理1</p><p>  LAN Chat Tool Design2</p><p>  ——Text chat, file transfer and user ma

2、nagement2</p><p><b>  第1章 引言3</b></p><p>  1.1 系統(tǒng)開發(fā)的背景3</p><p>  1.2 聊天工具開發(fā)的目標(biāo)3</p><p>  1.3 聊天工具開發(fā)的現(xiàn)實(shí)意義3</p><p>  第2章 開發(fā)平臺(tái)與相關(guān)知識(shí)簡介5</p

3、><p>  2.1 系統(tǒng)綜合要求5</p><p>  2.1.1 硬件要求:5</p><p>  2.1.2 程序運(yùn)行環(huán)境:5</p><p>  2.2 C# 簡介5</p><p>  2.3 MicroSoft .NET Framework 簡介5</p><p>  2.4

4、Microsoft DirectX SDK 簡介6</p><p>  2.5 .NET 與多線程技術(shù)6</p><p>  2.6 C/S結(jié)構(gòu)與WINDOWS SOCKETS網(wǎng)絡(luò)編程6</p><p>  2.7 XML簡介9</p><p>  第3章 需求分析10</p><p>  3.1 用戶需求

5、10</p><p>  3.2 系統(tǒng)功能需求10</p><p>  3.3 性能要求10</p><p>  3.4 測試環(huán)境規(guī)定11</p><p>  3.5 可行性研究11</p><p>  第4章 系統(tǒng)設(shè)計(jì)12</p><p>  4.1 系統(tǒng)目標(biāo)12</p>

6、;<p>  4.2 系統(tǒng)功能結(jié)構(gòu)12</p><p>  4.3 業(yè)務(wù)流程圖13</p><p>  4.4 系統(tǒng)模塊劃分13</p><p>  第5章 系統(tǒng)模塊詳細(xì)設(shè)計(jì)14</p><p>  5.1 文本聊天模塊實(shí)現(xiàn)14</p><p>  5.1.1 文本聊天模塊概述14</p

7、><p>  5.1.2 文本聊天服務(wù)器工作原理14</p><p>  5.1.3 文本聊天客戶端工作原理15</p><p>  5.1.4 P2P文本聊天16</p><p>  5.2 語音聊天模塊實(shí)現(xiàn)19</p><p>  5.2.1 文件傳輸模塊概述19</p><p>  

8、5.2.2 文件傳輸接收端工作原理19</p><p>  5.2.3 文件傳輸發(fā)送端工作原理20</p><p>  5.2.4 P2P語音聊天21</p><p>  5.3 用戶管理模塊實(shí)現(xiàn)24</p><p>  5.3.1 用戶管理模塊概述24</p><p>  5.3.2 用戶數(shù)據(jù)模型24&l

9、t;/p><p>  5.3.3 XML文檔結(jié)構(gòu)設(shè)計(jì)25</p><p>  5.3.4 用戶信息的保存25</p><p>  5.3.5 用戶數(shù)據(jù)的遍歷26</p><p>  第6章 系統(tǒng)測試28</p><p>  6.1 系統(tǒng)測試概述28</p><p>  6.2 白盒測試2

10、8</p><p>  6.2.1 測試環(huán)境配置28</p><p>  6.2.2 正確性測試28</p><p>  6.3 黑盒測試29</p><p>  6.3.1 測試環(huán)境配置29</p><p>  6.3.2 功能性測試29</p><p>  6.3.3 容錯(cuò)性測試

11、29</p><p>  6.3.4 性能與效率測試30</p><p>  6.3.5 易用性測試31</p><p>  6.3.6 文檔測試31</p><p>  第7章 主要問題及解決32</p><p>  7.1 多線程問題32</p><p>  7.2 套接字異常3

12、2</p><p>  7.3 網(wǎng)絡(luò)流異常32</p><p><b>  參考文獻(xiàn)33</b></p><p><b>  附錄34</b></p><p><b>  局域網(wǎng)聊天工具設(shè)計(jì)</b></p><p>  ——文本聊天、語音聊天、好友

13、列表及用戶信息管理</p><p>  摘要:隨著計(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ì)將語音聊天、文本聊天和文

14、件傳輸?shù)裙δ芫C合在一個(gè)客戶端程序之內(nèi),使用C#語言進(jìn)行網(wǎng)絡(luò)編程,用多線程實(shí)現(xiàn)不同的并行任務(wù),使用可擴(kuò)展標(biāo)記語言xml進(jìn)行簡單的數(shù)據(jù)存儲(chǔ)和管理,并進(jìn)行了人性化的界面設(shè)計(jì),使用起來簡單方便,并且功能十分合理,又易于擴(kuò)展以及個(gè)性化定制。</p><p>  關(guān)鍵詞:局域網(wǎng);文本聊天;可擴(kuò)展標(biāo)記語言;多線程</p><p>  LAN Chat Tool Design</p><

15、;p>  ——Text chat, file transfer and user management</p><p>  Abstract:Along with the high-speed development of the computer network technology, various of applications which are based on network were born

16、, 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

17、 join into INTERNET, the real-time LAN-based communication tools emerged. this paper proposed a LAN chat tool designing, and then impleme</p><p>  Key words: LAN; text-chat; file-transfer; xml; multi-threade

18、d</p><p><b>  第1章 引言</b></p><p>  1.1 系統(tǒng)開發(fā)的背景</p><p>  當(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í)生活中人們可以通過多種手段與家人親戚朋友交

19、流通訊,像電話,電子郵件等。但這些手段都有些缺點(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è)空白。</p><p>  在互聯(lián)網(wǎng)相當(dāng)普及的今天,在互聯(lián)網(wǎng)上聊天對很多“網(wǎng)蟲”來說已經(jīng)是家常便飯了。聊天室程序可以說是網(wǎng)上最簡單的多點(diǎn)通信程序。一個(gè)簡單的聊天室, 從程序員的觀點(diǎn)來看就是在多

20、個(gè)I/O端點(diǎn)之間實(shí)現(xiàn)多對多的通信。</p><p>  廣域網(wǎng)上的即時(shí)通信工具,如今一般采用UDP或者 TCP協(xié)議體系來實(shí)現(xiàn),開發(fā)技術(shù)已經(jīng)比較成熟,這些軟件,在使用方面各有特色,在實(shí)現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運(yùn)營階段,其實(shí)現(xiàn)方式屬于商業(yè)機(jī)密,具體細(xì)節(jié)不可能得知,但是它在大的方面無非就是利用各種平臺(tái)上的網(wǎng)絡(luò)通信接口,建構(gòu)基于TCP/IP,或者UDP協(xié)議的軟件產(chǎn)品。</p><p&g

21、t;  網(wǎng)絡(luò)的飛速發(fā)展使網(wǎng)絡(luò)應(yīng)用程序的開發(fā)地位顯的越來越重要,而網(wǎng)絡(luò)應(yīng)用程序的開發(fā)和傳統(tǒng)應(yīng)用程序的開發(fā)在思想和實(shí)現(xiàn)上有很大的區(qū)別,隨著網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫管理系統(tǒng)的發(fā)展,C/S體系結(jié)構(gòu)在軟件的開發(fā)中越來越流行。因?yàn)檫@種結(jié)構(gòu)的應(yīng)用軟件可以充分發(fā)揮網(wǎng)絡(luò)的作用和數(shù)據(jù)庫系統(tǒng)的優(yōu)勢,以滿足人們各種應(yīng)用的需求。</p><p>  1.2 聊天工具開發(fā)的目標(biāo)</p><p>  本設(shè)計(jì)的主要工作是設(shè)計(jì)一個(gè)

22、基于WINDOWS平臺(tái)的局域網(wǎng)即時(shí)聊天工具,具體是采用P2P模式實(shí)現(xiàn)用戶之間的通信,然后闡述本軟件的功能、特點(diǎn)及使用方法,并詳細(xì)闡述開發(fā)本軟件所用的相關(guān)技術(shù),具體分析本軟件的各個(gè)模塊的功能及實(shí)現(xiàn)方法,說明本軟件的設(shè)計(jì)思想及方法。</p><p>  1.3 聊天工具開發(fā)的現(xiàn)實(shí)意義</p><p>  局域網(wǎng)聊天工具,是在局域網(wǎng)內(nèi)部使用的,用戶之間用來交流的一個(gè)工具,一般都具有文本聊天和文件

23、傳輸功能。局域網(wǎng)聊天軟件因其使用簡單,系統(tǒng)資源消耗少等優(yōu)點(diǎn),成為各企事業(yè)單位等的局域網(wǎng)內(nèi)廣泛應(yīng)用的軟件之一。</p><p>  當(dāng)前的局域網(wǎng)聊天工具有很多,最有名的算IPMSG(飛鴿傳書)。Ipmsg能夠?qū)崿F(xiàn)局域網(wǎng)內(nèi)消息、文件傳遞。但是,ipmsg 在某些時(shí)候,在同一vlan下的用戶,能夠彼此看見對方,卻不能通信,因?yàn)槠洳捎玫氖莡dp協(xié)議作為消息傳遞協(xié)議,而這種傳輸是不穩(wěn)定的,所以有時(shí)候能看到對方的用戶之間不能

24、實(shí)現(xiàn)互相通信,怎么辦呢?一種解決方法就是,采用tcp協(xié)議,面向連接的傳輸層協(xié)議作為消息傳遞協(xié)議,開發(fā)出相應(yīng)的網(wǎng)絡(luò)應(yīng)用程序就能夠?qū)崿F(xiàn)彼此連接的雙方進(jìn)行信息的傳遞。</p><p>  隨著互聯(lián)網(wǎng)的不斷發(fā)展,“互聯(lián)網(wǎng)要擔(dān)當(dāng)起通訊大任”的聲音不絕于耳。未來的電信業(yè)務(wù)將呈現(xiàn)多元化格局。同樣是話音業(yè)務(wù),可能是PSTN網(wǎng)絡(luò)(傳統(tǒng)電話網(wǎng))提供的,可能是Internet提供的,還可能是有線電視網(wǎng)絡(luò),甚至電力網(wǎng)、煤氣管道網(wǎng)提供的。

25、而用戶的選擇也將包括電腦與電腦、電腦與電話、電話與電話、電話與(智能)手機(jī)等通話方式。這一切,都是以IP為基礎(chǔ)的通訊網(wǎng)絡(luò),而非傳統(tǒng)通訊模式的電信服務(wù)。所以,VOIP將是聊天工具的一個(gè)發(fā)展方向。</p><p>  現(xiàn)有的局域網(wǎng)聊天工具,一般都不具備語音聊天的功能,本軟件集成了語音聊天模塊,用戶可以通過此軟件實(shí)現(xiàn)語音互通,提高局域網(wǎng)用戶之間信息傳遞效率以及交流質(zhì)量。通過開發(fā)本軟件,可以了解當(dāng)前流行的voip技術(shù),練

26、習(xí)socket編程,擴(kuò)展知識(shí)面,鍛煉編程的能力等,所以極具研究價(jià)值。</p><p>  第2章 開發(fā)平臺(tái)與相關(guān)知識(shí)簡介</p><p>  2.1 系統(tǒng)綜合要求</p><p>  2.1.1 硬件要求:</p><p>  PC機(jī):2臺(tái)或者2臺(tái)以上,RAM256MB以上,CPU400MHZ以上,硬盤40GB以上、耳麥各2副</p&g

27、t;<p><b>  局域網(wǎng)</b></p><p>  2.1.2 程序運(yùn)行環(huán)境:</p><p>  系統(tǒng)開發(fā)平臺(tái):Microsoft Visual Strdio 2008</p><p>  Microsoft DirectX SDK (November 2008)</p><p><b>

28、;  系統(tǒng)開發(fā)語言:C#</b></p><p>  運(yùn)行平臺(tái):Window2000,Windows Xp,Windows Server 2003</p><p>  運(yùn)行環(huán)境:Microsoft .Net Freamwork 2.0</p><p>  分辨率:最佳效果 1024×768</p><p><b&g

29、t;  2.2 C# 簡介</b></p><p>  C#(發(fā)音為C Sharp)是由微軟公司所開發(fā)的一種面向?qū)ο?,且運(yùn)行于.NET Framework之上的高級程序設(shè)計(jì)語言。</p><p>  C#的設(shè)計(jì)目的是簡化網(wǎng)絡(luò)應(yīng)用。使用C#語言能夠迅速地架構(gòu)基于Windows和Internet的應(yīng)用程序和組件,如標(biāo)準(zhǔn)的Windows應(yīng)用程序和控制臺(tái)應(yīng)用程序,編譯后生成的文件擴(kuò)展名

30、為EXE;程序庫應(yīng)用程序,編譯后生成的文件擴(kuò)展名為DLL,主要用來共享程序代碼。</p><p>  2.3 MicroSoft .NET Framework 簡介</p><p>  .NET Framework 是由微軟開發(fā),一個(gè)致力于敏捷軟件開發(fā)(Agile software development)、快速應(yīng)用開發(fā)(Rapid application development)、平臺(tái)無

31、關(guān)性和網(wǎng)絡(luò)透明化的軟件開發(fā)平臺(tái)。.NET是微軟為下一個(gè)十年對服務(wù)器和桌上型軟件工程邁出的第一步。NET 包含許多有助于Internet和Intranet應(yīng)用迅捷開發(fā)的技術(shù)。</p><p>  .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è)

32、計(jì)編程界面。.NET 設(shè)計(jì)得足夠通用化從而使許多不同高級語言都得以被匯集。</p><p>  2.4 Microsoft DirectX SDK 簡介</p><p>  SDK 是 Software Development Kit 的縮寫,中文意思就是“軟件開發(fā)工具包”。這是一個(gè)覆蓋面相當(dāng)廣泛的名詞,可以這么說:輔助開發(fā)某一類軟件的相關(guān)文檔、范例和工具的集合都可以叫做 “SDK”。具體

33、到我們這個(gè)系列教程,我們后面只討論廣義 SDK 的一個(gè)子集——即開發(fā) Windows 平臺(tái)下的應(yīng)用程序所使用的 SDK。</p><p>  SDK提供了一整套開發(fā) Windows 應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。</p><p>  由于SDK 包含了使用 API的必需資料,所以人們也常把僅使用 API 來編寫 Windows 應(yīng)用程序的開發(fā)方式叫做“SDK 編程”。而

34、API 和 SDK 是開發(fā) Windows 應(yīng)用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如 VCL 和 MFC,雖然他們比起“SDK 編程”來有著更高的抽象度,但這絲毫不妨礙它們在需要的時(shí)候隨時(shí)直接調(diào)用 API 函數(shù)。</p><p>  2.5 .NET 與多線程技術(shù)</p><p>  多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在

35、同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。</p><p>  在本質(zhì)上和結(jié)構(gòu)來說,.NET是一個(gè)多線程的環(huán)境。有兩種主要的多線程方法是.NET所提倡的:使用ThreadStart來開始你自己的進(jìn)程,直接的 (使用ThreadPool.QueueUserWorkItem)或者間接的(比如Stream.BeginRead,或者調(diào)用 BeginInvoke)使用ThreadPool類。線程的基類是System.Thre

36、ading。所有線程通過CLI來進(jìn)行管理。</p><p>  2.6 C/S結(jié)構(gòu)與WINDOWS SOCKETS網(wǎng)絡(luò)編程</p><p>  通常的通信工具,都采用客戶機(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ù)請求。有時(shí),可能有多個(gè)客戶向同一

37、個(gè)服務(wù)器同時(shí)請求服務(wù),這就需要服務(wù)器決定怎樣處理這些請求。Client/Server結(jié)構(gòu)是當(dāng)前數(shù)據(jù)庫應(yīng)用程序中極為流行的一種方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來,任何客戶機(jī)都可以通過訪問服務(wù)器而獲得所需的信息。Client/Server模型最終可歸結(jié)為一種“請求/應(yīng)答”關(guān)系

38、。一個(gè)請求總是首先被客戶發(fā)出,然后服務(wù)器總是被動(dòng)地接收請求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請求之前,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個(gè)客戶提出請求后,服務(wù)進(jìn)程被“喚醒”并且為客戶提供服務(wù),對客戶的請求做出所需要的應(yīng)答,如圖2-1所示。</p><p>  圖2-1 客戶機(jī)/服務(wù)器通信結(jié)構(gòu)示圖</p><p>  為了方便Client/Server模型的網(wǎng)絡(luò)編程,90年代初,由Microso

39、ft聯(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é)議無關(guān),你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。</p><p>  在IP連接領(lǐng)域有兩種通信類型:面向連接的(Connection-oriented

40、 ) 和無連接的(Connectionless)。在面向連接的套接字中,使用TCP協(xié)議來建立兩個(gè)IP地址端點(diǎn)之間的會(huì)話。一旦建立了這種連接,就可以在設(shè)備之間可靠地傳輸數(shù)據(jù)。為了建立面向連接的套接字,服務(wù)器端和客戶端必須分別進(jìn)行編程。</p><p>  在System.Net.Sockets 名空間下,有兩個(gè)專門用于TCP協(xié)議編程的類:TcpClient類和TcpListener類。這兩個(gè)類提供了直觀的易于使用的

41、屬性和方法,從而降低了TCP協(xié)議編程的難度。一般情況下,使用TcpClient連接、發(fā)送和接收數(shù)據(jù),使用TcpListener監(jiān)聽是否有傳入的連接請求,使用Close()方法釋放與TcpClient關(guān)聯(lián)的所有資源。</p><p>  C/S 模式下Windows socket編程示意圖,如圖2-2所示。</p><p>  圖2-2 C/S 模式下socket編程</p>

42、<p>  具體到這個(gè)項(xiàng)目,服務(wù)器只是用來驗(yàn)證用戶的登錄,以及廣播用戶的登錄狀態(tài)等。具體的通信,采用P2P模式,每兩個(gè)客戶端要進(jìn)行連接通信時(shí)都直接連通而不用通過服務(wù)器來進(jìn)行信息的中轉(zhuǎn),這樣設(shè)計(jì)的優(yōu)點(diǎn)是既可以對用戶進(jìn)行管理,又不會(huì)造成服務(wù)器的通信負(fù)擔(dān)。所以,系統(tǒng)結(jié)構(gòu)將設(shè)計(jì)成如圖2-3的方式。</p><p>  圖2-3 客戶機(jī)直接通信結(jié)構(gòu)示圖</p><p><b> 

43、 2.7 XML簡介</b></p><p>  XML(Extensible Markup Language)即可擴(kuò)展標(biāo)記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)。Xml是Internet環(huán)境中跨平臺(tái)的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴(kuò)展標(biāo)記語言XML是一種簡單的數(shù)據(jù)存儲(chǔ)語言,使用一系列

44、簡單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但XML極其簡單易于掌握和使用。 XML與Access,Oracle和SQL Server等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。 <

45、/p><p>  XML的簡單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。</p><p>  XML的主要作用有:&l

46、t;/p><p>  (1)豐富文件(Rich Documents)- 自定文件描述并使其更豐富 </p><p>  (2)屬于文件為主的XML技術(shù)應(yīng)用 </p><p>  (3)標(biāo)記是用來定義一塊數(shù)據(jù)應(yīng)該如何呈現(xiàn) (4)解釋數(shù)據(jù)(Metadata)- 描述其它文件或在線信息 (5)屬于數(shù)據(jù)為主的XML技術(shù)應(yīng)用 (6)標(biāo)記是用來說明一塊資料的意義 (

47、7)組態(tài)檔案(Configuration Files)- 描述軟件的組態(tài)參數(shù)</p><p><b>  第3章 需求分析</b></p><p><b>  3.1 用戶需求</b></p><p>  隨著中小型企事業(yè)的不斷發(fā)展,在企業(yè)內(nèi)部實(shí)現(xiàn)局域網(wǎng)通信是必不可少的。局域聊工具就是一個(gè)非常好的局域網(wǎng)通信軟件,它可以在職

48、工不移動(dòng)位置的情況下進(jìn)行在線聊天、文件傳遞、語音聊天。這樣,可以大大提高企業(yè)的工作效率,便于企業(yè)內(nèi)部職員的交流。根據(jù)用戶對聊天工具的要求,可分為以下幾點(diǎn):</p><p>  操作簡單方便、界面簡潔美觀。</p><p>  客戶端能夠注冊新用戶</p><p>  可以在局域網(wǎng)實(shí)現(xiàn)文字和文件的傳輸</p><p>  可以進(jìn)行聊天記錄保存&

49、lt;/p><p>  可以實(shí)現(xiàn)局域網(wǎng)語音聊天</p><p>  系統(tǒng)運(yùn)行穩(wěn)定、安全可靠</p><p>  3.2 系統(tǒng)功能需求</p><p>  這個(gè)程序要實(shí)現(xiàn)的功能如下:</p><p>  程序啟動(dòng)之后就能看到當(dāng)前哪些機(jī)器在線,哪些可以與之進(jìn)行對等通信。</p><p>  一旦有某個(gè)網(wǎng)

50、內(nèi)的機(jī)器上線了,要有即時(shí)通知,并能及時(shí)更新用戶界面中的用戶列表。</p><p>  (3)當(dāng)雙擊某個(gè)列表項(xiàng)的時(shí)候,要彈出聊天對話框,可以在其中編輯要發(fā)送的聊天信息,并進(jìn)行發(fā)送。</p><p>  (4)聊天界面要人性化,下面是發(fā)送框,上面有已有聊天記錄,并借助滾動(dòng)條看到當(dāng)次所有的聊天記錄。</p><p>  當(dāng)有遠(yuǎn)程用戶向本機(jī)發(fā)送文件的時(shí)候,要彈出一個(gè)消息提示

51、框,提示本機(jī)用戶,可以選擇接收或者拒絕。</p><p>  當(dāng)用戶覺得有必要保存聊天記錄時(shí),提供一個(gè)簡單的聊天記錄保存功能。</p><p>  文件傳輸過程中,應(yīng)該有當(dāng)前傳輸狀態(tài)提示,并能夠?qū)鬏敽臅r(shí)等進(jìn)行計(jì)算,作為當(dāng)前網(wǎng)絡(luò)狀態(tài)的一種反饋。</p><p><b>  3.3 性能要求</b></p><p>  首

52、先要求程序要完全可靠,可以應(yīng)付各種由于系統(tǒng)問題產(chǎn)生的錯(cuò)誤,比如初始網(wǎng)絡(luò)失敗,對方突然下線等。要求提前設(shè)想到類似的盡可能多的可能發(fā)生的事件,做出相應(yīng)的應(yīng)對措施,并向用戶提交簡單易懂清晰明白的提示信息。</p><p>  程序要有良好的容錯(cuò)性,當(dāng)用戶進(jìn)行非法操作時(shí)或者系統(tǒng)本身出現(xiàn)問題時(shí)要能以最好的方式退出程序,避免發(fā)生程序假死現(xiàn)象。</p><p>  開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要

53、交由別人接手開發(fā),或者自己由于種種原因需要進(jìn)行二次開發(fā),那么要保證以后能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路以及實(shí)現(xiàn)細(xì)節(jié)。</p><p>  要求程序?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ù)困難。</p><p>  3.

54、4 測試環(huán)境規(guī)定</p><p>  在開發(fā)過程中由開發(fā)人員自己,也就是我和搭檔莫景順隨時(shí)進(jìn)行內(nèi)部部分白盒測試,在開發(fā)完成以后,自己進(jìn)行一個(gè)全面的白盒測試,然后請同學(xué)幫忙進(jìn)行黑盒測試。</p><p><b>  3.5 可行性研究</b></p><p> ?。?)成本可行性分析</p><p>  本軟件只做開發(fā)學(xué)習(xí)

55、使用,所以暫且不考慮經(jīng)濟(jì)成本及盈利問題。</p><p> ?。?)技術(shù)可行性分析</p><p>  開發(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)品也已有例

56、在先,所以這個(gè)程序的開發(fā)在技術(shù)上是完全可行的。</p><p><b>  第4章 系統(tǒng)設(shè)計(jì)</b></p><p><b>  4.1 系統(tǒng)目標(biāo)</b></p><p>  根據(jù)用戶對聊天系統(tǒng)的要求,本聊天軟件可以實(shí)現(xiàn)以下目標(biāo):</p><p><b>  (1)用戶管理</b&g

57、t;</p><p><b>  (2)登錄</b></p><p>  (3)當(dāng)有用戶登錄時(shí)會(huì)在客戶端在線用戶中添加顯示出來</p><p>  (4)當(dāng)有用戶下線時(shí)會(huì)從客戶端在線用戶中刪除其信息</p><p>  (5)實(shí)現(xiàn)客戶端間的文本聊天</p><p>  (6)實(shí)現(xiàn)客戶端間的語音聊天

58、</p><p>  (7)實(shí)現(xiàn)客戶端間的文件傳輸</p><p>  (8)實(shí)現(xiàn)聊天記錄的保存</p><p>  4.2 系統(tǒng)功能結(jié)構(gòu)</p><p>  本系統(tǒng)中主要包括兩個(gè)部分:服務(wù)器端和客戶端。</p><p>  服務(wù)器端的功能包括:驗(yàn)證客戶注冊、添加新用戶、驗(yàn)證客戶登錄、廣播登錄用戶信息、廣播下線用戶信息

59、。</p><p>  客戶端的功能包括:注冊新用戶、用戶登錄、文本聊天、語音聊天、文件傳輸。</p><p>  客戶端功能結(jié)構(gòu)如圖4-1所示。</p><p>  圖4-1 客戶端功能結(jié)構(gòu)</p><p><b>  4.3 業(yè)務(wù)流程圖</b></p><p>  局域網(wǎng)聊天系統(tǒng)的業(yè)務(wù)流程圖如

60、圖4-2所示。</p><p>  圖4-2 系統(tǒng)業(yè)務(wù)流程圖</p><p>  4.4 系統(tǒng)模塊劃分</p><p>  由圖4-1我們可以看出系統(tǒng)主要分為服務(wù)器端和客戶端兩大部分,經(jīng)過商討,我們決定把系統(tǒng)分為六個(gè)模塊:服務(wù)器模塊、客戶端模塊、語音聊天模塊、文本聊天模塊、文件傳輸模塊、用戶管理模塊。</p><p>  此系統(tǒng)由2個(gè)成員共同

61、完成,各成員分工情況如表4-1所示。</p><p>  表4-1小組成員分工情況表</p><p>  第5章 系統(tǒng)模塊詳細(xì)設(shè)計(jì)</p><p>  在本次開發(fā)過程中,我主要負(fù)責(zé)文本聊天、文件傳輸和用戶管理模塊的設(shè)計(jì)和實(shí)現(xiàn),現(xiàn)詳細(xì)地介紹這三個(gè)模塊的實(shí)現(xiàn)。</p><p>  5.1 文本聊天模塊實(shí)現(xiàn)</p><p>

62、;  5.1.1 文本聊天模塊概述</p><p>  凡是聊天工具,都少不了文本聊天功能,這是個(gè)基礎(chǔ)功能。通過文本聊天,局域網(wǎng)內(nèi)用戶能夠發(fā)送和接收文字信息,并在程序窗體上顯示出來,相互之間進(jìn)行在線交流,并能根據(jù)用戶需要,對聊天記錄進(jìn)行簡單的保存。文本聊天的信息傳輸協(xié)議主要有面向連接的TCP和無連接的UDP。TCP協(xié)議是互聯(lián)網(wǎng)中最重的協(xié)議之一,主要特點(diǎn)是:保證數(shù)據(jù)包的準(zhǔn)確到達(dá);保證各數(shù)據(jù)包到達(dá)的順序和數(shù)據(jù)包發(fā)出的

63、順序相同。UDP協(xié)議提供了快速但不一定可靠的傳輸服務(wù),UDP協(xié)議采用無連接的套接字,不需要在網(wǎng)絡(luò)設(shè)備之間發(fā)送連接信息,和TCP相比,UDP缺乏雙方的握手信號,因此不保證數(shù)據(jù)包一定到達(dá)目的地,可靠性不如TCP,而且,由于UDP沒有任何對雙方會(huì)話的支持,不能保證各數(shù)據(jù)包到達(dá)的順序與數(shù)據(jù)包發(fā)出的順序相同。所以,在文本聊天模塊中,采用TCP協(xié)議來傳輸文本信息。</p><p>  5.1.2 文本聊天服務(wù)器工作原理<

64、;/p><p>  開啟服務(wù)器,文本聊天窗體加載成功后,將啟動(dòng)監(jiān)聽線程,服務(wù)器主要是負(fù)責(zé)監(jiān)聽局域網(wǎng)內(nèi)的用戶的連接請求。收到客戶發(fā)起的連接請求后,若服務(wù)器處于空閑狀態(tài),彈出消息提示框,對請求進(jìn)行處理,服務(wù)器可以選擇接受或者拒絕客戶端的連接。若同意連接,則返回給客戶端同意信號,開啟服務(wù)器的接收信息線程,并置消息發(fā)送事件為Enable。客戶端收到服務(wù)器返回的同意信號后,也開啟接收信息線程,并置消息發(fā)送事件為Enable。通

65、信雙方就可以進(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ā)送斷開信號,然后將釋放Socket和網(wǎng)絡(luò)流,不影響到下一次連接的接入。文本聊天服務(wù)器工作流程如圖5-1所示。</p><p>  圖5-1文本聊天服務(wù)器程序流程圖</p

66、><p>  5.1.3 文本聊天客戶端工作原理</p><p>  客戶端用來向服務(wù)器端發(fā)起一個(gè)連接,等待服務(wù)器的允許接入確認(rèn)。若服務(wù)器端同意連接請求,接收到服務(wù)器的同意連接信號后,開啟接收信息線程,并置消息發(fā)送事件為Enable,通信雙方就可以進(jìn)行文本聊天了。若服務(wù)器端拒絕連接,則釋放Socket連接并關(guān)閉網(wǎng)絡(luò)流。若已建立連接,當(dāng)斷開連接時(shí),將向?qū)Ψ桨l(fā)送斷開信號,然后將釋放Socket和網(wǎng)

67、絡(luò)流,不影響到下一次連接的發(fā)起。文本聊天客戶端工作流程圖如圖5-2所示。</p><p>  圖5-2 文本聊天客戶端程序流程圖</p><p>  5.1.4 P2P文本聊天</p><p><b>  1) 功能概述</b></p><p>  將文本聊天客戶端和服務(wù)器模塊,通過多線程技術(shù),集成在一個(gè)聊天窗體里面,窗

68、體加載時(shí)進(jìn)行監(jiān)聽,有連接請求到達(dá),則為服務(wù)器端;試圖連接遠(yuǎn)程用戶,則為客戶端。它是建立在TcpListener以及TcpClient這兩個(gè)類基礎(chǔ)上的。程序?qū)崿F(xiàn)的原理也比較簡單,但是用到了P2P技術(shù)"非中心化"的基本原則。簡言之,用這個(gè)程序可以在網(wǎng)絡(luò)中發(fā)送、接受消息,任何一臺(tái)計(jì)算機(jī)既可以作為服務(wù)器端,又可以作為客戶端。</p><p>  2) 集成文本聊天工作流程圖</p>&l

69、t;p>  集成主窗體創(chuàng)建后,加載監(jiān)聽線程。當(dāng)有接入連接請求,同意或拒絕接入請求,若同意,則按照文本聊天服務(wù)器模塊工作流程執(zhí)行。當(dāng)無接入請求,則判斷是否有嘗試連接遠(yuǎn)程服務(wù)端事件,若有,則按照文本聊天客戶端模塊工作流程執(zhí)行,如圖5-3所示。</p><p>  圖5-3 P2P文本聊天程序流程圖</p><p>  3) 集成主窗體設(shè)計(jì)</p><p>  主窗

70、體是用來與用戶交互用的,所以加載時(shí)間不能太長,響應(yīng)速度應(yīng)足夠快,操作簡單,設(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所示。</p><p>  圖5-4 集成主窗體界面</p><p>

71、;  文本聊天窗體主要控件屬性,見表5-1。</p><p>  表5-1 文本聊天窗體主要控件屬性表</p><p><b>  4) 具體實(shí)現(xiàn)</b></p><p><b>  1、定義相關(guān)變量。</b></p><p>  2、集成主窗體創(chuàng)建后,創(chuàng)建一個(gè)tcpListener的對象,端口為5

72、000,IP為任意。創(chuàng)建監(jiān)聽線程wait,wait線程執(zhí)行的是waitconn()方法,啟動(dòng)監(jiān)聽線程。調(diào)用getMyIP()方法用于獲取本地IP地址,并在連接建立時(shí)傳給對方。當(dāng)wait線程監(jiān)聽到遠(yuǎn)程用戶的接入連接請求,彈出消息提示框,用戶可以選擇同意或拒絕接入請求。若同意,則創(chuàng)建接收信息線程th,并啟動(dòng)th。若用戶拒絕遠(yuǎn)程接入請求,則關(guān)閉網(wǎng)絡(luò)流nss,關(guān)閉tcps,并調(diào)用disconnect()重新初始化相關(guān)變量。</p>

73、<p>  3、接收信息時(shí),嘗試讀取網(wǎng)絡(luò)流,采用的是Unicode編碼。讀取到的消息如果不為斷開連接信號,則在聊天記錄框里面顯示出來;若為斷開信號,則執(zhí)行disconnect()方法關(guān)閉當(dāng)前連接。</p><p>  4、當(dāng)無接入請求,則判斷用戶是否有嘗試連接遠(yuǎn)程服務(wù)端事件。若有,創(chuàng)建TcpClient的對象tcpc,并嘗試連接遠(yuǎn)程主機(jī)。</p><p>  5、連接建立后,用

74、戶單擊“發(fā)送消息”按鈕或者在輸入文本框內(nèi)按熱鍵“Alt+S”或“Ctrl+Enter”,觸發(fā)send_Click 事件。send_Click事件主要是將用戶的輸入通過Socket,采用網(wǎng)絡(luò)流的形式傳輸給遠(yuǎn)程用戶,編碼采用Unicode,同時(shí)在聊天記錄框里面顯示出來。</p><p>  6、斷開連接或關(guān)閉窗體,需要將Socket、網(wǎng)絡(luò)流以及接收信息線程th進(jìn)行關(guān)閉,重置各按鈕的可用狀態(tài)。若是關(guān)閉窗體,還需將wai

75、t線程關(guān)閉。</p><p>  5.2 文件傳輸模塊實(shí)現(xiàn)</p><p>  5.2.1 文件傳輸模塊概述</p><p>  除了文本聊天以外,局域網(wǎng)內(nèi)另外一個(gè)應(yīng)用是文件的共享。通過文件共享,企業(yè)能提高信息交換的速度,從而提高工作效率。文件共享的實(shí)現(xiàn)離不開文件傳輸。由于TCP協(xié)議能保證數(shù)據(jù)包的準(zhǔn)確到達(dá)以及各數(shù)據(jù)包到達(dá)的順序和數(shù)據(jù)包發(fā)出的順序相同,出于可靠性和效率

76、考慮,本模塊也采用TCP協(xié)議來進(jìn)行用戶之間文件的傳輸。</p><p>  5.2.2 文件傳輸接收端工作原理</p><p>  開啟窗體后,接收端執(zhí)行監(jiān)聽線程。當(dāng)接收到客戶發(fā)起的文件傳入請求后,彈出消息提示對話框,提示用戶對請求進(jìn)行處理,同意或者拒絕接收。若同意接收,則彈出文件保存對話框,用戶選擇文件保存路徑并確認(rèn)后,發(fā)送接收信號給文件發(fā)送端,啟動(dòng)計(jì)時(shí)器開始接收文件流,將遠(yuǎn)程文件保存在

77、本地,并在文件傳輸過程中對文件傳輸狀態(tài)進(jìn)行反饋,文件接收完畢后,關(guān)閉計(jì)時(shí)器,關(guān)閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若拒絕接收,則向發(fā)送端返回拒絕信號,繼續(xù)執(zhí)行監(jiān)聽線程,等待下一次的文件傳入請求。文件傳輸接收端工作流程圖如圖5-5所示。</p><p>  圖5-5 文件傳輸接收端程序流程圖</p><p>  5.2.3 文件傳輸發(fā)送端工作原理</p><p> 

78、 開啟窗體后,發(fā)送端選擇用戶需要發(fā)送的文件,向接收端發(fā)起的文件傳輸請求,若接收端端同意接收,開啟計(jì)時(shí)器,將本地文件通過網(wǎng)絡(luò)發(fā)送給接收端,并在文件傳輸過程中對文件傳輸狀態(tài)進(jìn)行反饋,文件發(fā)送完畢,關(guān)閉計(jì)時(shí)器,關(guān)閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若接收端拒絕接受文件,則取消本次文件發(fā)送,等待用戶的下一次文件發(fā)送事件。文件傳輸發(fā)送端工作流程圖如圖5-6所示。</p><p>  圖5-6 文件傳輸發(fā)送端程序流程圖&l

79、t;/p><p>  5.2.4 P2P文件傳輸</p><p><b>  1) 功能概述</b></p><p>  將文件發(fā)送端和接收端模塊,通過多線程技術(shù),集成在聊天窗體里面,窗體加載時(shí)進(jìn)行監(jiān)聽,有文件傳輸請求到達(dá),則為接收端,執(zhí)行接收端工作流程;若試圖發(fā)送文件到遠(yuǎn)程用戶,則為發(fā)送端,執(zhí)行發(fā)送端工作流程。這樣就實(shí)現(xiàn)了P2P模式對等傳輸。&l

80、t;/p><p>  2) P2P文件傳輸工作流程圖</p><p>  負(fù)責(zé)接收文件的監(jiān)聽線程集成在聊天窗體內(nèi),當(dāng)聊天窗體加載時(shí),將開啟此線程。當(dāng)有文件傳入請求,用戶可以同意或者拒絕接收,若同意接收,則按照文件傳輸接收端模塊工作流程執(zhí)行。若在聊天窗體生存周期內(nèi),無接入連接請求,則判斷是否有用戶嘗試發(fā)送文件事件,若有,則按照文件傳輸發(fā)送端模塊工作流程執(zhí)行。P2P文件傳輸工作流程圖如圖5-7所示

81、。</p><p>  圖5-7 P2P文件傳輸程序流程圖</p><p>  3) 文件傳輸發(fā)送端窗體</p><p>  文件發(fā)送主要作用是發(fā)送本地文件至遠(yuǎn)程接收端,所以功能盡可能簡單化,方便用戶操作,設(shè)計(jì)人性化。設(shè)計(jì)的時(shí)候,采用了一些簡單按鈕,布局也和常用的窗體類似。為方便用戶快速的選取發(fā)送文件,所以文件路徑選擇框支持拖拽功能。當(dāng)用戶未選取文件前,開始按鈕不可

82、用,當(dāng)用戶輸入的文件不存在時(shí),彈出消息提示框,提示文件不存在錯(cuò)誤。文件接收功能集成在聊天窗體內(nèi),文件發(fā)送窗體界面如圖5-8所示。</p><p>  圖5-8 文件發(fā)送窗體界面</p><p>  文件傳輸窗體主要控件屬性見表5-2。</p><p>  表5-2 文件傳輸窗體主要控件屬性</p><p><b>  4)具體實(shí)現(xiàn)&

83、lt;/b></p><p><b>  1、定義相關(guān)變量。</b></p><p>  2、主窗體加載時(shí),創(chuàng)建文件接收監(jiān)聽線程ReceiverWorker,并啟動(dòng)ReceiverWorker線程。ReceiverWorker線程執(zhí)行的是ReceiverStart()方法。在ReceiverStart()中,創(chuàng)建一個(gè)TcpListener的實(shí)例tcpListen

84、er,其監(jiān)聽局域網(wǎng)內(nèi)的任意IP地址在8088端口號上是否有傳入的連接嘗試。</p><p>  3、當(dāng)ReceiverWorker線程監(jiān)聽到遠(yuǎn)程用戶的文件傳入請求,彈出消息提示框,用戶可以選擇同意或拒絕文件傳入請求。若同意,用戶選擇文件保存路徑后,向發(fā)起方發(fā)送同意接受信號,并開啟計(jì)時(shí)器,讀取傳入的文件流并將其保存到本地文件,文件接收完畢時(shí)關(guān)閉計(jì)時(shí)器。若用戶拒絕文件傳入,則向遠(yuǎn)程主機(jī)發(fā)送一個(gè)拒絕信號。最后,執(zhí)行關(guān)閉

85、BinaryReader,關(guān)閉Socket等操作。</p><p>  4、當(dāng)用戶打開文件發(fā)送窗體,主窗體調(diào)用其帶ip參數(shù)的構(gòu)造方法,實(shí)參為當(dāng)前與之建立連接的遠(yuǎn)程主機(jī)的ip地址,用于發(fā)送文件時(shí)建立socket連接使用。</p><p>  5、當(dāng)用戶向txtFile文本框內(nèi)輸入所選取的待發(fā)送文件后,用戶單擊“開始”按鈕,開啟用于向遠(yuǎn)端發(fā)送文件的SenderWorker線程。SenderWo

86、rker線程執(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ā)。</p>&

87、lt;p>  5.3 用戶管理模塊實(shí)現(xiàn)</p><p>  5.3.1 用戶管理模塊概述</p><p>  不管是任何系統(tǒng),都必然會(huì)有用戶這個(gè)角色,因此用戶管理是每一個(gè)應(yīng)用中必不可少的部分。由于企業(yè)內(nèi)部的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進(jìn)行溝通與交流,所以在本局域網(wǎng)聊天工具中,設(shè)計(jì)一個(gè)簡單用戶管理模塊,對接入服務(wù)器的用戶進(jìn)行管理,能在一定程度上解決安全性問題。本模塊實(shí)現(xiàn)

88、采用了xml技術(shù),二次開發(fā)時(shí),通過一定的修改,能夠很好的移植到數(shù)據(jù)庫上。</p><p>  5.3.2 用戶數(shù)據(jù)模型</p><p>  本模塊實(shí)現(xiàn)一個(gè)簡單的用戶管理,所管理的目標(biāo)是局域網(wǎng)內(nèi)客戶端用戶。模塊中只涉及到用戶一個(gè)模型,涉及到的屬性項(xiàng)目有 "用戶ID"、"用戶名(姓名)"、"密碼"、"注冊時(shí)間"等,

89、其E-R圖如圖5-9所示。</p><p>  圖5-9 用戶信息E-R圖</p><p>  5.3.3 XML文檔結(jié)構(gòu)設(shè)計(jì)</p><p>  XML分為文件序言(Prolog)和文件主體兩個(gè)大的部分。在此文件中的第一行即是文件序言。它主要是告訴XML 解析器如何工作。其中,version 是標(biāo)明此 XML 文件所用的標(biāo)準(zhǔn)的版本號1.0,encoding 指明了

90、此XML 文件中所使用的字符類型為utf-8。文件的其余部分都是屬于文件主體,userInfos.xml文件的內(nèi)容信息存放在此。文件主體是由開始的<userInfosList>和結(jié)束的</userInfosList>控制標(biāo)記組成,這個(gè)稱XML文件的“根元素”;<user>是作為直屬于根元素下的“子元素”;在<user>下又有<userName>、<userPwd>

91、;、<datesInsert>這些子元素。id是<user>元素中的一個(gè)“屬性”,“1001”、“1002”等則是“屬性值”。userInfos.xml文檔結(jié)構(gòu)如圖5-10所示。</p><p>  圖5-10 userInfos.xml文檔結(jié)構(gòu)圖</p><p>  5.3.4 用戶信息的保存</p><p>  通過服務(wù)器監(jiān)聽,接收到客戶

92、端的注冊請求后,獲取注冊用戶的信息,判斷用戶是否為第一個(gè)注冊用戶,若是,則創(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,查找該注冊用戶名在userInfos.xml中是否已存在。若用戶名不存在,則在

93、userInfoList內(nèi)創(chuàng)建新的user節(jié)點(diǎn),然后在user節(jié)點(diǎn)下創(chuàng)建用戶名、密碼、創(chuàng)建時(shí)間等,將用戶信息添加進(jìn)userInfos.xml文檔中。若用戶名已被注冊,則通過服務(wù)器向客戶端返回用戶名已經(jīng)被注冊的提示信息。保存數(shù)據(jù)的流程圖如圖5-11所示。</p><p>  圖5-11 保存數(shù)據(jù)的程序流程圖</p><p>  5.3.5 用戶數(shù)據(jù)的遍歷</p><p&g

94、t;  在新用戶注冊或者已注冊用戶登錄時(shí),需要在userInfos.xml文檔中查找用戶名是否存在,這個(gè)就涉及到xml文件的遍歷。遍歷xml文件的主要流程是,先進(jìn)入<userInfoList>根節(jié)點(diǎn),開始對<user>節(jié)點(diǎn)進(jìn)行遍歷。若<user>節(jié)點(diǎn)不存在,則返回不存在信息,結(jié)束遍歷;否則進(jìn)入<user>節(jié)點(diǎn),對其子節(jié)點(diǎn)<userName>進(jìn)行對比。若匹配成功,則返回用戶名存在

95、信息;若不匹配,則繼續(xù)遍歷下一個(gè)<user>節(jié)點(diǎn)。工作流程圖如圖5-12所示。</p><p>  圖5-12 用戶數(shù)據(jù)的遍歷程序流程圖</p><p><b>  第6章 系統(tǒng)測試</b></p><p>  6.1 系統(tǒng)測試概述</p><p>  測試的目的是為了發(fā)現(xiàn)功能是否達(dá)到,或者是否有更多的缺陷!

96、</p><p>  這里的缺陷是泛稱的,它可以指功能的錯(cuò)誤,也可以指性能低下,易用性差等。測試總是先假設(shè)程序中存在缺陷,再通過執(zhí)行程序來發(fā)現(xiàn)并最終改正缺陷。理解測試的目的是個(gè)很重要的意識(shí)問題。如果說測試的目的是為了說明程序中沒有缺陷,那么測試人員就會(huì)向這個(gè)目標(biāo)靠攏,因而下意識(shí)地選用一些不易暴露錯(cuò)誤的測試示例。這樣的測試是虛假的。</p><p>  測試只能證明缺陷存在,而不能證明缺陷不

97、存在。</p><p>  這個(gè)真理告訴我們,對于一個(gè)復(fù)雜的系統(tǒng)而言,無論采取什么樣的測試手段都不能證明缺陷已經(jīng)不復(fù)存在。“徹底地測試”只是一種理想。在實(shí)踐中,測試要考慮時(shí)間、費(fèi)用等限制,不允許無休止地測試。</p><p>  測試有助于提高軟件的質(zhì)量,但是提高軟件的質(zhì)量不能依賴于測試。</p><p>  因?yàn)樽鰹橐粋€(gè)本科畢業(yè)設(shè)計(jì),本系統(tǒng)并不會(huì)真正發(fā)布到廣大的用

98、戶群中去,所以只能做α測試,而無法完成β測試。</p><p>  關(guān)于測試人員的安排,由我本人和莫景順一起做白盒測試,由同學(xué)幫助做黑盒測試。</p><p><b>  6.2 白盒測試</b></p><p>  6.2.1 測試環(huán)境配置</p><p>  白盒測試可在開發(fā)系統(tǒng)的本機(jī)上直接進(jìn)行,所以不需要進(jìn)行特殊的

99、配置。</p><p>  6.2.2 正確性測試</p><p>  正確性測試檢查軟件的功能是否符合規(guī)格說明。由于正確性是軟件最重要的質(zhì)量因素,所以其測試也最重要。</p><p>  在集成P2P文本聊天時(shí),最開始只能發(fā)起一次連接,通信雙方斷開連接而不退出程序時(shí),再次連接就提示套接字已被占用異常。通過在disconnect時(shí)關(guān)閉當(dāng)前的套接字,使之可以進(jìn)行多次連

100、接。</p><p>  當(dāng)兩個(gè)客戶端在建立連接時(shí),出現(xiàn)過程序假死異常。分析代碼發(fā)現(xiàn),線程調(diào)度出錯(cuò),接收消息線程th還未創(chuàng)建和啟動(dòng),監(jiān)聽線程wait已經(jīng)被銷毀了!修改代碼,給出兩種解決辦法:1、在th線程的執(zhí)行方法中,將wait線程銷毀;在th線程銷毀前,重新開啟wait線程。2、wait線程不銷毀。設(shè)置一bool類型變量isconnected,當(dāng)已經(jīng)建立連接后,isconnected=true,若再有其他的連接

101、請求到達(dá),自動(dòng)將其他連接請求拒絕。連接斷開后,重置isconnected=false,將處理移交給用戶。我采用了第一種方法,調(diào)試之后,問題解決。</p><p>  在程序退出時(shí),常常發(fā)生錯(cuò)誤,異常退出,造成表面上看程序已結(jié)束,但卻仍然駐留在內(nèi)存中的現(xiàn)象。經(jīng)過反復(fù)分析代碼,最終確定問題出在程序退出處理流程上,通過修改和調(diào)試,問題解決。</p><p>  整個(gè)開發(fā)過程中,共歷經(jīng)200多次相

102、互斷開、連接測試,P2P文本聊天模塊終于可以正常運(yùn)行。借助在P2P文本聊天模塊開發(fā)過程中積累的經(jīng)驗(yàn),較順利的完成了P2P文件傳輸模塊的開發(fā)。通過在總集成后的程序的各個(gè)流程中添加消息提示框顯示程序內(nèi)部數(shù)據(jù)、對象的狀態(tài),并插入斷點(diǎn)進(jìn)行單步跟蹤發(fā)現(xiàn)各模塊工作正常,數(shù)據(jù)也未發(fā)生異常現(xiàn)象。</p><p><b>  6.3 黑盒測試</b></p><p>  6.3.1 測

103、試環(huán)境配置</p><p>  用兩臺(tái)或兩臺(tái)以上機(jī)器通過交換機(jī)等構(gòu)成一個(gè)局域網(wǎng),進(jìn)行正確的網(wǎng)絡(luò)配置,每臺(tái)機(jī)器上都安裝了WINDOWS操作系統(tǒng)、DirectX SDK 以及.NET 2.0,并安裝了本軟件的正確拷貝。</p><p>  6.3.2 功能性測試</p><p>  先在其中一臺(tái)機(jī)器A上啟動(dòng)服務(wù)端軟件,開啟監(jiān)聽服務(wù)。當(dāng)A機(jī)器和B機(jī)器啟動(dòng)了客戶端軟件后,向

104、服務(wù)器進(jìn)行登錄操作,服務(wù)器端驗(yàn)證了用戶的登錄后,向局域網(wǎng)廣播客戶端的登錄狀態(tài)。A客戶端收到服務(wù)器發(fā)來的信息后,更新自己的用戶表,然后此時(shí),不管A,B雙方,只要雙擊用戶列表中相應(yīng)的項(xiàng)目,即可啟動(dòng)發(fā)信對話框,若B當(dāng)前為空閑狀態(tài),則雙方建立TCP連接,開始進(jìn)行聊天通信,可以進(jìn)行信息的輸入與發(fā)送,發(fā)起語聊,傳輸文件等。同時(shí),對方均可進(jìn)行正確的接收和回復(fù)。所以,功能測試為成功。</p><p>  6.3.3 容錯(cuò)性測試&

105、lt;/p><p>  容錯(cuò)性測試是檢查軟件在異常條件下的行為。容錯(cuò)性好的軟件能確保系統(tǒng)不發(fā)生無法意料的事故。</p><p>  經(jīng)檢查,當(dāng)用戶輸入無效操作時(shí),系統(tǒng)總是能檢測到無效操作,對用戶進(jìn)行相應(yīng)的信息反饋,并合理的做出內(nèi)部處理。當(dāng)系統(tǒng)本身發(fā)生錯(cuò)誤,比如網(wǎng)絡(luò)初始化失敗,綁定套接字失敗,數(shù)據(jù)讀取失敗等,都會(huì)進(jìn)行相對應(yīng)的正確處理。</p><p>  例如當(dāng)文件傳輸時(shí)

106、,用戶輸入的文件不存在,而單擊“開始”時(shí),會(huì)有如圖6-1所示的錯(cuò)誤提示。</p><p>  圖6-1 用戶操作出錯(cuò)信息提示示意圖</p><p>  6.3.4 性能與效率測試</p><p>  關(guān)于性能的問題,在語聊時(shí),未對語音輸入設(shè)備采集到的信息進(jìn)行編碼,緩沖數(shù)也較少,所以當(dāng)用戶所處環(huán)境較狹小時(shí),回音將產(chǎn)生嘯叫。改用麥克風(fēng)和耳機(jī)之后,一定程度上阻斷回音的影響

107、,通話質(zhì)量基本上能滿足要求。</p><p>  文件傳輸?shù)臅r(shí)候,通過對文件長度以及已傳輸信息量的相減運(yùn)算,顯示出當(dāng)前傳輸狀態(tài),需要占用較多的系統(tǒng)計(jì)算資源和時(shí)間,而且傳輸速度相對IPMSG等軟件,慢太多。這個(gè)問題,我通過對文件流緩沖的字節(jié)數(shù)進(jìn)行增大,設(shè)置為8KB后,計(jì)算量減少,傳輸速度明顯加快,通過計(jì)時(shí)器計(jì)時(shí),最后得出的傳輸速率與IPMSG相比,大致一樣。因?yàn)閷τ趲捪鄬^大,至少都是10Mbps的局域網(wǎng)來說,信

108、息的發(fā)送和接收,在局域網(wǎng)內(nèi)幾乎就是瞬間響應(yīng),造成速度瓶頸的不是網(wǎng)絡(luò)傳輸因素,而是頻繁的對磁盤設(shè)備進(jìn)行讀寫所致,而傳輸過程中頻繁的計(jì)算也是造成系統(tǒng)資源消耗過大的一個(gè)原因。通過改進(jìn)算法后,文件傳輸效率基本上能滿足用戶要求。另外,此設(shè)計(jì)中未限制傳輸文件的大小,經(jīng)測試,5GB以上的文件也能夠通過文件傳輸模塊進(jìn)行傳輸。因此,和其他的類似軟件相比較,有更大的應(yīng)用范圍。</p><p>  6.3.5 易用性測試</p&

109、gt;<p>  易用性測試沒有一個(gè)量化的指標(biāo),主觀性較強(qiáng)。一般認(rèn)為,如果一個(gè)系統(tǒng)可以讓用戶不查閱手冊即可正確使用其所有功能,那么這個(gè)系統(tǒng)就具有良好的易用性。本聊天工具使用過程中提示信息詳細(xì),界面友好,操作簡單,新用戶能夠很快學(xué)會(huì)使用,所以具有比較好的易用性。</p><p>  6.3.6 文檔測試</p><p>  在本系統(tǒng)的開發(fā)過程中,因?yàn)槭潜究飘厴I(yè)設(shè)計(jì),所以具有完備

110、的開題報(bào)告,文獻(xiàn)綜述,任務(wù)書,以及最終的論文做總結(jié)闡述,整個(gè)文檔所以說文檔方面也比較完整。</p><p>  第7章 主要問題及解決</p><p><b>  7.1 多線程問題</b></p><p>  因?yàn)楸鞠到y(tǒng)的客戶端程序采用P2P模式,每個(gè)用戶即可以使服務(wù)的發(fā)起端,又可以使服務(wù)的接收端,所以必須在程序加載時(shí)對網(wǎng)絡(luò)進(jìn)行監(jiān)聽,監(jiān)聽聊天

111、連接請求和文件傳輸連接請求,并能夠?qū)悍桨l(fā)起的事件進(jìn)行處理,因而必須在此應(yīng)用程序中使用多線程技術(shù),耗時(shí)的任務(wù)可以在后臺(tái)執(zhí)行,而使應(yīng)用程序窗口和控件保持響應(yīng)。對于應(yīng)用程序監(jiān)聽功能,多線程處理提供了用不同線程處理每個(gè)傳入請求的能力。否則,在完全滿足前一個(gè)請求之前,將無法處理其他的新的請求。在兩個(gè)用戶的通信過程中,任何一方斷開連接之后,要像對方發(fā)送斷開信號,而對方接收到傳入的斷開信號后,需斷開Socket、NetStream 等,并重新開啟監(jiān)

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論