局域網(wǎng)即時通訊系統(tǒng)的實現(xiàn)畢業(yè)論文_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  局域網(wǎng)即時通訊系統(tǒng)的實現(xiàn)</p><p>  LAN instant messaging system is realized</p><p><b>  摘 要</b></p><p>  隨著計算機科學和Internet 的飛速發(fā)展, 網(wǎng)上聊天已成為人們相互交流的一種方式, 與E-mail、電話相比, 聊天服務(wù)更具

2、有實時性和有效性。大多數(shù)網(wǎng)絡(luò)通訊都需要借助Internet上的服務(wù)器,這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問題,如浪費網(wǎng)絡(luò)資源、遭遇到網(wǎng)絡(luò)攻擊、傳播的病毒、破壞防御系統(tǒng)等等。由于互連網(wǎng)上的網(wǎng)絡(luò)通訊工具給企業(yè)內(nèi)部信息交流帶來了不便,所以為了方便內(nèi)部網(wǎng)絡(luò)的用戶之間的溝通,需要開發(fā)一個基于局域網(wǎng)的信息收發(fā)系統(tǒng)的即時通訊工具,實現(xiàn)在內(nèi)部網(wǎng)絡(luò)中進行信息的交流。該軟件能夠幫助企業(yè)在局域網(wǎng)內(nèi)搭建起自己的聊天系統(tǒng),避免企業(yè)內(nèi)部員工使用類似QQ等

3、軟件泄露內(nèi)部信息,但是該軟件只實現(xiàn)了聊天和傳送文件以及抓取屏幕等功能,還有很多不足之處需要改進。</p><p>  本文提出一個運行于VC平臺上的局域網(wǎng)聊天軟件的解決方案。該聊天軟件集服務(wù)器端和客戶端兩個模塊于一體,可設(shè)置為客戶端或者服務(wù)器端或者兩者兼容等模式,提供TCP/UDP兩種傳輸模式作選擇。服了服務(wù)器模式主要實現(xiàn)務(wù)器的配置和數(shù)據(jù)的傳遞;客戶端模式主要對服務(wù)器端進行通訊。該軟件采用異步套接字的非阻塞模式,

4、并實現(xiàn)對象的序列化和MFC文件對象實現(xiàn)數(shù)據(jù)的保存。</p><p>  關(guān)鍵詞:局域網(wǎng) 即時通信 套接字 異步模式</p><p><b>  Abstract</b></p><p>  Along with the high-speed development of the computer science and Internet,

5、chatting on line has been an important method in our communication. Comparing with E-mail and telephone, the chat-line service is more real-time and effective. Most network communications require the help of servers on t

6、he Internet, which has caused many problems to the Large-scale internal network users, such as a waste of network resources, network attacks, viruses, damage defense systems and so on. As the interconnect</p>

7、<p>  This thesis proposes a solution of a LAN chatting software based on C++ language, which is operated on the VC platform. This chatting software set two modules: the server and the client in one,. which can be

8、set either one or both compatible with TCP/UDP two transport mode choices. The server module mainly completes the sever device’s configuration. The client module was mainly communicate with the server. The software used

9、model of non-blocking asynchronous sockets , And to achieve the object a</p><p>  Key words:LAN ,Instant messaging,,Socket,Asynchronous modle</p><p><b>  目 錄</b></p><p>

10、;<b>  摘 要I</b></p><p>  AbstractII</p><p>  1 前言- 1 -</p><p>  1.1 選題研究的背景與意義- 1 -</p><p>  1.2 系統(tǒng)的研究現(xiàn)狀- 2 -</p><p>  1.3 系統(tǒng)內(nèi)容與目標-

11、2 -</p><p>  1.4 系統(tǒng)綜述- 2 -</p><p>  2 系統(tǒng)開發(fā)環(huán)境和關(guān)鍵技術(shù)- 3 -</p><p>  2.1 面向服務(wù)的體系結(jié)構(gòu)- 3 -</p><p>  2.2 關(guān)鍵技術(shù)- 4 -</p><p>  2.2.1 Visual C++和面向?qū)ο蟪绦蛟O(shè)計- 4 -&

12、lt;/p><p>  2.2.2 M F C- 4 -</p><p>  2.2.3 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口- 5 -</p><p>  2.2.4 TCP/IP協(xié)議、TCP協(xié)議- 6 -</p><p>  2.2.5 Client/Server結(jié)構(gòu)(客戶機/服務(wù)器模式)- 8 -</p><

13、;p>  3 系統(tǒng)分析與設(shè)計- 9 -</p><p>  3.1 系統(tǒng)分析- 9 -</p><p>  3.2 系統(tǒng)設(shè)計- 11 -</p><p>  3.2.1 設(shè)計原則- 11 -</p><p>  3.2.2 工作流程- 12 -</p><p>  3.2.3 功能設(shè)計- 13

14、-</p><p>  3.2.4 共享數(shù)據(jù)類設(shè)計- 14 -</p><p>  4 系統(tǒng)實現(xiàn)- 17 -</p><p>  4.1 服務(wù)器端設(shè)計實現(xiàn)- 17 -</p><p>  4.1.1 服務(wù)器端靜態(tài)類圖- 17 -</p><p>  4.1.2 服務(wù)器主要類介紹- 18 -</p&g

