已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
目錄局域網(wǎng)聊天工具設計1文本聊天、文件傳輸及用戶管理1lan chat tool design2text chat, file transfer and user management2第1章 引言31.1 系統(tǒng)開發(fā)的背景31.2 聊天工具開發(fā)的目標31.3 聊天工具開發(fā)的現(xiàn)實意義3第2章 開發(fā)平臺與相關知識簡介52.1 系統(tǒng)綜合要求52.1.1 硬件要求:52.1.2 程序運行環(huán)境:52.2 c# 簡介52.3 microsoft .net framework 簡介52.4 microsoft directx sdk 簡介62.5 .net 與多線程技術62.6 c/s結構與windows sockets網(wǎng)絡編程62.7 xml簡介9第3章 需求分析103.1 用戶需求103.2 系統(tǒng)功能需求103.3 性能要求103.4 測試環(huán)境規(guī)定113.5 可行性研究11第4章 系統(tǒng)設計124.1 系統(tǒng)目標124.2 系統(tǒng)功能結構124.3 業(yè)務流程圖134.4 系統(tǒng)模塊劃分13第5章 系統(tǒng)模塊詳細設計145.1 文本聊天模塊實現(xiàn)145.1.1 文本聊天模塊概述145.1.2 文本聊天服務器工作原理145.1.3 文本聊天客戶端工作原理155.1.4 p2p文本聊天165.2 文件傳輸模塊實現(xiàn)195.2.1 文件傳輸模塊概述195.2.2 文件傳輸接收端工作原理195.2.3 文件傳輸發(fā)送端工作原理205.2.4 p2p文件傳輸215.3 用戶管理模塊實現(xiàn)245.3.1 用戶管理模塊概述245.3.2 用戶數(shù)據(jù)模型245.3.3 xml文檔結構設計255.3.4 用戶信息的保存255.3.5 用戶數(shù)據(jù)的遍歷26第6章 系統(tǒng)測試286.1 系統(tǒng)測試概述286.2 白盒測試286.2.1 測試環(huán)境配置286.2.2 正確性測試286.3 黑盒測試296.3.1 測試環(huán)境配置296.3.2 功能性測試296.3.3 容錯性測試296.3.4 性能與效率測試306.3.5 易用性測試316.3.6 文檔測試31第7章 主要問題及解決327.1 多線程問題327.2 套接字異常327.3 網(wǎng)絡流異常32參考文獻33附錄3448局域網(wǎng)聊天工具設計 文本聊天、文件傳輸及用戶管理摘要:隨著計算機網(wǎng)絡技術的發(fā)展,各種各樣基于網(wǎng)絡的應用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布,通信,數(shù)據(jù)共享等等。局域網(wǎng)的發(fā)展也同樣迅速。很多政府機構,企業(yè),學校,都是先以一個統(tǒng)一的局域網(wǎng)聯(lián)結在一起,再分別接入internet。因此基于局域網(wǎng)的即時通信工具,就這樣應運而生了。本文提出了一個局域網(wǎng)聊天工具的設計,并在windows平臺上加以了實現(xiàn)。本設計將語音聊天、文本聊天和文件傳輸?shù)裙δ芫C合在一個客戶端程序之內(nèi),使用c#語言進行網(wǎng)絡編程,用多線程實現(xiàn)不同的并行任務,使用可擴展標記語言xml進行簡單的數(shù)據(jù)存儲和管理,并進行了人性化的界面設計,使用起來簡單方便,并且功能十分合理,又易于擴展以及個性化定制。關鍵詞:局域網(wǎng);文本聊天;文件傳輸;可擴展標記語言;多線程 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ā)的背景當今世界正處于信息時代,計算機和通信網(wǎng)絡是這一時代所謂“信息基礎設施”。隨著網(wǎng)絡的普及化,網(wǎng)絡作為人們相互間溝通與交流聯(lián)系的現(xiàn)代化工具日益重要,可以說現(xiàn)在人們的生活已經(jīng)離不開網(wǎng)絡。在現(xiàn)實生活中人們可以通過多種手段與家人親戚朋友交流通訊,像電話,電子郵件等。但這些手段都有些缺點,要么費用太高,要么實時性不強,要么1次只能和1位好友進行交流。于是這就需要1種便宜,快速,能同時與多個好友進行通訊的網(wǎng)絡工具的出現(xiàn),而網(wǎng)絡聊天工具就滿足了這些需求,填補了這個空白。在互聯(lián)網(wǎng)相當普及的今天,在互聯(lián)網(wǎng)上聊天對很多“網(wǎng)蟲”來說已經(jīng)是家常便飯了。聊天室程序可以說是網(wǎng)上最簡單的多點通信程序。一個簡單的聊天室, 從程序員的觀點來看就是在多個i/o端點之間實現(xiàn)多對多的通信。廣域網(wǎng)上的即時通信工具,如今一般采用udp或者 tcp協(xié)議體系來實現(xiàn),開發(fā)技術已經(jīng)比較成熟,這些軟件,在使用方面各有特色,在實現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運營階段,其實現(xiàn)方式屬于商業(yè)機密,具體細節(jié)不可能得知,但是它在大的方面無非就是利用各種平臺上的網(wǎng)絡通信接口,建構基于tcp/ip,或者udp協(xié)議的軟件產(chǎn)品。網(wǎng)絡的飛速發(fā)展使網(wǎng)絡應用程序的開發(fā)地位顯的越來越重要,而網(wǎng)絡應用程序的開發(fā)和傳統(tǒng)應用程序的開發(fā)在思想和實現(xiàn)上有很大的區(qū)別,隨著網(wǎng)絡技術和數(shù)據(jù)庫管理系統(tǒng)的發(fā)展,c/s體系結構在軟件的開發(fā)中越來越流行。因為這種結構的應用軟件可以充分發(fā)揮網(wǎng)絡的作用和數(shù)據(jù)庫系統(tǒng)的優(yōu)勢,以滿足人們各種應用的需求。1.2 聊天工具開發(fā)的目標本設計的主要工作是設計一個基于windows平臺的局域網(wǎng)即時聊天工具,具體是采用p2p模式實現(xiàn)用戶之間的通信,然后闡述本軟件的功能、特點及使用方法,并詳細闡述開發(fā)本軟件所用的相關技術,具體分析本軟件的各個模塊的功能及實現(xiàn)方法,說明本軟件的設計思想及方法。1.3 聊天工具開發(fā)的現(xiàn)實意義局域網(wǎng)聊天工具,是在局域網(wǎng)內(nèi)部使用的,用戶之間用來交流的一個工具,一般都具有文本聊天和文件傳輸功能。局域網(wǎng)聊天軟件因其使用簡單,系統(tǒng)資源消耗少等優(yōu)點,成為各企事業(yè)單位等的局域網(wǎng)內(nèi)廣泛應用的軟件之一。當前的局域網(wǎng)聊天工具有很多,最有名的算ipmsg(飛鴿傳書)。ipmsg能夠?qū)崿F(xiàn)局域網(wǎng)內(nèi)消息、文件傳遞。但是,ipmsg 在某些時候,在同一vlan下的用戶,能夠彼此看見對方,卻不能通信,因為其采用的是udp協(xié)議作為消息傳遞協(xié)議,而這種傳輸是不穩(wěn)定的,所以有時候能看到對方的用戶之間不能實現(xiàn)互相通信,怎么辦呢?一種解決方法就是,采用tcp協(xié)議,面向連接的傳輸層協(xié)議作為消息傳遞協(xié)議,開發(fā)出相應的網(wǎng)絡應用程序就能夠?qū)崿F(xiàn)彼此連接的雙方進行信息的傳遞。隨著互聯(lián)網(wǎng)的不斷發(fā)展,“互聯(lián)網(wǎng)要擔當起通訊大任”的聲音不絕于耳。未來的電信業(yè)務將呈現(xiàn)多元化格局。同樣是話音業(yè)務,可能是pstn網(wǎng)絡(傳統(tǒng)電話網(wǎng))提供的,可能是internet提供的,還可能是有線電視網(wǎng)絡,甚至電力網(wǎng)、煤氣管道網(wǎng)提供的。而用戶的選擇也將包括電腦與電腦、電腦與電話、電話與電話、電話與(智能)手機等通話方式。這一切,都是以ip為基礎的通訊網(wǎng)絡,而非傳統(tǒng)通訊模式的電信服務。所以,voip將是聊天工具的一個發(fā)展方向。現(xiàn)有的局域網(wǎng)聊天工具,一般都不具備語音聊天的功能,本軟件集成了語音聊天模塊,用戶可以通過此軟件實現(xiàn)語音互通,提高局域網(wǎng)用戶之間信息傳遞效率以及交流質(zhì)量。通過開發(fā)本軟件,可以了解當前流行的voip技術,練習socket編程,擴展知識面,鍛煉編程的能力等,所以極具研究價值。第2章 開發(fā)平臺與相關知識簡介2.1 系統(tǒng)綜合要求2.1.1 硬件要求:pc機:2臺或者2臺以上,ram256mb以上,cpu400mhz以上,硬盤40gb以上、耳麥各2副局域網(wǎng)2.1.2 程序運行環(huán)境:系統(tǒng)開發(fā)平臺:microsoft visual strdio 2005microsoft directx sdk (november 2008)系統(tǒng)開發(fā)語言:c#運行平臺:window2000,windows xp,windows server 2003運行環(huán)境:microsoft .net freamwork 2.0分辨率:最佳效果 10247682.2 c# 簡介c#(發(fā)音為c sharp)是由微軟公司所開發(fā)的一種面向?qū)ο?,且運行于.net framework之上的高級程序設計語言。c#的設計目的是簡化網(wǎng)絡應用。使用c#語言能夠迅速地架構基于windows和internet的應用程序和組件,如標準的windows應用程序和控制臺應用程序,編譯后生成的文件擴展名為exe;程序庫應用程序,編譯后生成的文件擴展名為dll,主要用來共享程序代碼。2.3 microsoft .net framework 簡介.net framework 是由微軟開發(fā),一個致力于敏捷軟件開發(fā)(agile software development)、快速應用開發(fā)(rapid application development)、平臺無關性和網(wǎng)絡透明化的軟件開發(fā)平臺。.net是微軟為下一個十年對服務器和桌上型軟件工程邁出的第一步。net 包含許多有助于internet和intranet應用迅捷開發(fā)的技術。.net 也為編程界面(api)提供了新功能和開發(fā)工具。這些革新使得程序設計員可以同時進行windows應用軟件和網(wǎng)絡應用軟件以及元件和服務(web service)的開發(fā)。.net 提供了一個新的反射性的且面向?qū)ο蟪绦蛟O計編程界面。.net 設計得足夠通用化從而使許多不同高級語言都得以被匯集。2.4 microsoft directx sdk 簡介sdk 是 software development kit 的縮寫,中文意思就是“軟件開發(fā)工具包”。這是一個覆蓋面相當廣泛的名詞,可以這么說:輔助開發(fā)某一類軟件的相關文檔、范例和工具的集合都可以叫做 “sdk”。具體到我們這個系列教程,我們后面只討論廣義 sdk 的一個子集即開發(fā) windows 平臺下的應用程序所使用的 sdk。sdk提供了一整套開發(fā) windows 應用程序所需的相關文件、范例和工具的“工具包”。由于sdk 包含了使用 api的必需資料,所以人們也常把僅使用 api 來編寫 windows 應用程序的開發(fā)方式叫做“sdk 編程”。而 api 和 sdk 是開發(fā) windows 應用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如 vcl 和 mfc,雖然他們比起“sdk 編程”來有著更高的抽象度,但這絲毫不妨礙它們在需要的時候隨時直接調(diào)用 api 函數(shù)。2.5 .net 與多線程技術多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務的時候被實現(xiàn)的。在本質(zhì)上和結構來說,.net是一個多線程的環(huán)境。有兩種主要的多線程方法是.net所提倡的:使用threadstart來開始你自己的進程,直接的 (使用threadpool.queueuserworkitem)或者間接的(比如stream.beginread,或者調(diào)用 begininvoke)使用threadpool類。線程的基類是system.threading。所有線程通過cli來進行管理。2.6 c/s結構與windows sockets網(wǎng)絡編程通常的通信工具,都采用客戶機/服務器(c/s)體系結構,c/s結構是這樣的一種結構:它包括一個客戶機(或前端),一個服務器(或稱后端),客戶機的作用是訪問和處理遠程服務器上的數(shù)據(jù),服務器的作用是接收和處理客戶機的數(shù)據(jù)請求。有時,可能有多個客戶向同一個服務器同時請求服務,這就需要服務器決定怎樣處理這些請求。client/server結構是當前數(shù)據(jù)庫應用程序中極為流行的一種方式。尤其是網(wǎng)絡技術的發(fā)展,使得當前很多系統(tǒng)都采用這種方式進行構造,其最大的優(yōu)點是將計算機工作任務分別由客戶端和服務器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務器端還可以將信息集中起來,任何客戶機都可以通過訪問服務器而獲得所需的信息。client/server模型最終可歸結為一種“請求/應答”關系。一個請求總是首先被客戶發(fā)出,然后服務器總是被動地接收請求,返回客戶需要的結果。在客戶發(fā)出一個請求之前,服務進程一直處于休眠狀態(tài)。一個客戶提出請求后,服務進程被“喚醒”并且為客戶提供服務,對客戶的請求做出所需要的應答,如圖2-1所示。圖2-1 客戶機服務器通信結構示圖為了方便client/server模型的網(wǎng)絡編程,90年代初,由microsoft聯(lián)合了其他幾家公司共同制定了一套windows下的網(wǎng)絡編程接口,即windows sockets規(guī)范,它不是一種網(wǎng)絡協(xié)議,而是一套開放的、支持多種協(xié)議的windows下的網(wǎng)絡編程接口?,F(xiàn)在的winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關,你可以使用winsock來調(diào)用多種協(xié)議的功能,但較常使用的是tcp/ip協(xié)議。在ip連接領域有兩種通信類型:面向連接的(connection-oriented ) 和無連接的(connectionless)。在面向連接的套接字中,使用tcp協(xié)議來建立兩個ip地址端點之間的會話。一旦建立了這種連接,就可以在設備之間可靠地傳輸數(shù)據(jù)。為了建立面向連接的套接字,服務器端和客戶端必須分別進行編程。在system.net.sockets 名空間下,有兩個專門用于tcp協(xié)議編程的類:tcpclient類和tcplistener類。這兩個類提供了直觀的易于使用的屬性和方法,從而降低了tcp協(xié)議編程的難度。一般情況下,使用tcpclient連接、發(fā)送和接收數(shù)據(jù),使用tcplistener監(jiān)聽是否有傳入的連接請求,使用close()方法釋放與tcpclient關聯(lián)的所有資源。c/s 模式下windows socket編程示意圖,如圖2-2所示。圖2-2 c/s 模式下socket編程具體到這個項目,服務器只是用來驗證用戶的登錄,以及廣播用戶的登錄狀態(tài)等。具體的通信,采用p2p模式,每兩個客戶端要進行連接通信時都直接連通而不用通過服務器來進行信息的中轉(zhuǎn),這樣設計的優(yōu)點是既可以對用戶進行管理,又不會造成服務器的通信負擔。所以,系統(tǒng)結構將設計成如圖2-3的方式。圖2-3 客戶機直接通信結構示圖2.7 xml簡介xml(extensible markup language)即可擴展標記語言,它與html一樣,都是sgml(standard generalized markup language,標準通用標記語言)。xml是internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言xml是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立,雖然xml占用的空間比二進制數(shù)據(jù)要占用更多的空間,但xml極其簡單易于掌握和使用。 xml與access,oracle和sql server等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強有力的數(shù)據(jù)存儲和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關一致性等,xml僅僅是展示數(shù)據(jù)。事實上xml與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡單。這是一個看上去有點瑣細的優(yōu)點,但正是這點使xml與眾不同。 xml的簡單使其易于在任何應用程序中讀寫數(shù)據(jù),這使xml很快成為數(shù)據(jù)交換的唯一公共語言,雖然不同的應用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持xml,那就意味著程序可以更容易的與windows、mac os, linux以及其他平臺下產(chǎn)生的信息結合,然后可以很容易加載xml數(shù)據(jù)到程序中并分析他,并以xml格式輸出結果。xml的主要作用有:(1)豐富文件(rich documents)- 自定文件描述并使其更豐富 (2)屬于文件為主的xml技術應用 (3)標記是用來定義一塊數(shù)據(jù)應該如何呈現(xiàn) (4)解釋數(shù)據(jù)(metadata)- 描述其它文件或在線信息 (5)屬于數(shù)據(jù)為主的xml技術應用 (6)標記是用來說明一塊資料的意義 (7)組態(tài)檔案(configuration files)- 描述軟件的組態(tài)參數(shù)第3章 需求分析3.1 用戶需求隨著中小型企事業(yè)的不斷發(fā)展,在企業(yè)內(nèi)部實現(xiàn)局域網(wǎng)通信是必不可少的。局域聊工具就是一個非常好的局域網(wǎng)通信軟件,它可以在職工不移動位置的情況下進行在線聊天、文件傳遞、語音聊天。這樣,可以大大提高企業(yè)的工作效率,便于企業(yè)內(nèi)部職員的交流。根據(jù)用戶對聊天工具的要求,可分為以下幾點:1、 操作簡單方便、界面簡潔美觀。2、 客戶端能夠注冊新用戶3、 可以在局域網(wǎng)實現(xiàn)文字和文件的傳輸4、 可以進行聊天記錄保存5、 可以實現(xiàn)局域網(wǎng)語音聊天6、 系統(tǒng)運行穩(wěn)定、安全可靠3.2 系統(tǒng)功能需求這個程序要實現(xiàn)的功能如下:(1) 程序啟動之后就能看到當前哪些機器在線,哪些可以與之進行對等通信。(2) 一旦有某個網(wǎng)內(nèi)的機器上線了,要有即時通知,并能及時更新用戶界面中的用戶列表。(3)當雙擊某個列表項的時候,要彈出聊天對話框,可以在其中編輯要發(fā)送的聊天信息,并進行發(fā)送。(4)聊天界面要人性化,下面是發(fā)送框,上面有已有聊天記錄,并借助滾動條看到當次所有的聊天記錄。(5) 當有遠程用戶向本機發(fā)送文件的時候,要彈出一個消息提示框,提示本機用戶,可以選擇接收或者拒絕。(6) 當用戶覺得有必要保存聊天記錄時,提供一個簡單的聊天記錄保存功能。(7) 文件傳輸過程中,應該有當前傳輸狀態(tài)提示,并能夠?qū)鬏敽臅r等進行計算,作為當前網(wǎng)絡狀態(tài)的一種反饋。3.3 性能要求首先要求程序要完全可靠,可以應付各種由于系統(tǒng)問題產(chǎn)生的錯誤,比如初始網(wǎng)絡失敗,對方突然下線等。要求提前設想到類似的盡可能多的可能發(fā)生的事件,做出相應的應對措施,并向用戶提交簡單易懂清晰明白的提示信息。程序要有良好的容錯性,當用戶進行非法操作時或者系統(tǒng)本身出現(xiàn)問題時要能以最好的方式退出程序,避免發(fā)生程序假死現(xiàn)象。開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要交由別人接手開發(fā),或者自己由于種種原因需要進行二次開發(fā),那么要保證以后能夠清晰的理解整個系統(tǒng)的設計思路以及實現(xiàn)細節(jié)。要求程序?qū)λ\行之系統(tǒng)的硬件條件要求盡可能低,運行時內(nèi)存占用盡可能小,響應速度要盡可能快。并且不發(fā)生內(nèi)存泄漏之類影響系統(tǒng)運行的錯誤事件。并且要求易于維護及擴展。所以應該采用模塊化開發(fā),各個模塊之間不要有太多的耦合,以免維護困難。3.4 測試環(huán)境規(guī)定在開發(fā)過程中由開發(fā)人員自己,也就是我和搭檔莫景順隨時進行內(nèi)部部分白盒測試,在開發(fā)完成以后,自己進行一個全面的白盒測試,然后請同學幫忙進行黑盒測試。3.5 可行性研究(1)成本可行性分析本軟件只做開發(fā)學習使用,所以暫且不考慮經(jīng)濟成本及盈利問題。(2)技術可行性分析開發(fā)所需要的軟硬件平臺已經(jīng)搭建好,并進行了合理而完善的需求分析,做好了充分的前期準備工作,其次因為本程序的平臺將基于windows,將要使用網(wǎng)絡通信技術,而windows有完善成熟的網(wǎng)絡通信接口,以及與c#開發(fā)環(huán)境的嚴密契合能力,加之相類似的更大規(guī)模的internet通信工具產(chǎn)品也已有例在先,所以這個程序的開發(fā)在技術上是完全可行的。第4章 系統(tǒng)設計4.1 系統(tǒng)目標根據(jù)用戶對聊天系統(tǒng)的要求,本聊天軟件可以實現(xiàn)以下目標:(1)用戶管理(2)登錄(3)當有用戶登錄時會在客戶端在線用戶中添加顯示出來(4)當有用戶下線時會從客戶端在線用戶中刪除其信息(5)實現(xiàn)客戶端間的文本聊天(6)實現(xiàn)客戶端間的語音聊天(7)實現(xiàn)客戶端間的文件傳輸(8)實現(xiàn)聊天記錄的保存4.2 系統(tǒng)功能結構本系統(tǒng)中主要包括兩個部分:服務器端和客戶端。服務器端的功能包括:驗證客戶注冊、添加新用戶、驗證客戶登錄、廣播登錄用戶信息、廣播下線用戶信息。客戶端的功能包括:注冊新用戶、用戶登錄、文本聊天、語音聊天、文件傳輸??蛻舳斯δ芙Y構如圖4-1所示。局域網(wǎng)聊天工具客戶端用戶驗證文件傳輸文字聊天語音聊天連接用戶注冊用戶登錄發(fā)送文件接收文件接收消息消息記錄發(fā)送消息語音傳輸語音播放語音采集發(fā)起連接接受連接圖4-1 客戶端功能結構4.3 業(yè)務流程圖局域網(wǎng)聊天系統(tǒng)的業(yè)務流程圖如圖4-2所示??蛻舳艘炎??登錄登錄驗證主窗體對話框窗體服務器端服務器(記錄所有注冊用戶和顯示所有當前在線用戶)注冊發(fā)消息發(fā)消息nyy服務器(記錄所有注冊用戶和顯示所有當前在線用戶)n客戶端主窗體發(fā)消息對話框窗體發(fā)消息tcp/udp協(xié)議圖4-2 系統(tǒng)業(yè)務流程圖4.4 系統(tǒng)模塊劃分由圖4-1我們可以看出系統(tǒng)主要分為服務器端和客戶端兩大部分,經(jīng)過商討,我們決定把系統(tǒng)分為六個模塊:服務器模塊、客戶端模塊、語音聊天模塊、文本聊天模塊、文件傳輸模塊、用戶管理模塊。此系統(tǒng)由2個成員共同完成,各成員分工情況如表4-1所示。 表4-1小組成員分工情況表學號成員姓名負責模塊xxxxxxxxx服務器模塊、客戶端模塊、語音聊天模塊*文本聊天模塊、文件傳輸模塊、用戶管理模塊第5章 系統(tǒng)模塊詳細設計在本次開發(fā)過程中,我主要負責文本聊天、文件傳輸和用戶管理模塊的設計和實現(xiàn),現(xiàn)詳細地介紹這三個模塊的實現(xiàn)。5.1 文本聊天模塊實現(xiàn)5.1.1 文本聊天模塊概述凡是聊天工具,都少不了文本聊天功能,這是個基礎功能。通過文本聊天,局域網(wǎng)內(nèi)用戶能夠發(fā)送和接收文字信息,并在程序窗體上顯示出來,相互之間進行在線交流,并能根據(jù)用戶需要,對聊天記錄進行簡單的保存。文本聊天的信息傳輸協(xié)議主要有面向連接的tcp和無連接的udp。tcp協(xié)議是互聯(lián)網(wǎng)中最重的協(xié)議之一,主要特點是:保證數(shù)據(jù)包的準確到達;保證各數(shù)據(jù)包到達的順序和數(shù)據(jù)包發(fā)出的順序相同。udp協(xié)議提供了快速但不一定可靠的傳輸服務,udp協(xié)議采用無連接的套接字,不需要在網(wǎng)絡設備之間發(fā)送連接信息,和tcp相比,udp缺乏雙方的握手信號,因此不保證數(shù)據(jù)包一定到達目的地,可靠性不如tcp,而且,由于udp沒有任何對雙方會話的支持,不能保證各數(shù)據(jù)包到達的順序與數(shù)據(jù)包發(fā)出的順序相同。所以,在文本聊天模塊中,采用tcp協(xié)議來傳輸文本信息。5.1.2 文本聊天服務器工作原理開啟服務器,文本聊天窗體加載成功后,將啟動監(jiān)聽線程,服務器主要是負責監(jiān)聽局域網(wǎng)內(nèi)的用戶的連接請求。收到客戶發(fā)起的連接請求后,若服務器處于空閑狀態(tài),彈出消息提示框,對請求進行處理,服務器可以選擇接受或者拒絕客戶端的連接。若同意連接,則返回給客戶端同意信號,開啟服務器的接收信息線程,并置消息發(fā)送事件為enable??蛻舳耸盏椒掌鞣祷氐耐庑盘柡?,也開啟接收信息線程,并置消息發(fā)送事件為enable。通信雙方就可以進行文字聊天了。若服務器端拒絕客戶端的連接,則關閉tcpconnect,并關閉網(wǎng)絡流,繼續(xù)執(zhí)行監(jiān)聽??蛻舳说弥掌鞫岁P閉tcpconnect并關閉網(wǎng)絡流之后,則釋放本次socket和網(wǎng)絡流。若已建立連接,當斷開連接時,將向?qū)Ψ桨l(fā)送斷開信號,然后將釋放socket和網(wǎng)絡流,不影響到下一次連接的接入。文本聊天服務器工作流程如圖5-1所示。開啟監(jiān)聽線程,監(jiān)聽端口否是開始同意連接請求?發(fā)送拒絕信號建立連接,允許發(fā)送消息事件,啟動接受信息線程進行文字消息通信是否是否斷開連接?發(fā)送斷開信號,關閉文本聊天是終止否保存記錄?保存聊天記錄圖5-1文本聊天服務器程序流程圖5.1.3 文本聊天客戶端工作原理客戶端用來向服務器端發(fā)起一個連接,等待服務器的允許接入確認。若服務器端同意連接請求,接收到服務器的同意連接信號后,開啟接收信息線程,并置消息發(fā)送事件為enable,通信雙方就可以進行文本聊天了。若服務器端拒絕連接,則釋放socket連接并關閉網(wǎng)絡流。若已建立連接,當斷開連接時,將向?qū)Ψ桨l(fā)送斷開信號,然后將釋放socket和網(wǎng)絡流,不影響到下一次連接的發(fā)起。文本聊天客戶端工作流程圖如圖5-2所示。連接服務器服務器同意連接?否是建立連接,允許發(fā)送消息事件,啟動接受信息線程進行文字消息通信開始是是否斷開連接?發(fā)送斷開信號,關閉文本聊天否終止保存聊天記錄保存記錄?是否圖5-2 文本聊天客戶端程序流程圖5.1.4 p2p文本聊天1) 功能概述將文本聊天客戶端和服務器模塊,通過多線程技術,集成在一個聊天窗體里面,窗體加載時進行監(jiān)聽,有連接請求到達,則為服務器端;試圖連接遠程用戶,則為客戶端。它是建立在tcplistener以及tcpclient這兩個類基礎上的。程序?qū)崿F(xiàn)的原理也比較簡單,但是用到了p2p技術非中心化的基本原則。簡言之,用這個程序可以在網(wǎng)絡中發(fā)送、接受消息,任何一臺計算機既可以作為服務器端,又可以作為客戶端。2) 集成文本聊天工作流程圖集成主窗體創(chuàng)建后,加載監(jiān)聽線程。當有接入連接請求,同意或拒絕接入請求,若同意,則按照文本聊天服務器模塊工作流程執(zhí)行。當無接入請求,則判斷是否有嘗試連接遠程服務端事件,若有,則按照文本聊天客戶端模塊工作流程執(zhí)行,如圖5-3所示。執(zhí)行監(jiān)聽線程,監(jiān)聽端口是否開始有接入連接請求是是否否連接服務器?是否是否斷開連接?連接雙方進行消息通信是終止保存聊天記錄否保存記錄?發(fā)送斷開信號,關閉文本聊天是本地或遠程服務端允許?建立連接,允許發(fā)送消息事件,啟動接受信息線程圖5-3 p2p文本聊天程序流程圖3) 集成主窗體設計主窗體是用來與用戶交互用的,所以加載時間不能太長,響應速度應足夠快,操作簡單,設計人性化。所以,設計的時候,采用了一些通俗易懂的圖片和按鈕。文本輸入框設計了alt+s和ctrl+enter熱鍵功能,方便用戶快速的發(fā)送消息。當用戶未輸入文字而嘗試發(fā)送時,彈出消息提示框,提示不能發(fā)送空信息,節(jié)省系統(tǒng)和網(wǎng)絡資源。主窗體界面如圖5-4所示。圖5-4 集成主窗體界面文本聊天窗體主要控件屬性,見表5-1。表5-1 文本聊天窗體主要控件屬性表控件屬性值groupboxnamegroupbox1text信息顯示richtextboxnamerichtxtinfosreadonlytruerichtextboxnamerichtxtsentreadonlyfalseactivekeydownbuttonnamesendtext發(fā)送消息buttonnameclearboxtext清除屏幕buttonnamesavelogtext消息記錄4) 具體實現(xiàn)1、定義相關變量。2、集成主窗體創(chuàng)建后,創(chuàng)建一個tcplistener的對象,端口為5000,ip為任意。創(chuàng)建監(jiān)聽線程wait,wait線程執(zhí)行的是waitconn()方法,啟動監(jiān)聽線程。調(diào)用getmyip()方法用于獲取本地ip地址,并在連接建立時傳給對方。當wait線程監(jiān)聽到遠程用戶的接入連接請求,彈出消息提示框,用戶可以選擇同意或拒絕接入請求。若同意,則創(chuàng)建接收信息線程th,并啟動th。若用戶拒絕遠程接入請求,則關閉網(wǎng)絡流nss,關閉tcps,并調(diào)用disconnect()重新初始化相關變量。3、接收信息時,嘗試讀取網(wǎng)絡流,采用的是unicode編碼。讀取到的消息如果不為斷開連接信號,則在聊天記錄框里面顯示出來;若為斷開信號,則執(zhí)行disconnect()方法關閉當前連接。4、當無接入請求,則判斷用戶是否有嘗試連接遠程服務端事件。若有,創(chuàng)建tcpclient的對象tcpc,并嘗試連接遠程主機。5、連接建立后,用戶單擊“發(fā)送消息”按鈕或者在輸入文本框內(nèi)按熱鍵“alt+s”或“ctrl+enter”,觸發(fā)send_click 事件。send_click事件主要是將用戶的輸入通過socket,采用網(wǎng)絡流的形式傳輸給遠程用戶,編碼采用unicode,同時在聊天記錄框里面顯示出來。6、斷開連接或關閉窗體,需要將socket、網(wǎng)絡流以及接收信息線程th進行關閉,重置各按鈕的可用狀態(tài)。若是關閉窗體,還需將wait線程關閉。5.2 文件傳輸模塊實現(xiàn)5.2.1 文件傳輸模塊概述除了文本聊天以外,局域網(wǎng)內(nèi)另外一個應用是文件的共享。通過文件共享,企業(yè)能提高信息交換的速度,從而提高工作效率。文件共享的實現(xiàn)離不開文件傳輸。由于tcp協(xié)議能保證數(shù)據(jù)包的準確到達以及各數(shù)據(jù)包到達的順序和數(shù)據(jù)包發(fā)出的順序相同,出于可靠性和效率考慮,本模塊也采用tcp協(xié)議來進行用戶之間文件的傳輸。5.2.2 文件傳輸接收端工作原理開啟窗體后,接收端執(zhí)行監(jiān)聽線程。當接收到客戶發(fā)起的文件傳入請求后,彈出消息提示對話框,提示用戶對請求進行處理,同意或者拒絕接收。若同意接收,則彈出文件保存對話框,用戶選擇文件保存路徑并確認后,發(fā)送接收信號給文件發(fā)送端,啟動計時器開始接收文件流,將遠程文件保存在本地,并在文件傳輸過程中對文件傳輸狀態(tài)進行反饋,文件接收完畢后,關閉計時器,關閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若拒絕接收,則向發(fā)送端返回拒絕信號,繼續(xù)執(zhí)行監(jiān)聽線程,等待下一次的文件傳入請求。文件傳輸接收端工作流程圖如圖5-5所示。執(zhí)行監(jiān)聽線程同意接收文件?否是發(fā)送同意接收信號,啟動計時器,接收文件流,反饋狀態(tài)終止接收發(fā)送端的文件傳入請求關閉計時器,關閉文件流將遠程文件存儲至本地文件開始發(fā)送拒絕信號圖5-5 文件傳輸接收端程序流程圖5.2.3 文件傳輸發(fā)送端工作原理開啟窗體后,發(fā)送端選擇用戶需要發(fā)送的文件,向接收端發(fā)起的文件傳輸請求,若接收端端同意接收,開啟計時器,將本地文件通過網(wǎng)絡發(fā)送給接收端,并在文件傳輸過程中對文件傳輸狀態(tài)進行反饋,文件發(fā)送完畢,關閉計時器,關閉文件流,并在狀態(tài)欄上顯示出完畢狀態(tài)。若接收端拒絕接受文件,則取消本次文件發(fā)送,等待用戶的下一次文件發(fā)送事件。文件傳輸發(fā)送端工作流程圖如圖5-6所示。添加待傳送的文件接收端同意接收文件?否是啟動計時器,發(fā)送文件流,反饋狀態(tài)終止向接收端發(fā)送文件傳輸請求關閉計時器,關閉文件流將本地文件發(fā)送至接收端開始圖5-6 文件傳輸發(fā)送端程序流程圖5.2.4 p2p文件傳輸1) 功能概述將文件發(fā)送端和接收端模塊,通過多線程技術,集成在聊天窗體里面,窗體加載時進行監(jiān)聽,有文件傳輸請求到達,則為接收端,執(zhí)行接收端工作流程;若試圖發(fā)送文件到遠程用戶,則為發(fā)送端,執(zhí)行發(fā)送端工作流程。這樣就實現(xiàn)了p2p模式對等傳輸。2) p2p文件傳輸工作流程圖負責接收文件的監(jiān)聽線程集成在聊天窗體內(nèi),當聊天窗體加載時,將開啟此線程。當有文件傳入請求,用戶可以同意或者拒絕接收,若同意接收,則按照文件傳輸接收端模塊工作流程執(zhí)行。若在聊天窗體生存周期內(nèi),無接入連接請求,則判斷是否有用戶嘗試發(fā)送文件事件,若有,則按照文件傳輸發(fā)送端模塊工作流程執(zhí)行。p2p文件傳輸工作流程圖如圖5-7所示。否執(zhí)行監(jiān)聽線程,監(jiān)聽端口是否啟動計時器,接收文件流,顯示文件接收狀態(tài)信息終止保存文件開始是是否接收端允許?啟動計時器,發(fā)送文件流,顯示文件發(fā)送狀態(tài)信息將本地文件發(fā)送至接收端發(fā)送文件?否是有文件傳入請求允許接收?圖5-7 p2p文件傳輸程序流程圖3) 文件傳輸發(fā)送端窗體文件發(fā)送主要作用是發(fā)送本地文件至遠程接收端,所以功能盡可能簡單化,方便用戶操作,設計人性化。設計的時候,采用了一些簡單按鈕,布局也和常用的窗體類似。為方便用戶快速的選取發(fā)送文件,所以文件路徑選擇框支持拖拽功能。當用戶未選取文件前,開始按鈕不可用,當用戶輸入的文件不存在時,彈出消息提示框,提示文件不存在錯誤。文件接收功能集成在聊天窗體內(nèi),文件發(fā)送窗體界面如圖5-8所示。圖5-8 文件發(fā)送窗體界面文件傳輸窗體主要控件屬性見表5-2。表5-2 文件傳輸窗體主要控件屬性控件屬性值textboxnametxtfilebuttonnamebtnbrowsetext瀏覽.buttonnamebtnstarttext開始buttonnamebtncanceltext取消labelnamelblstatusopenfiledialognamedlgopenfile4)具體實現(xiàn)1、定義相關變量。2、主窗體加載時,創(chuàng)建文件接收監(jiān)聽線程receiverworker,并啟動receiverworker線程。receiverworker線程執(zhí)行的是receiverstart()方法。在receiverstart()中,創(chuàng)建一個tcplistener的實例tcplistener,其監(jiān)聽局域網(wǎng)內(nèi)的任意ip地址在8088端口號上是否有傳入的連接嘗試。3、當receiverworker線程監(jiān)聽到遠程用戶的文件傳入請求,彈出消息提示框,用戶可以選擇同意或拒絕文件傳入請求。若同意,用戶選擇文件保存路徑后,向發(fā)起方發(fā)送同意接受信號,并開啟計時器,讀取傳入的文件流并將其保存到本地文件,文件接收完畢時關閉計時器。若用戶拒絕文件傳入,則向遠程主機發(fā)送一個拒絕信號。最后,執(zhí)行關閉binaryreader,關閉socket等操作。4、當用戶打開文件發(fā)送窗體,主窗體調(diào)用其帶ip參數(shù)的構造方法,實參為當前與之建立連接的遠程主機的ip地址,用于發(fā)送文件時建立socket連接使用。5、當用戶向txtfile文本框內(nèi)輸入所選取的待發(fā)送文件后,用戶單擊“開始”按鈕,開啟用于向遠端發(fā)送文件的senderworker線程。senderworker線程執(zhí)行senderstart()方法。senderstart()方法將創(chuàng)建一個tcpclient的實例tcpclient,嘗試連接指定的ip地址的8088端口,將文件的信息發(fā)送給遠程主機并等待遠程主機的確認。若接收方同意接收文件,則啟動計時器并打開binarywriter,將本地文件發(fā)送給遠程主機,文件傳輸完畢時關閉計時器。若遠程主機拒絕接收,則關閉此次socket連接,等待下一次文件發(fā)送事件的觸發(fā)。5.3 用戶管理模塊實現(xiàn)5.3.1 用戶管理模塊概述不管是任何系統(tǒng),都必然會有用戶這個角色,因此用戶管理是每一個應用中必不可少的部分。由于企業(yè)內(nèi)部的信息越來越私密,企業(yè)只希望員工通過內(nèi)部局域網(wǎng)進行溝通與交流,所以在本局域網(wǎng)聊天工具中,設計一個簡單用戶管理模塊,對接入服務器的用戶進行管理,能在一定程度上解決安全性問題。本模塊實現(xiàn)采用了xml技術,二次開發(fā)時,通過一定的修改,能夠很好的移植到數(shù)據(jù)庫上。5.3.2 用戶數(shù)據(jù)模型本模塊實現(xiàn)一個簡單的用戶管理,所管理的目標是局域網(wǎng)內(nèi)客戶端用戶。模塊中只涉及到用戶一個模型,涉及到的屬性項目有 用戶id、用戶名(姓名)、密碼、注冊時間等,其e-r圖如圖5-9所示。圖5-9 用戶信息e-r圖5.3.3 xml文檔結構設計xml分為文件序言(prolog)和文件主體兩個大的部分。在此文件中的第一行即是文件序言。它主要是告訴xml 解析器如何工作。其中,version 是標明此 xml 文件所用的標準的版本號1.0,encoding 指明了此xml 文件中所使用的字符類型為utf-8。文件的其余部分都是屬于文件主體,userinfos.xml文件的內(nèi)容信息存放在此。文件主體是由開始的和結束的控制標記組成,這個稱xml文件的“根元素”;是作為直屬于根元素下的“子元素”;在下又有、這些子元素。id是元素中的一個“屬性”,“1001”、“1002”等則是“屬性值”。userinfos.xml文檔結構如圖5-10所示。圖5-10 userinfos.xml文檔結構圖5.3.4 用戶信息的保存通過服務器監(jiān)聽,接收到客戶端的注冊請求后,獲取注冊用戶的信息,判斷用戶是否為第一個注冊用戶,若是,則創(chuàng)建userinfos.xml文檔,進而創(chuàng)建userinfolist根節(jié)點,在userinfolist內(nèi)創(chuàng)建用戶user節(jié)點,設置id屬性,然后在user節(jié)點下創(chuàng)建用戶名、密碼、創(chuàng)建時間等節(jié)點,將相應的信息保存到各節(jié)點中。若userinfos.xml已存在,遍歷userinfolist,查找該注冊用戶名在userinfos.xml中是否已存在。若用戶名不存在,則在userinfolist內(nèi)創(chuàng)建新的user節(jié)點,然后在user節(jié)點下創(chuàng)建用戶名、密碼、創(chuàng)建時間等,將用戶信息添加進userinfos.xml文檔中。若用戶名已被注冊,則通過服務器向客戶端返回用戶名已經(jīng)被注冊的提示信息。保存數(shù)據(jù)的流程圖如圖5-11所示。是否是第一個注冊用戶?是獲取最后一個用戶的id號并將id加1作為該user的id屬性值否創(chuàng)建xml文檔創(chuàng)建根節(jié)點向user節(jié)點中添加用戶名、密碼、注冊時間節(jié)點在根節(jié)點內(nèi)添加user節(jié)點設置user的id屬性值1001用戶是否已存在?否是返回用戶已存在在根節(jié)userinfoslist內(nèi)添加user節(jié)點開始結束圖5-11 保存數(shù)據(jù)的程序流程圖5.3.5 用戶數(shù)據(jù)的遍歷在新用戶注冊或者已注冊用戶登錄時,需要在userinfos.xml文檔中查找用戶名是否存在,這個就涉及到xml文件的遍歷。遍歷xml文件的主要流程是,先進入根節(jié)點,開始對節(jié)點進行遍歷。若節(jié)點不存在,則返回不存在信息,結束遍歷;否則進入節(jié)點,對其子節(jié)點進行對比。若匹配成功,則返回用戶名存在信息;若不匹配,則繼續(xù)遍歷下一個節(jié)點。工作流程圖如圖5-12所示。返回不存在進入user節(jié)點用戶名匹配?y返回存在進入根節(jié)點第i個user結點是否存在否是否是i=1i=i+1開始結束圖5-12 用戶數(shù)據(jù)的遍歷程序流程圖第6章 系統(tǒng)測試6.1 系統(tǒng)測試概述測試的目的是為了發(fā)現(xiàn)功能是否達到,或者是否有更多的缺陷!這里的缺陷是泛稱的,它可以指功能的錯誤,也可以指性能低下,易用性差等。測試總是先假設程序中存在缺陷,再通過執(zhí)行程序來發(fā)現(xiàn)并最終改正缺陷。理解測試的目的是個很重要的意識問題。如果說測試的目的是為了說明程序中沒有缺陷,那么測試人員就會向這個目標靠攏,因而下意識地選用一些不易暴露錯誤的測試示例。這樣的測試是虛假的。測試只能證明缺陷存在,而不能證明缺陷不存在。這個真理告訴我們,對于一個復雜的系統(tǒng)而言,無論采取什么樣的測試手段都不能證明缺陷已經(jīng)不復存在?!皬氐椎販y試”只是一種理想。在實踐中,測試要考慮時間、費用等限制,不允許無休止地測試。測試有助于提高軟件的質(zhì)量,但是提高軟件的質(zhì)量不能依賴于測試。因為做為一個本科畢業(yè)設計,本系統(tǒng)并不會真正發(fā)布到廣大的用戶群中去,所以只能做測試,而無法完成測試。關于測試人員的安排,由我本人和莫景順一起做白盒測試,由同學幫助做黑盒測試。6.2 白盒測試6.2.1 測試環(huán)境配置白盒測試可在開發(fā)系統(tǒng)的本機上直接進行,所以不需要進行特殊的配置。6.2.2 正確性測試正確性測試檢查軟件的功能是否符合規(guī)格說明。由于正確性是軟件最重要的質(zhì)量因素,所以其測試也最重要。在集成p2p文本聊天時,最開始只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冬季施工暖棚搭設方案
- 人教版九年級化學上冊自制第六單元課題4實驗活動2-二氧化碳實驗室制取與性質(zhì)(34張)
- 2019-2020學年高中數(shù)學第2章解析幾何初步2-3空間直角坐標系課件北師大版必修2
- 接待禮儀-素材-培訓講學
- 教育學原理04-近現(xiàn)代高等教育發(fā)展、教師
- 2024年泰州職業(yè)技術學院高職單招數(shù)學歷年參考題庫含答案解析
- 2024年陽江市衛(wèi)校附屬醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 二零二五年離婚房產(chǎn)分割與贍養(yǎng)義務協(xié)議3篇
- 二零二五版“汽車零部件銷售協(xié)議”英文翻譯
- 2024年江西醫(yī)學高等??茖W校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 山東省濰坊市2024-2025學年高三上學期期末 地理試題(無答案)
- 勞動法培訓課件
- 金蝶云星辰初級考試題庫
- 常見老年慢性病防治與護理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 設備機房出入登記表
- 六年級語文-文言文閱讀訓練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 口袋妖怪白金光圖文攻略2周目
- 日有所誦(二年級)
評論
0/150
提交評論