版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 摘要I</b></p><p> AbstractII</p><p><b> 1 引 言1</b></p><p> 1.1 課題背景及意義:1</p><p>
2、 1.2 課題現(xiàn)狀1</p><p> 1.3 本文的主要工作:2</p><p> 1.4開發(fā)平臺與技術的選擇及介紹2</p><p> 1.4.1 開發(fā)環(huán)境的介紹2</p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述3</p><p> 1.4.3 VC
3、++6.0開發(fā)平臺簡介3</p><p> 2 需求分析及可行性研究3</p><p> 2.1 需求分析:3</p><p> 2.1.1 時間要求3</p><p> 2.1.2 功能要求3</p><p> 2.1.3 系統(tǒng)基本流程圖4</p><p> 2.
4、1.4 性能要求4</p><p> 2.1.5 測試環(huán)境規(guī)定4</p><p> 2.2 可行性研究:4</p><p> 3 相關開發(fā)技術的原理性說明5</p><p> 3.1 win32編程原理及MFC框架5</p><p> 3.1.1 WIN32編程原理5</p>
5、<p> 3.1.2 MFC框架6</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡編程接口8</p><p> 3.2.1 TCP/IP協(xié)議簡介8</p><p> 3.2.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述10</p><p> 3.3 多線程編程技
6、術11</p><p> 3.3.1 進程及線程概述11</p><p> 3.3.2 Win32 API對多線程編程的支持12</p><p><b> 4 總體設計13</b></p><p> 4.1體系結(jié)構設計13</p><p> 4.2 功能模塊劃分14&l
7、t;/p><p> 4.3 數(shù)據(jù)結(jié)構設計15</p><p> 4.4 用戶界面設計15</p><p> 4.4.1 服務器端顯示界面:15</p><p> 4.4.2 客戶端顯示界面:16</p><p> 5 詳細設計及編碼實現(xiàn)16</p><p> 5.1 主框
8、架及用戶界面模塊詳細設計16</p><p> 5.2 網(wǎng)絡掃描模塊詳細設18</p><p> 5.3 信息發(fā)送模塊詳細設計18</p><p> 5.4 信息接收模塊詳細設計20</p><p><b> 6 測 試20</b></p><p><b> 結(jié) 論
9、21</b></p><p><b> 致 謝22</b></p><p><b> 參考文獻23</b></p><p><b> 摘要</b></p><p> 隨著計算機網(wǎng)絡技術的發(fā)展,各種各樣基于網(wǎng)絡的應用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布,
10、通信,數(shù)據(jù)共享等等。局域網(wǎng)的發(fā)展也同樣迅速。很多政府機構,企業(yè),學校,都是先以一個統(tǒng)一的局域網(wǎng)聯(lián)結(jié)在一起,再分別接入INTERNET.因此基于局域網(wǎng)的即時通信工具,就這樣應運而生了。所以本文提出了一個更加合理的設計,并在WINDOWS平臺上加以了實現(xiàn).在本實現(xiàn)內(nèi)將客戶端和服務端綜合在一個程序之內(nèi),用多線程實現(xiàn)不同的并行任務。并進行了人性化的界面設計,使用起來更加簡單方便,并且功能十分合理,又易于擴展以及個性化定制。本文通過局域網(wǎng)聊天系統(tǒng)
11、來具體共享內(nèi)存實現(xiàn)進程間的數(shù)據(jù)交換,利用windows消息機制實現(xiàn)進程間的同步,兩種機制結(jié)合使用。</p><p> 關鍵詞:局域網(wǎng);即時通信;客戶端;服務端;多線程;共享內(nèi)存;信息</p><p><b> Abstract</b></p><p> Along with the high-speed development of th
12、e computer network technology, various of applications based on network was born, like information releasing, data sharing ... The development of the LAN is the same fast. Some governments, enterprises and schools consti
13、tute a LAN first ,then join into INTERNET. So the instant messenger in LAN was borned. So I make a new design, and implement it on WINDOWS platform. In my implementation the client and the server were integrated in one p
14、rogram with multi</p><p> Key words: LAN, instant messaging, client, server, multi thread,share memory,Information </p><p><b> 1 引 言</b></p><p> 1.1 課題背景及意義:</p>
15、;<p> 近年來,隨著全球信息化進程的不斷發(fā)展,網(wǎng)絡也在飛速發(fā)展。出于高效、快速地處理各種事務的目的,越來越多的企業(yè)在其內(nèi)部使用局域網(wǎng)來進行工作。在內(nèi)部局域網(wǎng)的幫助下,企業(yè)得以簡化信息流程,提高信息交換的速度,從而提高工作效率。然而,隨著企業(yè)規(guī)模的擴大,業(yè)務量的增加,在局域網(wǎng)上運行的應用越來越多,如知識庫、網(wǎng)絡會議、數(shù)據(jù)庫應用和數(shù)據(jù)的同步與備份等,這些應用對局域網(wǎng)的信息吞吐、處理能力的要求也越來越高。這些在企業(yè)內(nèi)部原有
16、局域網(wǎng)設計之初未曾考慮到的新情況的出現(xiàn)使得局域網(wǎng)不堪重負,容易發(fā)生信息阻塞,此時,局域網(wǎng)不但不能提高生產(chǎn)效率,反而成為企業(yè)發(fā)展的瓶頸。 </p><p> 為了解決上述矛盾,人們提出了許多方法。提升網(wǎng)絡帶寬及增加服務器的吞吐能力是解決此矛盾的一種方法。然而,從企業(yè)運行的成本方面考慮,無論是單純地提升網(wǎng)絡帶寬或增加服務器的吞吐能力都不能從根本上解決局域網(wǎng)資源緊張的問題,對舊有局域網(wǎng)的大規(guī)模硬件改造反而會增加企
17、業(yè)的負擔。 </p><p> 我在本文中將討論一種基于Socket的局域網(wǎng)通信工具的設計與實現(xiàn)方法。基于Socket的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機制。它的實現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地降低局域網(wǎng)通信負荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。 </p><p>
18、 基于Socket的局域網(wǎng)聊天工具是此類局域網(wǎng)通信軟件的具體實例之一,它很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學、討論等應用中都具有一定的實用價值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡帶寬資源低,占用服務器吞吐能力低,易于編程實現(xiàn)等優(yōu)點。</p><p> 基于Socket的局域網(wǎng)通信軟件應用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能擴展以適應新型的網(wǎng)絡應用,如網(wǎng)絡教育,數(shù)據(jù)影音傳輸
19、等,擁有廣泛的應用前景。</p><p> 1.2 課題現(xiàn)狀 </p><p> 基于局域網(wǎng)的即時通信工具,實際上是互聯(lián)網(wǎng)即時通信工具的一個小規(guī)模版本,廣域網(wǎng)上的即時通信工具,如今一般采用UDP或者 TCP協(xié)議體系來實現(xiàn) ,開發(fā)技術已經(jīng)比較成熟,比如較早的ICQ,MSN Messanger,Yahoo 通這些國外開發(fā)的產(chǎn)品,還有國產(chǎn)的有名的QQ,新浪UC,LAVA-LAVA等,這
20、些工具統(tǒng)統(tǒng)都實現(xiàn)了廣域網(wǎng)上的即時通信,盡管都是即時通信,實現(xiàn)了即時聊天,以及文件傳輸?shù)闹饕δ?,但是也各有各的特色,比如ICQ的巨大客戶群,MSN的個性化表情,YAHOO通的易操作性等。而QQ也具有一個相當方便的屏幕截圖功能,另外就是,所有上述軟件都實現(xiàn)了網(wǎng)絡即時的視頻,語音聊天功能。這些軟件,在使用方面各有特色,在實現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運營階段,其實現(xiàn)方式屬于商業(yè)機密,具體細節(jié)不可能得知,但是它在大的方面無非就是各
21、種利用各種平臺上的網(wǎng)絡通信接口,建構基于下層TCP/IP,或者UDP/IP協(xié)議的軟件產(chǎn)品。在局域網(wǎng)內(nèi),這些功能的實現(xiàn)跟廣域網(wǎng)相比更加簡單,因為局域網(wǎng)的網(wǎng)絡結(jié)構本身比廣域網(wǎng)要復雜,但是又可以借些理解網(wǎng)絡協(xié)議,以及網(wǎng)絡通信工具的實現(xiàn)原理,所以仍然極具研究價值。</p><p> 1.3 本文的主要工作:</p><p> 本文主要工作是設計一個基于WINDOWS平臺的局域網(wǎng)即時聊天工具,然
22、后闡述本軟件的功能、特點及使用方法,并詳細闡述開發(fā)本軟件所用的相關技術,具體分析本軟件的各個模塊的功能及實現(xiàn)方法,說明本軟件的設計思想及方法。</p><p> 1.4開發(fā)平臺與技術的選擇及介紹</p><p> 1.4.1 開發(fā)環(huán)境的介紹</p><p> 我所設計的是一個面向中小型機構內(nèi)部通信需求的局域網(wǎng)即時信息軟件,要在短時間內(nèi)開發(fā)出來并且要滿足客戶
23、要求,無論是硬件還是軟件都要選擇合適,要求如下:開發(fā)設備應該完備;開發(fā)機器的性能必須穩(wěn)定;操作系統(tǒng)的選擇必須恬當;開發(fā)出的程序可以在盡可能多的平臺上運行;要求運行機配置盡可能低檔。對此,我們選擇的硬件環(huán)境和軟件環(huán)境如下: </p><p> (1) 硬件環(huán)境 </p><p> 開發(fā)該系統(tǒng)應盡可能采用高檔的硬件。因此,在應用時應采用更好的配置。 </p><
24、;p> 處理器:Intel Pentium PIII或更高處理器。 </p><p> 內(nèi)存:128MB或更高。 </p><p> 網(wǎng)絡:局域網(wǎng)。 </p><p> (2) 軟件環(huán)境 </p><p> 選擇好的操作系統(tǒng)和好的編程語言是系統(tǒng)優(yōu)劣的關鍵,我們要求系統(tǒng)在盡可能多的環(huán)境下運行,故選擇W
25、indows XP平臺,對于一些無法在98中運行的API函數(shù),一律不采用,并采取優(yōu)化的算法編寫程序。因VC6.0具有友好的集成開發(fā)界面、面向?qū)ο蟮目梢暬_發(fā)模式、良好的數(shù)據(jù)庫及多媒體應用支持以及高效的軟件開發(fā)與程序運行,功能更大,開發(fā)效率更高,不僅是網(wǎng)絡環(huán)境下的優(yōu)秀前端開發(fā)語言和工具,也是服務器端Web編程的優(yōu)秀工具。加之我本人對本系統(tǒng)的操作最為熟練,所以選擇該平臺為開發(fā)環(huán)境。 </p><p> 操作系統(tǒng)
26、:Windows XP或Window2000。 </p><p> 開發(fā)工具:VC++6.0。 </p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述</p><p> 既然選定了WINDOWS平臺,而又要開發(fā)網(wǎng)絡通信程序,所以可以選擇WINDOWS的SOCKETS編程接口,Windows Sockets是一套開放的、支持多
27、種協(xié)議的Windows下的網(wǎng)絡編程接口。現(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關,你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Winsockets無疑是我們進行網(wǎng)絡編程的利器。</p><p> 1.4.3 VC++6.0開發(fā)平臺簡介</p><p> 開發(fā)平臺我選用了VC6.0,因為一直以來都使用VC6進行學習,對這個IDE最為熟悉,再者V
28、C同樣是由微軟開發(fā)的系統(tǒng),與其操作系統(tǒng),網(wǎng)絡接口具有最為密切的契合優(yōu)點,所以選擇了VC6.0。</p><p> 2 需求分析及可行性研究</p><p><b> 2.1 需求分析:</b></p><p> 2.1.1 時間要求</p><p> 本項目作為大學本科畢業(yè)設計題目,從3月8號接受選題開始,在5
29、月10號之前完成系統(tǒng)設計,編碼實現(xiàn)工作,在5月20號之前完成畢業(yè)設計論文初稿,6月1號之前最終完成論文。</p><p> 2.1.2 功能要求</p><p> ?。?)用戶端之間的信息發(fā)送,本程序需要實現(xiàn)的最基本的功能</p><p> ?。?)在線用戶主機名列表的維護。</p><p> ?。?)在C/S模式中,服務器與客戶端是相互
30、依賴的。在客戶端啟用以后,需要查看服務器端是否在線,服務器在線才能正常使用客戶端,如果服務器不在線,則在檢測一定次數(shù)以后自動退出客戶端程序。在使用過程中,客戶端在指定時間內(nèi)未向服務器端發(fā)送信息的,服務器認為客戶端下線;客戶端在一定時間內(nèi)未收到服務器端信息的,認為服務器已經(jīng)下線,則提示用戶并建議退出,在用戶一定時間后沒有退出的則自動關閉客戶端程序。</p><p> 2.1.3 系統(tǒng)基本流程圖</p>
31、;<p> 圖2-1 聊天系統(tǒng)工作流程圖</p><p> 2.1.4 性能要求</p><p> 首先要求程序要完全可靠,可以應付種種由于系統(tǒng)問題產(chǎn)生的錯誤,比如初始網(wǎng)絡失敗,對方突然下線等。要求提前設想到類似的盡可能多的可能發(fā)生的事件,做出相應的應對措施,并向用戶提交簡單易懂清晰明白的提示信息。</p><p> 程序要有良好的容錯性,當
32、用戶進行非法操作時或者系統(tǒng)本身出現(xiàn)問題時要能以最好的方式退出程序,避免發(fā)生程序假死現(xiàn)象。</p><p> 開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要交由別人接手開發(fā),或者自己由于種種原因需要進行二次開發(fā),那么要保證以后能夠清晰的理解整個系統(tǒng)的設計思路以及實現(xiàn)細節(jié)。</p><p> 要求程序?qū)λ\行之系統(tǒng)的硬件條件要求盡可能低,運行時內(nèi)存占用盡可能小,響應速度要盡可能快。并且不發(fā)生內(nèi)存泄
33、漏之類影響系統(tǒng)運行的錯誤事件。并且要求易于維護及擴展。所以應該采用模塊化開發(fā),各個模塊之間不要有太多的聯(lián)系,以免維護困難。</p><p> 2.1.5 測試環(huán)境規(guī)定</p><p> 在開發(fā)完成以后,自己進行一個全面的測試。</p><p> 2.2 可行性研究:</p><p> ?。?)成本可行性分析</p>&l
34、t;p> 因為本軟件只做開發(fā)學習使用,所以暫且不考慮經(jīng)濟成本及盈利問題。</p><p> ?。?)技術可行性分析</p><p> 首先我已經(jīng)搭建好開發(fā)所需要的軟硬件平臺,并進行了合理而完善的需求分析,做好了充分的前期準備工作,其次因為本程序的平臺將基于WINDOWS,將要使用網(wǎng)絡通信技術,而WINDOWS有完善成熟的網(wǎng)絡通信接口,以及與VC開發(fā)環(huán)境的嚴密契合能力,加之相類似的
35、更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個程序的開發(fā)可行性在技術上是完全可行的。</p><p> 3 相關開發(fā)技術的原理性說明</p><p> 3.1 win32編程原理及MFC框架</p><p> 3.1.1 WIN32編程原理</p><p> 所謂的Win32開發(fā),就是在C語言的層面上,直接使用W
36、in32 API開發(fā)Windows應用程序或者系統(tǒng)程序。雖說現(xiàn)在直接用Win32 API開發(fā)應用程序的人已經(jīng)不多了,但是深入理解Windows系統(tǒng)程序設計原理,仍然是成為Windows開發(fā)高手的良好途徑。所謂的Win32,其實是一個API規(guī)范,與UNIX系統(tǒng)編程接口標準POSIX是相對應的。下面是進行直接的WIN32 SDK方式編程的基本思路或者說是一個框架:</p><p> 一個WINDOWS程序分為程序代
37、碼和UI(User Interface 用戶接口)資源兩大部份,兩部份最后以RC編譯程序整合為一個完整的EXE文件。所謂UI資源是指功能菜單、對話框、程序圖標、光標形狀等等東西。這些UI資源的實際內(nèi)容(二進制代碼)系借助各種工具產(chǎn)生,并以各種擴展名存在,如 .ico .bmp .cur等等。程序員必須在一個所謂的資源描述檔(.rc )中描述它們。RC編譯器( RC.EXE )讀取RC 文件的描述后將所有UI資源文件集中制作出一個.RES
38、 文件,再與程序代碼結(jié)合在一起,這才是一個完整的 Windows可執(zhí)行文件。</p><p> 與控制臺程序相同的是,一個WIN32程序也必須有一個程序入口點,但是在這兒它不再叫main(),而叫做WinMain(),當WINDOWS的SHELL檢測到用戶欲執(zhí)行一個EXE程序,就會調(diào)用加載器把程序進行加載,然后調(diào)用C startup code,后者再調(diào)用WinMain(),程序的執(zhí)行就開始了,WinMain()
39、函數(shù)的原型為:</p><p> int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);</p><p> 圖3-1 32位WINDOWS程序的開發(fā)流程</p><p> 下面程序必須進行必要的初始化工作-產(chǎn)生窗口,第一步是
40、注冊一個窗口類:用API函數(shù):RegisterClass(),而這個函數(shù)需要一個已經(jīng)定義好的系統(tǒng)結(jié)構:WNDCLASS,這個結(jié)構里面定義了窗口的種種屬性,需要自己定義,但是許多屬性都有默認值。然后調(diào)用CreateWindow()函數(shù)來產(chǎn)生具有上述定義屬性的已注冊窗口,但是需要注意的是它只是生成窗口,但并不顯示之,所以還需要調(diào)用一個函數(shù)ShowWindow()將它顯示在屏幕上,做完這些初始化工作以后,系統(tǒng)將進入消息循環(huán):</p>
41、;<p> while (GetMessage(&msg, NULL, 0, 0)){</p><p> TranslateMessage(&msg);</p><p> DispatchMessage(&msg);}</p><p> 當消息循環(huán)捕捉到消息以后將交由窗口函數(shù)WndProc()窗口函數(shù)進行相應的處理。這樣
42、,一個基于消息事件驅(qū)動的WIN32程序的雛形就建立了起來。</p><p> 3.1.2 MFC框架</p><p> 由上面的介紹可以看出,直接用API函數(shù)開發(fā)一個WIN32程序是相當麻煩的,有好多既定的重復性的工作要做,所以微軟就用C++的類機制將絕大部分的API函數(shù)進行了封裝,構成了類,并且將基本的流程也封裝在類機制下面,大大簡化了WIN32開的的復雜性,尤其是在開發(fā)比較大型程
43、序的時候這個便宜性更會得以體現(xiàn)。它就是Microsoft Foundation Classes,簡稱為MFC,可以說它是VC開發(fā)環(huán)境的一個核心構件。MFC構架了一個龐大的類體系結(jié)構,在4.0時代就多達189個類,程序代碼達252個文件,58個頭文件,共10MB之多,MFC4.2時又多加了29個類,但是最為主干的是下面類結(jié)構示圖所示的一些類:</p><p> 圖3-2 MFC類框架主體 </p>
44、<p> CObject 是 MFC 類庫的根類。 </p><p> MFC 類庫包括: </p><p> ?。?)CCmdTarget 類:是 CObject 類的子類,它是 MFC 庫中所有具有消息映射屬性的類的公共基類。它的子類有 CWinThread 類, CWnd 類、 CDocument 類,從 CCndTarget 類派生的類能在程序運行時動態(tài)創(chuàng)建對象,并處
45、理命令消息。 </p><p> ?。?)CWinThread 類:是 CCmdTarget 的子類。 CWinThread 是所有線程類的基類,封裝了應用程序操作的多線程功能。應用程序類 CWinApp 是 CWinThread 的子類,封裝了初始化、運行、終止應用程序的代碼。 </p><p> ?。?)CWnd 類:窗口類,是 CcmdTarget 類的子類,從 CWnd 派生的類可
46、以擁有自己的窗口,并對它進行控制。窗口框架類 CFrameWnd 和 CView 類是 CWnd 的子類,前者創(chuàng)建和維護窗口的邊框、菜單欄、工具欄、狀態(tài)欄,負責顯示和搜索用戶命令,后者負責為文檔提供一個或幾個視圖。視圖的作用是為修改、查詢文檔等任務提供人機交互的界面。 </p><p> ?。?)文檔類 CDocument 類:是 CCmdTarget 類的子類,負責封裝和維護文檔。文檔包括應用程序的工作成果或環(huán)
47、境設置數(shù)據(jù)等,可以是程序需要保存的任何內(nèi)容。 </p><p> 一個 MFC 應用程序并不直接操作上述類,而是以上述類為基類派生新的類,構建 Windows 應用程序的基本框架。</p><p> 構建一個基于MFC框架的程序,可以使用MFC的向?qū)С绦?,但首先要明白,一個基于MFC的程序可以有幾種類型:基于單文檔結(jié)構的程序,基于多文檔結(jié)構的程序以及基于對話框的應用程序,不同類型的程序
48、具有不同的程序?qū)傩?。使用其向?qū)б约翱丶幊?,使得不論是界面編寫,還是程序內(nèi)核設計,都更加的簡單。其中有合理的消息映射機制,有方便的運行時類型識別功能,更有文檔/視圖結(jié)構設計,文檔串行化功能等非常多的優(yōu)秀功能。</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡編程接口</p><p> 3.2.1 TCP/IP協(xié)議簡介</p><p
49、> ?。?)TCP/IP協(xié)議</p><p> 通常包含了一系列與“TCP(傳輸控制協(xié)議)”和“IP(網(wǎng)際協(xié)議)”有聯(lián)系的網(wǎng)絡協(xié)議,它包括其它的協(xié)議,應用軟件,甚至網(wǎng)絡媒介。這些協(xié)議的示例是:UDP(User Datagram Protocol)協(xié)議、ICMP(Internet Control Message Protocol)協(xié)議、ARP(地址解析協(xié)議)和其他一些協(xié)議的協(xié)議組。應用的示例:telnet(
50、遠程登錄)、ftp(文件傳遞協(xié)議)、http等。 </p><p><b> ?。?)邏輯結(jié)構:</b></p><p><b> 圖3-3 邏輯結(jié)構</b></p><p> 這是TCP/IP協(xié)議的分層結(jié)構在互連網(wǎng)計算機上的表示,用互連網(wǎng)技術互相通信的每臺計算機都有這樣的分層結(jié)構。這樣的分層結(jié)構決定了計算機在inte
51、rnet上互相通信的方式。數(shù)據(jù)通過這樣的分層結(jié)構從上層傳到底層,然后通過網(wǎng)線把數(shù)據(jù)傳送出去。底層的水平線代表以太網(wǎng)網(wǎng)線,“O”代表收發(fā)器,“*”代表IP地址,“@”代表網(wǎng)址,理解這樣的分層結(jié)構是理解INTERNET技術的基礎。</p><p> (3)本論文涉及到的協(xié)議:IP、TCP </p><p> IP(Internet Protocol)是TCP/IP的心臟,也是網(wǎng)絡層中最重要
52、的協(xié)議。 IP層接收由更低層(網(wǎng)絡接口層例如以太網(wǎng)設備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。 </p><p> UDP(IP協(xié)議號17)是一個無連接的
53、數(shù)據(jù)報協(xié)議。它是一個“best effort”或者“不可靠”協(xié)議——不是因為它特別不可靠,而是因為它不檢查數(shù)據(jù)包是否已經(jīng)到達目的地,并且不保證它們按順序到達。UDP的典型性應用是如流媒體(音頻和視頻等)這樣按時到達比可靠性更重要的應用,或者如DNS查找這樣的簡單查詢/響應應用,如果需要建立可靠的連結(jié),哪么所作的額外工作將是不成比例地大。本程序只應用于局域網(wǎng)中,局域網(wǎng)中的數(shù)據(jù)流傳輸?shù)目煽啃愿?,故選擇UDP協(xié)議。</p>&l
54、t;p> 3.2.2 WINDOWS SOCKETS網(wǎng)絡編程接口概述</p><p> 在網(wǎng)絡編程中最常用的方案便是Client/Server (客戶機/服務器)模型。在這種方案中客戶應用程序向服務器程序請求服務。一個服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也就是說,服務進程一直處于休眠狀態(tài),直到一個客戶向這個服務的地址提出了連接請求。在這個時刻,服務程序被"驚醒"并且
55、為客戶提供服務-對客戶的請求作出適當?shù)姆磻?lt;/p><p> 為了方便這種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)用多
56、種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。</p><p> Socket實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Socket接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個Socket接口來實現(xiàn)。如下圖所示:</p><p> 圖3-4 面向連接的套接字的系統(tǒng)調(diào)用圖</p><p> 微軟為Visual C++定義了W
57、insock類如CAsyncSocket類和派生于CAsyncSocket 的CSocket類,它們簡單易用,我們當然可以使用這些類來實現(xiàn)自己的網(wǎng)絡程序,但是為了更好的了解Winsock API編程技術,本設計中將使用底層的API函數(shù)實現(xiàn) Winsock 平臺的即時通信工具。</p><p> 在VC中進行WINSOCK的API編程開發(fā)的時候,需要在項目中使用下面的三個文件,否則會出現(xiàn)編譯錯誤。</p&g
58、t;<p> (1) WINSOCK.H: 這是WINSOCK API的頭文件,需要包含在項目中。</p><p> (2) WSOCK32.LIB: WINSOCK API連接庫文件。</p><p> (3) WINSOCK.DLL: WINSOCK的動態(tài)連接庫,位于WINDOWS的安裝目錄下。</p><p> 3.3 多線程編程技術&l
59、t;/p><p> 3.3.1 進程及線程概述</p><p> 進程和線程都是操作系統(tǒng)的概念。進程是應用程序的執(zhí)行實例,每個進程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進程在運行過程中創(chuàng)建的資源隨著進程的終止而被銷毀,所使用的系統(tǒng)資源在進程終止時被釋放或關閉。</p><p> 線程是進程內(nèi)部的一個執(zhí)行單元。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行
60、了該進程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進程也就隨之終止。</p><p> 每一個進程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應用程序中創(chuàng)建其它線程,多個線程并發(fā)地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系
61、統(tǒng)資源,所以線程間的通訊非常方便,多線程技術的應用也較為廣泛。</p><p> 多線程可以實現(xiàn)并行處理,避免了某項任務長時間占用CPU時間。要說明的一點是,目前大多數(shù)的計算機都是單處理器(CPU)的,為了運行所有這些線程,操作系統(tǒng)為每個獨立線程安排一些CPU時間,操作系統(tǒng)以輪換方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運行。由此可見,如果兩個非?;钴S的線程為了搶奪對CPU的控制權,在線程切換
62、時會消耗很多的CPU資源,反而會降低系統(tǒng)的性能。這一點在多線程編程時應該注意。</p><p> Win32 SDK函數(shù)支持進行多線程的程序設計,并提供了操作系統(tǒng)原理中的各種同步、互斥和臨界區(qū)等操作。Visual C++ 6.0中,使用MFC類庫也實現(xiàn)了多線程的程序設計,使得多線程編程更加方便。</p><p> 3.3.2 Win32 API對多線程編程的支持</p>
63、<p> Win32 提供了一系列的API函數(shù)來完成線程的創(chuàng)建、掛起、恢復、終結(jié)以及通信等工作。下面將選取其中的一些重要函數(shù)進行說明。 </p><p> (1) HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,</p><p> DWORD dwStackSize,</p><
64、;p> LPTHREAD_START_ROUTINE lpStartAddress,</p><p> LPVOID lpParameter,</p><p> DWORD dwCreationFlags,</p><p> LPDWORD lpThreadId);</p><p> 該函數(shù)在其調(diào)用進程的進程空間里創(chuàng)建一個新的
65、線程,并返回已建線程的句柄。</p><p> (2) DWORD SuspendThread(HANDLE hThread);</p><p> 該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。</p><p> (3) DWORD ResumeThread(HANDLE hThread);</p><p> 該函數(shù)
66、用于結(jié)束線程的掛起狀態(tài),執(zhí)行線程。 </p><p> (4) VOID ExitThread(DWORD dwExitCode);</p><p> 該函數(shù)用于線程終結(jié)自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調(diào)用。其中參數(shù)dwExitCode用來設置線程的退出碼。 </p><p> (5) BOOL TerminateThread(HANDLE hThread
67、,DWORD dwExitCode);</p><p> 一般情況下,線程運行結(jié)束之后,線程函數(shù)正常返回,但是應用程序可以調(diào)用TerminateThread強行終止某一線程的執(zhí)行。</p><p> 使用TerminateThread()終止某個線程的執(zhí)行是不安全的,可能會引起系統(tǒng)不穩(wěn)定;雖然該函數(shù)立即終止線程的執(zhí)行,但并不釋放線程所占用的資源。因此,一般不建議使用該函數(shù)。 </
68、p><p> (6)BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam);</p><p> 該函數(shù)將一條消息放入到指定線程的消息隊列中,并且不等到消息被該線程處理時便返回。</p><p> 調(diào)用該函數(shù)時,如果即將接收消息的線程沒有創(chuàng)建消息循環(huán),則該函數(shù)執(zhí)行失敗。&
69、lt;/p><p><b> 4 總體設計</b></p><p><b> 4.1體系結(jié)構設計</b></p><p> 通常的通信工具,都采用客戶機/服務器(C/S)體系結(jié)構,C/S結(jié)構是這樣的一種結(jié)構:它包括一個客戶機(或前端),一個服務器(或稱后端),客戶機的作用是訪問和處理遠程服務器上的數(shù)據(jù),服務器的作用是接收
70、和處理客戶機的數(shù)據(jù)請求。有時,可能有多個客戶向同一個服務器同時請求服務,這就需要服務器決定怎樣處理這些請求。Client/Server結(jié)構是當前數(shù)據(jù)庫應用程序中極為流行的一種方式。尤其是網(wǎng)絡技術的發(fā)展,使得當前很多系統(tǒng)都采用這種方式進行構造,其最大的優(yōu)點是將計算機工作任務分別由客戶端和服務器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務器端還可以將信息集中起來,任何客戶機都可以通過訪問服務器而獲得所需的信息。Client/
71、Server模型最終可歸結(jié)為一種“請求/應答”關系。一個請求總是首先被客戶發(fā)出,然后服務器總是被動地接收請求,返回客戶需要的結(jié)果。在客戶發(fā)出一個請求之前,服務進程一直處于休眠狀態(tài)。一個客戶提出請求后,服務進程被“喚醒”并且為客戶提供服務,對客戶的請求做出所需要的應答。如下圖所示:</p><p> 圖4-1客戶機/服務器通信結(jié)構示圖</p><p> 在客戶端啟動后,客戶端計算得到本地
72、網(wǎng)絡的廣播地址,進行廣播查找服務器端,服務器接收到客戶端的廣播信息后返回服務器地址,則客戶端接收、驗證信息并記錄服務器端地址,然后客戶端啟動定時期,定時發(fā)送信息到服務器,以告知服務器自己在線,然后服務器返回在線用戶列表,服務器依靠客戶端發(fā)送的信息來更新維護在線用戶列表。在客戶端與服務器盡心數(shù)據(jù)交換,擁有了在線用戶列表后,就可以選擇IP進行客戶端之間的點對點信息交流了。如果服務器不在線,則客戶端會提示用戶退出,在一定的時間后自動退出。&l
73、t;/p><p> 4.2 功能模塊劃分</p><p> 根據(jù)以上的系統(tǒng)需求分析,以及體系結(jié)構設計,可以對系統(tǒng)進行如下的功能模塊劃分如下圖所示。</p><p> 圖4-2 功能模塊圖</p><p> 其中主線程模塊完成對網(wǎng)絡的初始化,然后啟動兩個子線程:服務端監(jiān)聽線程以及網(wǎng)絡掃描模塊線程,然后由網(wǎng)絡掃描模塊得到當前的網(wǎng)絡用戶分布情況
74、,并填充相關的數(shù)據(jù)結(jié)構,然后生成用戶列表界面顯示給用戶。</p><p> 通信模塊又包括兩個子模塊:數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊,這兩個模塊都由系統(tǒng)定義的網(wǎng)絡事件來觸發(fā)。</p><p> 輸入/輸出模塊用來響應用戶雙擊用戶列表的某一項要準備發(fā)送信息時的消息,以及當系統(tǒng)接收到某個網(wǎng)絡用戶發(fā)送來的消息,要將其顯示給用戶的時候。</p><p> 網(wǎng)絡掃描模塊是由
75、主線程模塊啟動,進行網(wǎng)絡掃描,確定哪些用戶當前處于可到達狀態(tài),以及哪些可到達狀態(tài)的用戶安裝有相應的通信軟件,并啟動之可以與之進行通信。</p><p> 4.3 數(shù)據(jù)結(jié)構設計</p><p> ?。?)在線用戶信息結(jié)構體: </p><p> struct USERINFO</p><p><b> {</b>&l
76、t;/p><p> CString ip;//存儲IP</p><p> BOOL on_line;//用于判斷次IP是否更新過,未更新則從單向鏈表中刪除</p><p> USERINFO *next;//下一個存儲單元的地址,最后一個為NULL</p><p><b> };</b><
77、;/p><p> 注:用于構建服務器端的在線用戶單向鏈表。</p><p> (2)從服務器端發(fā)送到客戶端的在線用戶列表信息結(jié)構:</p><p> ?。?)傳輸?shù)骄€程的信息結(jié)構體:</p><p><b> 客戶端:</b></p><p> struct RECVPARAM </p&
78、gt;<p><b> {</b></p><p> SOCKET sock;//存儲接口套接字</p><p> HWND hwnd;//存儲窗口句柄</p><p><b> };</b></p><p><b> 服務器端:</b>&
79、lt;/p><p> struct RECVPARAM</p><p><b> {</b></p><p> SOCKET sock;//存儲接口套接字</p><p> HWND hwnd;//存儲窗口句柄</p><p> BOOL endtread;//存
80、儲用于判斷是否退出線程循環(huán)</p><p> USERINFO *userhead;//存儲在線用戶單向鏈表的頭指針</p><p><b> };</b></p><p> 注:線程函數(shù)為靜態(tài)函數(shù),無法調(diào)用成員變量和成員函數(shù),所以需要將需要的數(shù)據(jù)傳送進去。</p><p> 4.4 用戶界面設計</
81、p><p> 在能夠完全滿足軟件所需功能,設計界面要清爽、操作要簡單易懂的基本原則下,本軟件的界面設計如下:</p><p> 4.4.1 服務器端顯示界面:</p><p> 圖4-3服務器端界面圖</p><p> 4.4.2 客戶端顯示界面:</p><p> 圖4-4 客戶端顯示界面</p&g
82、t;<p> 5 詳細設計及編碼實現(xiàn)</p><p> 5.1 主框架及用戶界面模塊詳細設計</p><p> 主框架模塊由兩個類構成:CserverDlg類和CserverApp類。類結(jié)構如下:</p><p> 圖5-1 服務器端主框架模塊圖</p><p> 其中前面為紅色方塊的為類成員函數(shù),淺藍色方塊的為類成員
83、數(shù)據(jù)。</p><p> CserverApp類為應用程序主框架類,它在后臺完成了一個基于MFC的應用程序的所有基本的初始化工作,如果用戶需要在程序的初始化時加入一些自定義的操作,只需在其中的InitInstance()函數(shù)中加入就可以了。在本程序中,只需要將WIN SOCKETS的網(wǎng)絡初始化工作完成。代碼為:</p><p> if (!AfxSocketInit())</p&
84、gt;<p><b> {</b></p><p> AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p><p> return FALSE;</p><p><b> }</b></p><p> 在每一個基于MFC的WIN32程序中,它
85、都是通過一個由全局對象啟動整個初始化過程的機制,因為根據(jù)C++的設計,一個全局對象的生成即其構造函數(shù)的調(diào)用要先于程序的入口函數(shù)。所以,在這個對象的構造函數(shù)中可以做很多準備工作,這個對象就是程序主框架類的對象,具體到本程序中,即是上面講到的CserverDlg類。</p><p> 服務端線程的具體作就是首先創(chuàng)建一個SOCKETS,然后將該套接字綁定到本地主機的某一個固定的端口上,在本程序中選擇了3127端口。接
86、著將該套接字設置為異步非阻塞模式,并為它注冊各種網(wǎng)絡異步事件,最后開始監(jiān)聽。</p><p> 5.2 網(wǎng)絡掃描模塊詳細設</p><p> 圖5-2網(wǎng)絡掃描示意圖</p><p> 5.3 信息發(fā)送模塊詳細設計</p><p> 圖5-3 信息發(fā)送模塊流程圖 </p><p> 5.4 信息接收模塊詳細設計
87、</p><p> 圖5-4 信息接收模塊流程圖</p><p> 以上即各個模塊的詳細設計的主要實現(xiàn)過程。</p><p><b> 6 測 試</b></p><p> 用二臺機器通過集線器構成一個局域網(wǎng),進行正確的網(wǎng)絡配置,三臺機器上都安裝了WINDOWS操作系統(tǒng),經(jīng)過測試可正常運行。</p>
88、<p><b> 結(jié) 論</b></p><p> 在當今電腦網(wǎng)絡密布的世界當中,一個簡單高效的局域網(wǎng)通信工具是如此的具有實用性,所以我們應當重視對它的相關研究與開發(fā)。在這次的畢業(yè)設計中,我應用了VC++6.0開發(fā)工具在WINDOWS平臺上開發(fā)了一個基于WINDOWS平臺的局域網(wǎng)通信工具,在這一重要的領域進行了相關的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱
89、能力,都起了相當大的益處。通過此次畢業(yè)設計,我了解了進程間通訊的兩種基本方法共享內(nèi)存和消息,在實例中具體體會到了共享內(nèi)存和消息的使用方法。所以,我決定認真總結(jié)這次畢業(yè)設計的經(jīng)驗,以及學習到的知識,來更加的充實自己的頭腦和完善自己的知識結(jié)構。</p><p> 另外,我也在這次設計中看到了自己的許多不足之處,由于初次接觸到語言類問題,很多步驟都是自己臨時學習,大大影響了系統(tǒng)的開發(fā)進度。</p>&l
90、t;p> 既然設計已經(jīng)完成,論文也寫到結(jié)論的地方,我希望自己能以一個良好的心態(tài)順利畢業(yè),走向社會。</p><p><b> 致 謝</b></p><p> 首先要感謝老師,是她在整個畢業(yè)設計過程中給我提供了畢業(yè)設計所需要的資料,幫助解答畢業(yè)設計中遇到的問題。其次要感謝實驗室的老師們,是他們畢業(yè)設計中為我準備好了畢業(yè)設計的工作環(huán)境,在翻譯版圖的整個過程中
91、給予了我指導,再次是要感謝和我一起做畢業(yè)設計的同學們,正是有了他們,我們才在遇到問題時,相互鼓勵,最終解決了問題,圓滿地完成了畢業(yè)設計的各項工作。</p><p><b> 參考文獻</b></p><p> [1]侯俊杰.深入淺出MFC[M].華中科技大學出版社.2001</p><p> [2]孫鑫.VC++深入詳解[M].電子工業(yè)出
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 局域網(wǎng)聊天系統(tǒng)畢業(yè)設計
- 原創(chuàng)畢業(yè)設計論文局域網(wǎng)聊天系統(tǒng)
- 局域網(wǎng)聊天室系統(tǒng)的設計與實現(xiàn)畢業(yè)設計
- 局域網(wǎng)畢業(yè)論文---局域網(wǎng)聊天軟件
- 局域網(wǎng)聊天室系統(tǒng)的設計與實現(xiàn)畢業(yè)設計
- 局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件-畢業(yè)論文
- 局域網(wǎng)聊天系統(tǒng)的設計與實現(xiàn)-畢業(yè)論文
- 基于java的局域網(wǎng)聊天系統(tǒng)
- vc局域網(wǎng)聊天室
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- java局域網(wǎng)聊天室系統(tǒng)畢業(yè)論文
- 基于java局域網(wǎng)聊天軟件
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- 軟件課程設計---局域網(wǎng)聊天程序
- 局域網(wǎng)聊天工具設計畢業(yè)論文
- 局域網(wǎng)聊天軟件的設計與實現(xiàn)畢業(yè)論文
- 局域網(wǎng)聊天程序java課程設計
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設計報告
- 局域網(wǎng)聊天室系統(tǒng)的設計與實現(xiàn).doc
評論
0/150
提交評論