15、t;<p>  4.1.3 服務(wù)器端主要過程介紹- 21 -</p><p>  4.2 客戶端設(shè)計實現(xiàn)- 25 -</p><p>  4.2.1 客戶端靜態(tài)類圖- 25 -</p><p>  4.2.2 客戶端主要過程介紹- 26 -</p><p>  4.3 系統(tǒng)測試- 28 -</p>&

16、lt;p>  4.3.1 測試意義- 28 -</p><p>  4.3.2軟件測試的目標- 28 -</p><p>  4.3.3軟件測試的方法- 28 -</p><p>  4.3.4 測試用例- 29 -</p><p>  5 總結(jié)與展望- 30 -</p><p>  參考文獻- 3

17、2 -</p><p>  致 謝- 33 -</p><p><b>  1 前言</b></p><p>  1.1 選題研究的背景與意義</p><p>  隨著計算機網(wǎng)絡(luò)日新月異的發(fā)展,人們的交流方式越來越多,傳統(tǒng)的交流方式,如:信件、電報、電話等已經(jīng)難以滿足人們的交流要求,在互聯(lián)網(wǎng)上即時的和好友取得聯(lián)系

18、,已經(jīng)成為當今社會人們主流的聯(lián)系方式。因此,計算機之間進行即時通訊、發(fā)送文件等交流方式已經(jīng)成為必然潮流。因此出現(xiàn)了QQ、UC等聊天工具,然而QQ、UC等聊天工具雖然方便、實用,但是,娛樂功能太多,有很多吸引人的娛樂功能,從一定程度上來說,是一種娛樂工具,不能作為用于即時通訊、文件共享的專用工具。目前,用于實現(xiàn)單一的即時通訊、文件共享的軟件實在太少,而且它們中大部分都對遠程服務(wù)器有非常大的依賴性,沒有徹底實現(xiàn)點對點的交流。為此,我們決定開

19、發(fā)一個專用于實現(xiàn)基于局域網(wǎng)內(nèi)部計算機之間即時通訊、文件傳輸?shù)能浖?,以方便?nèi)網(wǎng)計算機之間信息的交流。本軟件屬于點對點連接的,在連接并通信時,尤其是近程的即時通訊,徹底的脫離了遠程的服務(wù)器,避免了和遠程服務(wù)器連接時過多的浪費網(wǎng)絡(luò)資源。并且避免了服務(wù)器忙或與服務(wù)器無法連接時,浪費過多時間用于和服務(wù)器建立連接。</p><p>  本系統(tǒng)采用基于Socket的局域網(wǎng)通信工具的設(shè)計與實現(xiàn)的方法。基于Socket的局域網(wǎng)通信

20、軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機制。它的實現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地降低局域網(wǎng)通信負荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。 基于Socket的局域網(wǎng)聊天工具很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學、討論等應(yīng)用中都具有一定的實用價值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡(luò)帶寬資源低,占用服務(wù)器吞吐能力低,

21、易于編程實現(xiàn)等優(yōu)點?;赟ocket的局域網(wǎng)通信軟件應(yīng)用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能擴展以適應(yīng)新型的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)教育,數(shù)據(jù)影音傳輸?shù)龋瑩碛袕V泛的應(yīng)用前景。 </p><p>  1.2 系統(tǒng)的研究現(xiàn)狀</p><p>  基于局域網(wǎng)的即時通信工具,實際上是互聯(lián)網(wǎng)即時通信工具的一個小規(guī)模版本,廣域網(wǎng)上的即時通信工具,如今一般采用UDP或者 TCP協(xié)議體系來實現(xiàn) ,開發(fā)

22、技術(shù)已經(jīng)比較成熟,比如較早的ICQ,MSN Messenger, Yahoo。除了這些國外開發(fā)的產(chǎn)品,還有國產(chǎn)的有名的QQ,新浪UC,LAVA-LAVA等,這些工具統(tǒng)統(tǒng)都實現(xiàn)了廣域網(wǎng)上的即時通信,盡管都是即時通信,實現(xiàn)了即時聊天,以及文件傳輸?shù)闹饕δ?,但是也各有各的特色,比如ICQ的巨大客戶群,MSN的個性化表情,YAHOO通的易操作性等。而QQ也具有一個相當方便的屏幕截圖功能,另外就是,所有上述軟件都實現(xiàn)了網(wǎng)絡(luò)即時的視頻,語音聊天功

23、能。這些軟件,在使用方面各有特色,在實現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運營階段,其實現(xiàn)方式屬于商業(yè)機密,具體細節(jié)不一定得知,但是它在大的方面無非就是各種利用各種平臺上的網(wǎng)絡(luò)通信接口,建構(gòu)基于下層TCP/IP,或者UDP協(xié)議的軟件產(chǎn)品。</p><p>  1.3 系統(tǒng)內(nèi)容與目標</p><p>  本課題主要研究的是局域網(wǎng)聊天軟件,此聊天軟件分為服務(wù)器程序和客戶端程序,本課題的目

24、標是能實現(xiàn)用戶在客戶端與服務(wù)器端傳遞文字信息。</p><p>  主要研究開發(fā)內(nèi)容是:熟悉C++和VC的操作,搭配系統(tǒng)開發(fā)平臺,探索在此開發(fā)平臺下,利用socket編程技術(shù)、多線程開發(fā)技術(shù)、TCP、UDP協(xié)議等進行局域網(wǎng)聊天軟件的實際開發(fā)。</p><p><b>  1.4 系統(tǒng)綜述</b></p><p>  現(xiàn)在,多渠道的信息源、網(wǎng)絡(luò)

25、化的數(shù)據(jù)分布、快捷醫(yī)用的交互操作、智能化的分析決策等特點越來越成為衡量有兩聊天軟件的關(guān)鍵,因此,本人開發(fā)一個局域網(wǎng)聊天軟件,該聊天軟件是基于C++語言運行于VC平臺上,利用的技術(shù)主要是Socket通信,使用配置文件作為數(shù)據(jù)管理。為實現(xiàn)和方便客戶端間通信,在客戶端進行了人性化的界面設(shè)計,用戶可以注冊號碼,登陸界面,具有發(fā)送離線消息功能。</p><p>  第 1 章對本次課題的背景及意義、課題現(xiàn)狀、課題內(nèi)容與目標

26、進行了深入的闡述。</p><p>  第 2 章介紹了系統(tǒng)的開發(fā)環(huán)境和關(guān)鍵技術(shù),例如Socket編程技術(shù),非阻塞開發(fā)模式等等。</p><p>  第 3 章是系統(tǒng)分析與設(shè)計。將對系統(tǒng)進行需求分析,對組成系統(tǒng)的功能模塊進行劃分,對每個模塊將要實現(xiàn)的功能進行闡述和說明。對系統(tǒng)的結(jié)構(gòu)進行設(shè)計,設(shè)計共享數(shù)據(jù)結(jié)構(gòu)。</p><p>  第 4 章是系統(tǒng)實現(xiàn),分別介紹了服務(wù)

27、器端和客戶端每個功能的執(zhí)行過程,畫出主要模塊的流程圖。</p><p>  第 5 章介紹系統(tǒng)測試。</p><p>  最后,對本設(shè)計進行歸納總結(jié),全面闡述本次設(shè)計中的體會。</p><p>  2 系統(tǒng)開發(fā)環(huán)境和關(guān)鍵技術(shù)</p><p>  2.1 面向服務(wù)的體系結(jié)構(gòu)</p><p>  本設(shè)計是一個面向中小型

28、機構(gòu)內(nèi)部通信需求的局域網(wǎng)即時信息軟件,要在短時間內(nèi)開發(fā)出來并且要滿足客戶要求,無論是硬件還是軟件都要選擇合適,要求如下:開發(fā)設(shè)備應(yīng)該完備;開發(fā)機器的性能必須穩(wěn)定;操作系統(tǒng)的選擇應(yīng)該適當;開發(fā)出的程序可以在盡可能多的平臺上運行;要求運行機配置盡可能低檔。對此,我們選擇的硬件環(huán)境和軟件環(huán)境如下: </p><p><b>  硬件環(huán)境 </b></p><p>  處理

29、器:Intel Pentium PIII或更高處理器 </p><p>  內(nèi)存:256MB或更高 </p><p><b>  網(wǎng)絡(luò):局域網(wǎng)</b></p><p>  開發(fā)該系統(tǒng)應(yīng)盡可能采用高檔的硬件。因此,在應(yīng)用時應(yīng)采用更好的配置。</p><p><b>  軟件環(huán)境 </b></

30、p><p>  操作系統(tǒng):Windows 2000 /Windows XP / Windows 2003 </p><p>  開發(fā)平臺:Microsoft Visual C++ 6.0</p><p><b>  開發(fā)語言:C++</b></p><p><b>  2.2 關(guān)鍵技術(shù)</b><

31、/p><p>  2.2.1 Visual C++和面向?qū)ο蟪绦蛟O(shè)計</p><p>  VC基于C,C++語言,主要由是MFC組成,是與系統(tǒng)聯(lián)系非常緊密的編程工具,它兼有高級,和低級語言的雙重性,功能強大,靈活,執(zhí)行效率高,幾乎可說VC在 Windows平臺無所不能[2]。從20世紀70年代第一次提出面向?qū)ο蟮母拍铋_始,到現(xiàn)在面向?qū)ο蠹夹g(shù)發(fā)展成為一種比較成熟的編程思想,通過面向?qū)ο蠹夹g(shù),可以

32、將現(xiàn)實世界直接影射到對象空間,從而為系統(tǒng)的設(shè)計和開發(fā)帶來革命性的影響。Visual C++是一個典型的面向?qū)ο蟪绦虻脑O(shè)計語言,它也是目前為止功能最強、最受歡迎、應(yīng)用最廣泛、高效的Windows應(yīng)用程序開發(fā)工具,它是在C 語言基礎(chǔ)之上發(fā)展起來的,是C語言的超集。</p><p>  Visual C++是功能最為強大可視化開發(fā)工具,它不僅支持傳統(tǒng)的軟件開發(fā)方法,更重要的是它能支持面向?qū)ο?、可視化的開發(fā)風格。因此Vi

33、sual C++又稱作是一個集成開發(fā)工具,它提供了軟件代碼自動生成和可視化的資源編輯功能。Visual C++具有的優(yōu)點:提供了面向?qū)ο蟮膽?yīng)用程序框架MFC(Microsoft Foundation Class),簡化了程序員的編程工作,提高了模塊的可重用性;提供了基于CASE技術(shù)的可視化軟件的自動生成和維護工具AppWizard、ClassWizard、Visual Studio、WizardBar等,實現(xiàn)了直觀、可視的程序設(shè)計風格

34、,方便地編和管理各種類,維護程序的源代碼;封裝了Windows的API函數(shù)、USER、KERNEL、GDI函數(shù),簡化了編程時創(chuàng)建、維護窗口的許多復雜的工作[3]。</p><p>  2.2.2 M F C</p><p>  MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),實際上是微軟提供的,用于在C++環(huán)境下編寫應(yīng)用程序的一個框架和引擎,VC++是Win

35、DOS下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺),MFC 就是掛在它之上的一個輔助軟件開發(fā)包[1],MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計語言,是一種大家都承認的 軟件編制的通用規(guī)范,而VC++只是一個編譯器,或者說是一種編譯器+源程序編輯器的IDE,WS,PlatForm,這跟Pascal和Delphi的關(guān)系一

36、個道理,Pascal是Delphi的語言基礎(chǔ),Delphi使用Pascal規(guī)范來進行Win下應(yīng)用程序的開發(fā)和編譯,卻不同于Basic語言和VB的 關(guān)系,Basic語言在VB開發(fā)出來被應(yīng)用的年代已經(jīng)成了Basic語言的新規(guī)范,VB新加的Basic語言要素,如面向?qū)ο蟪绦蛟O(shè)計的要素,是一種性質(zhì)上的飛躍,使VB既是一個IDE,又成長成一個新的程序設(shè)計語言),MFC同BC++集成的VCL一樣是一個非外</p><p> 

37、 2.2.3 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口</p><p>  選定WINDOWS平臺開發(fā)網(wǎng)絡(luò)通信程序,可以選擇WINDOWS的SOCKETS編程接口,Windows Sockets是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口[12]?,F(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關(guān),你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Windows socke

38、ts無疑是我們進行網(wǎng)絡(luò)編程的利器。所有的Windows Sockets實現(xiàn)都支持流套接口和數(shù)據(jù)報套接口。應(yīng)用程序調(diào)用Windows Sockets的API實現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通訊工作。它們之間的關(guān)系如圖1所示: </p><p>  圖1 Windows Sockets實現(xiàn)通訊工作的各層關(guān)系圖</p&

39、gt;<p>  2.2.4 TCP/IP協(xié)議、TCP協(xié)議</p><p>  網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。 </p><p>  IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有

40、做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)[15]。</p><p>  如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現(xiàn)虛電路間的連接[7]。TCP數(shù)據(jù)包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。</p>&l

41、t;p>  UDP與TCP位于同一層,但對于數(shù)據(jù)包的順序錯誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢---應(yīng)答的服務(wù).</p><p>  TCP和UDP服務(wù)通常有一個客戶/服務(wù)器的關(guān)系。兩個系統(tǒng)間的多重連接是這樣相互確認并協(xié)調(diào)一致的,TCP或UDP連接唯一地使用每個信息中的如下四項進行確認: </p><p>  源IP地址 發(fā)送包的

42、IP地址。 </p><p>  目的IP地址 接收包的IP地址。</p><p>  源端口 源系統(tǒng)上的連接的端口。 </p><p>  目的端口 目的系統(tǒng)上的連接的端口。</p><p>  端口是一個軟件結(jié)構(gòu),被客戶程序或服務(wù)進程用來發(fā)送和接收信息。一個端口對應(yīng)一個16比特的數(shù)。服務(wù)進程通常使用一個固定的端口,例如,SMTP使用25[

43、8]。這些端口號是“廣為人知”的,因為在建立與特定的主機或服務(wù)的連接時,需要這些地址和目的地址進行通訊,如圖2所示。</p><p>  圖2 面向連接的(TCP)連接過程</p><p>  2.2.5 Client/Server結(jié)構(gòu)(客戶機/服務(wù)器模式)</p><p>  Client/Server結(jié)構(gòu)(C/S結(jié)構(gòu))是大家熟知的客戶機和服務(wù)器結(jié)構(gòu)[3]。通過

44、它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu)。</p><p>  C/S結(jié)構(gòu)軟件分為客戶機和服務(wù)器兩層,客戶機不是毫無運算能力的輸入、輸出設(shè)備,而是具有了一定的數(shù)據(jù)處理和數(shù)據(jù)存儲能力,通過把應(yīng)用軟件的計算和數(shù)據(jù)合理地分配在客戶機和服務(wù)器兩端,可以有效地降低網(wǎng)絡(luò)通信量和服務(wù)器運算量[

45、9]。由于服務(wù)器連接個數(shù)和數(shù)據(jù)通信量的限制,這種結(jié)構(gòu)的軟件適于在用戶數(shù)目不多的局域網(wǎng)內(nèi)使用。</p><p>  C/S結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。缺點主要有以下幾個:</p><p>  只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴展性。這種方式遠程

46、訪問需要專門的技術(shù),同時要對系統(tǒng)進行專門的設(shè)計來處理分布式的數(shù)據(jù)。</p><p>  3 系統(tǒng)分析與設(shè)計</p><p><b>  3.1 系統(tǒng)分析</b></p><p>  聊天交流是目前互聯(lián)網(wǎng)提供的主要內(nèi)容。聊天系統(tǒng)有多種實現(xiàn)方式,類似ICQ屬于一種點對點的聊天系統(tǒng);還有一種是基于Socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登陸

47、統(tǒng)一的聊天服務(wù)器。在基于Socket的聊天系統(tǒng)中,主要有兩種角色:服務(wù)器和客戶端,不同的客戶端登陸集中式的服務(wù)器,通過服務(wù)器將一個客戶端發(fā)出的信息推送到其他所有客戶端[4]?;赟ocket的聊天系統(tǒng)最早實現(xiàn)是使用網(wǎng)頁刷新方式,通過客戶端不斷地自動刷新,服務(wù)器端整個頁面內(nèi)容下載到客戶端顯示,這種方式的聊天速度慢,而且有刷屏現(xiàn)象,很快被更新的聊天技術(shù)所替代。

48、 </p><p>  聊天系統(tǒng)在客戶端和服務(wù)器之間主要傳送的是文字信息,服務(wù)器端只需要把最近的文字信息推送到客戶端,這樣減少了網(wǎng)絡(luò)傳輸內(nèi)容,節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r間,無疑提高了聊天速度。這種“推”技術(shù)是目前基于Socket聊天系統(tǒng)的主要實現(xiàn)技術(shù)。</p><p>  在基于Socket的聊天系統(tǒng),客戶端和服務(wù)器必須保持隨時隨地的連接。這有別于普通Web瀏覽的連接方式。在使用

49、瀏覽器訪問服務(wù)器時,先由客戶端發(fā)出HTTP協(xié)議,然后服務(wù)器響應(yīng)處理這個客戶端的響應(yīng),再返回處理結(jié)果;請求(Request)和響應(yīng)(Response)是一種一對一的前后因果關(guān)系。而在基于Socket的聊天系統(tǒng)中,客戶端發(fā)出聊天信息的同時,客戶端也在接受服務(wù)器發(fā)送過來的其他人的聊天信息,因此,請求和響應(yīng)不存在那種前后對應(yīng)關(guān)系,是兩種分別獨立進行的進程。因為服務(wù)器任何時候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器

50、在以后發(fā)送中尋找定位到這個連接。</p><p>  局域網(wǎng)聊天系統(tǒng)使該系統(tǒng)的用戶能夠通過客戶端登入到該系統(tǒng),然后直接與系統(tǒng)交互[11]。首先,需啟動服務(wù)器,進行服務(wù)器的配置,進行正確的服務(wù)器配置和數(shù)據(jù)庫連接并測試成功后,開啟服務(wù)器。接下來,在客戶端,該系統(tǒng)的用戶能夠通過登陸界面進入,然后直接與系統(tǒng)交互,進行文字傳送。本系統(tǒng)支持的活動列表如下:</p><p>  配置服務(wù)器,設(shè)置IP;&

51、lt;/p><p><b>  開啟服務(wù)器;</b></p><p>  用戶客戶端與服務(wù)器連接;</p><p>  用戶與系統(tǒng)交互,進行文字傳送;</p><p>  用戶與系統(tǒng)交互,進行文件傳送;</p><p>  用戶與服務(wù)器交互,捕捉其他用戶界面;</p><p>

52、  用戶客戶端與服務(wù)器端斷開連接;</p><p>  該聊天程序分為服務(wù)器端和客戶端兩個部分。</p><p><b>  客戶端實現(xiàn)功能:</b></p><p>  向在線主機發(fā)送消息并接收消息。</p><p>  更新成員狀態(tài)。客戶端及時刷新網(wǎng)內(nèi)其他主機在線狀況。</p><p>  更

53、新成員列表,當某主機被斷開連接時,客戶端及時刷新列表。</p><p>  向某成員主機傳送文件。</p><p>  接收某成員主機傳送的文件并保存。</p><p>  捕捉成員主機的屏幕界面。</p><p><b>  服務(wù)器端實現(xiàn)功能:</b></p><p>  維護成員列表:包括接受

54、新連接,剔除舊連接。</p><p>  通知客戶端更新成員狀態(tài)。</p><p>  通知客戶端更新成員列表。</p><p><b>  驗證客戶端IP。</b></p><p>  禁止已登陸用戶再次登陸。</p><p>  為用戶客戶端傳送信息。</p><p>

55、  為用戶客戶端傳送文件。</p><p><b>  關(guān)系圖如圖3所示:</b></p><p><b>  圖3 關(guān)系功能圖</b></p><p><b>  3.2 系統(tǒng)設(shè)計</b></p><p>  3.2.1 設(shè)計原則</p><p> 

56、 考慮到系統(tǒng)的可重用性和伸縮性,需要將本系統(tǒng)的網(wǎng)絡(luò)通信底層和應(yīng)用系統(tǒng)分離開。這樣,基于可重用的網(wǎng)絡(luò)通信層,可以實現(xiàn)其他各種實時性較高的應(yīng)用系統(tǒng)。</p><p>  本系統(tǒng)在架構(gòu)設(shè)計上將分4個層次,如圖4所示。</p><p><b>  圖4 架構(gòu)層次</b></p><p>  本系統(tǒng)最底層是Socket通信層,將負責客戶端和服務(wù)器之間快速

57、的數(shù)據(jù)交換,它通過接口層和最上面應(yīng)用層保持實時數(shù)據(jù)聯(lián)系。用戶從客戶端進入到本系統(tǒng)前,將實現(xiàn)統(tǒng)一的用戶登錄驗證機制。Socket底層設(shè)計分兩大部分:協(xié)議設(shè)計和連接處理設(shè)計:協(xié)議設(shè)計和連接處理設(shè)計;CSocket層的目的是提供底層和應(yīng)用蹭一個中介媒體的作用,但是不能設(shè)計得太復雜,以免延誤數(shù)據(jù)傳送時間。</p><p>  3.2.2 工作流程</p><p>  只有充分地了解了聊天程序的工作

58、流程,才能對整個系統(tǒng)的理解更加深刻,聊天程序的工作流程如圖5所示。</p><p><b>  圖5 工作流程</b></p><p>  3.2.3 功能設(shè)計</p><p>  局域網(wǎng)聊天系統(tǒng)以局域網(wǎng)內(nèi)的用戶為應(yīng)用對象,經(jīng)過各方面需求分析,該系統(tǒng)主要由服務(wù)器端和客戶端兩部分構(gòu)成,各功能模塊如圖6所示。</p><p>

59、;<b>  圖6 功能模塊圖</b></p><p>  3.2.4 共享數(shù)據(jù)類設(shè)計</p><p><b>  A.用戶設(shè)計:</b></p><p><b>  1.用戶狀態(tài)設(shè)計</b></p><p>  客戶端與服務(wù)器端都擁有成員列表。該程序?qū)⒊蓡T列表設(shè)計為三種狀態(tài)

60、</p><p>  登陸狀態(tài):當用戶登陸服務(wù)器事,設(shè)置用戶狀態(tài)為登陸狀態(tài),服務(wù)器根據(jù)該用戶列表狀態(tài)發(fā)送成員列表。</p><p>  在線狀態(tài):用戶在線,當兩個用戶都在線時,可以相互發(fā)送和接受成員列表。</p><p>  離線狀態(tài):當用戶離線時,不能發(fā)送和接受消息。</p><p>  在線用戶之間可以直接發(fā)送消息;對離線離線用戶需要服務(wù)

61、器轉(zhuǎn)發(fā)。</p><p>  轉(zhuǎn)發(fā)關(guān)系如圖7所示。</p><p><b>  在線用戶發(fā)送消息</b></p><p>  在線用戶給離線用戶發(fā)送消息 </p><p><b>  圖7 轉(zhuǎn)發(fā)關(guān)系圖</b></p><p><b>  2.用戶類設(shè)計&l

62、t;/b></p><p>  在程序中聲明CUserInfo信息類。在該類中聲明USERSTATUE枚舉類型,描述用戶狀態(tài)。</p><p>  ONLINE:在線狀態(tài)</p><p>  OFFLINE:離線狀態(tài)</p><p>  LOGIN:登陸狀態(tài)</p><p>  UNKNOWN:未知狀態(tài),初始化狀

63、態(tài)。</p><p>  成員函數(shù)如表1CUserInfo 成員函數(shù),類成員變量如表2所示。</p><p><b>  表1 成員函數(shù)</b></p><p><b>  B.數(shù)據(jù)包類設(shè)計</b></p><p>  在程序中聲明CChatPacket類描述服務(wù)器和客戶端接收和發(fā)送的數(shù)據(jù)包。在該類

64、中聲明PACKETTYPE枚舉類型。</p><p>  MESSAGE:客戶端發(fā)送的消息</p><p>  TFILE:傳送的文件信息</p><p>  SERVERMSG:服務(wù)器發(fā)送的消息</p><p>  UNKNOWN:未知類型</p><p>  表2 CChatPakcet類成員函數(shù)</p&g

65、t;<p>  表3 CChatPacket類成員變量</p><p><b>  4 系統(tǒng)實現(xiàn)</b></p><p>  4.1 服務(wù)器端設(shè)計實現(xiàn)</p><p>  4.1.1 服務(wù)器端靜態(tài)類圖</p><p>  圖8 服務(wù)器靜態(tài)類圖 </p><p>  該圖展示

66、的是服務(wù)器端靜態(tài)類圖,包括服務(wù)器端一些靜態(tài)配置信息,如服務(wù)器地址,服務(wù)器端口,用戶信息,用戶狀況等。</p><p>  4.1.2 服務(wù)器主要類介紹</p><p>  CServerDlg類:創(chuàng)建服務(wù)器主窗口,管理用戶信息鏈表,管理在線用戶鏈表,管理離線用戶鏈表,讀取保存用戶信息,讀取保存離線消息等。</p><p><b>  表4.類成員函數(shù)<

67、;/b></p><p>  CListenSocket類 :派生于MFC的CSocket 類,用于接受客戶端的連接請求,在該類中重寫了CAsyncSocket類OnAccept()虛函數(shù)。當客戶端連接服務(wù)器時,OnAccept()函數(shù)被調(diào)用。</p><p><b>  表5 成員函數(shù)</b></p><p>  CClientSock

68、et 類:派生與MFC的CSocket類,用于接收客戶端和向其發(fā)送數(shù)據(jù)。在該類中重寫CAsyncSocket類OnReceive()和OnClose()虛函數(shù)。</p><p><b>  表6 成員函數(shù)</b></p><p>  CServerAddressDlg: 用與設(shè)置服務(wù)器地址和斷口。</p><p>  CServerApp:用于

69、生成唯一實例。</p><p>  4.1.3 服務(wù)器端主要過程介紹</p><p>  啟動服務(wù)器:啟動服務(wù)器的過程就是創(chuàng)建套接字并開始監(jiān)聽客戶端的過程。</p><p>  主要函數(shù): CSocket::Create()函數(shù);</p><p>  執(zhí)行過程: CSocket::Cretate -----CAsyncSocket------

70、CAsyncSocket</p><p>  ----------CAsyncSocket::Socket()------CAsyncSocket::Bind()------〉</p><p>  CAsyncSocket:: AtachHandle()--CAsyncSocket::Asyncselect()</p><p>  MFC 的底部函數(shù)在AttachH

71、andle()中完成,流程圖如圖9所示:</p><p><b>  圖9 流程圖</b></p><p>  服務(wù)器登陸如界面如圖10所示:</p><p>  圖10 服務(wù)器開啟界面</p><p><b>  初始化:</b></p><p><b>  列表

72、試圖控件初始化</b></p><p><b>  用戶列表初始化</b></p><p>  讀取離線消息;離線消息包括:發(fā)送消息的用戶,接收消息的用戶,接收和發(fā)送消息的時間</p><p><b>  接受客戶端請求:</b></p><p>  CListenSocket::OnA

73、ccept()---------CServerDlg::ProcessPendingAccept().接收數(shù)據(jù):在FD_READ網(wǎng)絡(luò)事件發(fā)生時,CClienSocket::OnReceive()被調(diào)用.在該函數(shù)中與CSocket, CArchive, CSocketFile 協(xié)同工作完成文件的工作,同時調(diào)用CSocket 類的Receive()函數(shù)。其流程圖如下:</p><p><b>  接受過程流

74、程圖</b></p><p><b>  處理數(shù)據(jù):</b></p><p><b>  保存離線消息</b></p><p><b>  保存用戶信息</b></p><p><b>  更新用戶列表</b></p><p

75、><b>  發(fā)送用戶鏈表</b></p><p><b>  轉(zhuǎn)發(fā)離線消息</b></p><p><b>  更新服務(wù)器界面</b></p><p><b>  退出:</b></p><p>  調(diào)用OnDestroy()函數(shù)</p>

76、;<p><b>  保存用戶信息</b></p><p><b>  保存離線消息</b></p><p><b>  清理資源</b></p><p>  4.2 客戶端設(shè)計實現(xiàn)</p><p>  4.2.1 客戶端靜態(tài)類圖</p><

77、p><b>  客戶端靜態(tài)類圖</b></p><p>  該圖展示的是系統(tǒng)客戶端的靜態(tài)類圖,包括用戶信息類,客戶端監(jiān)聽套接字定義,客戶端聊天套接字定義,客戶端路信息配置,客戶端地址等等。</p><p>  4.2.2 客戶端主要過程介紹</p><p>  客戶端主要去實現(xiàn)的是功能:初始化,創(chuàng)建初始化窗口,接收消息、文件。</p

78、><p><b>  初始化:</b></p><p>  連接服務(wù)器,連接服務(wù)器的過程如圖11所示:</p><p>  圖11 客戶端連接圖</p><p><b>  客戶端間通訊:</b></p><p>  按情況CChatDlg類構(gòu)造函數(shù)</p>&l

79、t;p><b>  連接對方</b></p><p><b>  發(fā)送/接收消息</b></p><p><b>  傳送/接收文件</b></p><p>  客戶端運行結(jié)果如下截圖所示:</p><p><b>  發(fā)送/接收消息</b><

80、/p><p><b>  接收文件</b></p><p><b>  4.3 系統(tǒng)測試</b></p><p>  4.3.1 測試意義</p><p>  本章對我們的系統(tǒng)做具體的測試,驗證系統(tǒng)的功能是否得以實現(xiàn)。</p><p>  4.3.2軟件測試的目標</p&

81、gt;<p> ?。?)測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行的程序的過程;</p><p> ?。?)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;</p><p> ?。?) 成功的測試時發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。</p><p>  從上述規(guī)則可以看出,測試的正確定義是“為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程”。正確認識測試是非常重

82、要的,測試目標決定了測試方案的設(shè)計。沒有發(fā)現(xiàn)錯誤的測試也是有價值的,完整的測試是評定測試質(zhì)量的一種方法。</p><p>  4.3.3軟件測試的方法</p><p>  軟件的測試分為兩種:黑盒測試和白盒測試。</p><p><b>  黑盒測試:</b></p><p>  黑盒測試也稱功能測試,它是通過測試來檢測

83、每個功能是否都能正常使用。在測試地,把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進行測試。它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。黑盒測試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),主要針對軟件界面和軟件功能進行測試。</p><p><b>  白盒測試:</b></p>&

84、lt;p>  軟件的白盒測試是對軟件的過程性細節(jié)做細致的檢查。這種方法是把測試對象看做一個打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序狀態(tài),確定實際狀態(tài)是否與預期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試[5]。白盒測試主要是想對程序模塊進行如下檢查:</p><p>  1、對程序模塊的所有獨立的執(zhí)行路徑至少測試

85、一遍。</p><p>  2、對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測一遍。</p><p>  3、在循環(huán)的邊界和運行的界限內(nèi)執(zhí)行循環(huán)體。</p><p>  4、測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等等。</p><p>  4.3.4 測試用例</p><p>  黑盒測試:主要是同學幫助測試系統(tǒng)的功能,

86、看看主要功能是否能得以實現(xiàn)。</p><p>  白盒測試:主要是在編寫代碼的過程中對各個類進行測試,檢查各個類的功能是否實現(xiàn),最后是對整個系統(tǒng)的測試,進一步檢查各個類的功能。</p><p>  經(jīng)過以上測試,系統(tǒng)基本完成所需功能。</p><p><b>  測試用例</b></p><p><b>  5

87、 總結(jié)與展望</b></p><p>  經(jīng)過幾個月緊張的畢業(yè)設(shè)計,局域網(wǎng)聊天軟件已基本完成,系統(tǒng)基本功能已經(jīng)實現(xiàn),測試運行也完全正常。該系統(tǒng)完成了服務(wù)器端的配置與開啟。該系統(tǒng)操作簡便、易于使用。</p><p>  在畢業(yè)設(shè)計的初期階段,我主要學習了與本課題相關(guān)的理論知識,包括:VC++的設(shè)置與開發(fā),MFC下的軟件開發(fā)過程等相關(guān)技術(shù),socket編程技術(shù)和多線程開發(fā)技術(shù),并

88、完成客戶端和服務(wù)器端文字信息傳遞實驗。</p><p>  在查閱大量資料逐漸了解系統(tǒng)需求后,我編寫了系統(tǒng)的需求分析規(guī)格說明書和系統(tǒng)概要說明書。接著便進入了系統(tǒng)詳細設(shè)計和編碼階段,在這個階段,由于自己動手經(jīng)驗不足和對開發(fā)工具的陌生,系統(tǒng)遇到了很多大大小小的問題,比如如何向注冊表中寫入連接字符傳,如何將所有留言狀態(tài)置為已讀,如何利用多線程、非堵塞I/O技術(shù)提高系統(tǒng)性能,在一次次克服困難的過程中,我得到了極大的鍛煉,

89、基本上掌握了一些的編程技巧,同時也獲得了許多寶貴的軟件開發(fā)經(jīng)驗和技巧。 </p><p>  在這段時間里我學到了很多以前沒有學到的知識,同時也將以前所學過的知識運用到實踐項目中,在提高理論知識的基礎(chǔ)上,也充分鍛煉自己的動手能力。</p><p>  當然這個系統(tǒng)還存在許多有待完善之處:</p><p>  功能相對較少,有待于添加。</p><

90、p>  在文字傳送的同時增加表情發(fā)送的功能。</p><p>  由于自己經(jīng)驗不足且時間有限,所以界面設(shè)計不盡人意。</p><p>  這次畢業(yè)設(shè)計的時間雖然不算太長,但使我對很多東西有了更深刻的認識??偨Y(jié)如下:</p><p>  查閱資料和閱讀相關(guān)文獻的重要性。</p><p>  向老師和同學請教的重要性。</p>

91、<p>  勤動手的重要性,在這次的一次次編寫代碼、調(diào)試代碼的過程中,我明白“代碼不是寫出來的,是調(diào)出來的”的道理。</p><p>  對待任何事情都要有耐心和恒心,遇到問題要冷靜地思考,積極找出癥結(jié)所在,逐個解決。</p><p>  轉(zhuǎn)眼本科生階段就要劃上句號了。通過這次畢業(yè)設(shè)計,我更深刻的認識到了教學實踐在大學課程中的重要性,同時也發(fā)覺到了自己在學習方面存在的不足之處,

92、在以后的學習中我會努力改進這些不足、不斷提高自己的動手實踐能力。</p><p><b>  參考文獻</b></p><p>  1.侯俊杰 深入淺出MFC(第二版)[M] 華中科技大學出版社 2001.1</p><p>  2.王燕 《面向?qū)ο蟮睦碚撆cc++實踐》[M] 清華大學出版社 1996 </p><p>

93、;  3.李師賢、李文軍、周曉聰?shù)?《面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)》[M] 高等教育出版社 2005.3</p><p>  4.孫鑫、余安萍 《VC++ 深入詳解》[M] 電子工業(yè)出版社 2006.4</p><p>  5.張虹 《軟件工程與軟件開發(fā)工具》[M] 清華大學出版社 2004.9</p><p>  6.汪翔、袁輝 《Visual c++實踐與提高 網(wǎng)絡(luò)編程

94、篇》[M] 中國鐵路出版2001</p><p>  7.趙松濤 《SQL Server 2000應(yīng)用與實例集錦》[M] 人民郵電出版社 1999</p><p>  8.姚領(lǐng)田《精通MFC程序設(shè)計》[M] 人民郵電出版社 2006</p><p>  9.清汗計算機工作室 《Visual C++6.0數(shù)據(jù)庫與網(wǎng)絡(luò)開發(fā)實例》[M] 機械工業(yè)出版社 2001</

95、p><p>  10.Kate Gregory 《Visual c++6開發(fā)使用手冊》[M] 機械工業(yè)出版1999</p><p>  11.Uyless Black,TCP/IP and Related Protocols[M],1995.</p><p>  12.Microsoft Developer N

96、etwork Library-Visual Studio 6.0[M],Microsoft Corporation,2001</p><p>  13.Jeff Prosise,Programming Windows with MFC[M],2000</p><p>  14.Michael J.Donahoo,Kenneth L.Calvert,

97、 TCP/IP Sockets in C, Second Edition: Practical Guide for Programmers[M],2000</p><p>  15.Haritaoglu I., Cutler R., Harwood D. and etc., Detection of People Carrying Objects using Silhouettes[C]. ICCV, 1999

98、, pp. 102-107</p><p><b>  致 謝</b></p><p>  在本文結(jié)束之際,首先要向我的導師姜毅老師致以崇高的敬意和衷心的感謝。老師在專業(yè)課程的學習、素材的收集、課題的確立、資料的查閱都給以的熱忱的關(guān)懷和細心的指導。老師嚴謹?shù)闹螌W態(tài)度、淵博的學識、對事業(yè)的兢兢業(yè)業(yè)、不斷進取的精神,為我今后的生活及工作樹立了榜樣,我的點滴進步無不凝結(jié)著

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論