版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 2009 — 2010學(xué)年第 三 學(xué)期</p><p> 題目 局域網(wǎng)監(jiān)控系統(tǒng)</p><p> 畢業(yè)設(shè)計(論文)任務(wù)書</p><p> 畢業(yè)設(shè)計(論文)題目(來源、類型)</p><p> 局域網(wǎng)
2、監(jiān)控系統(tǒng)(B、X) </p><p> 畢業(yè)設(shè)計(論文)工作內(nèi)容與基本要求(目標(biāo)、任務(wù)、途徑、方法、成果形式,應(yīng)掌握的原始資料(數(shù)據(jù))、參考資料(文獻(xiàn))以及設(shè)計技術(shù)要求、注意事項等)</p><p> 為高效、便利的進(jìn)行局域網(wǎng)監(jiān)控,研制基于UDP協(xié)議,該系統(tǒng)功能如下:</p><p> 1.注冊、修改
3、個人資料功能。 </p><p> 2.對客戶端數(shù)據(jù)進(jìn)行選擇性的過濾 </p><p> 3.用戶資料管理
4、 </p><p> 4.管理員權(quán)限管理 </p><p> 5. 用戶桌面的信息
5、 </p><p> 本系統(tǒng)采用VC6.0+Acess2000進(jìn)行開發(fā)。 </p><p> 希望能支持多方面問卷、有用戶交流頁面(論壇或留言板) </p><p> 在研制中希望能體現(xiàn)VC++ 的獨特優(yōu)點,也希望能在居于網(wǎng)的安全性上有所研究 <
6、/p><p><b> 教研室審批意見:</b></p><p><b> 審批人簽名:</b></p><p> 備注:(1)來源:A—教師擬訂;B—學(xué)生建議;C—企業(yè)和社會征集;D—實習(xí)單位提供</p><p> ?。?)類型:X—真實課題;Y—模擬課題;Z—虛擬課題</p>&
7、lt;p> 中州大學(xué)信息工程學(xué)院設(shè)計(論文)開題報告</p><p><b> 課題名稱:</b></p><p> 局域網(wǎng)監(jiān)控系統(tǒng) </p><p> 指導(dǎo)教師: 王學(xué)軍 職稱: 副教授 學(xué)生人數(shù): 1人
8、</p><p> 學(xué)生姓名(學(xué)號、專業(yè)):姓名:曲利賓 學(xué)號:200702131051131 專業(yè):信息安全技術(shù) </p><p><b> 開題報告內(nèi)容: </b></p><p> 設(shè)計的
9、目的及意義:隨著信息化的不斷擴展,大部分企業(yè)都采用計算機來管理自己的財務(wù)、商業(yè)機密等別的業(yè)務(wù)。但是并不是每個用計算機的員工,都能在上班時間充分的利用計算機干自己的工作。即便是制定了相關(guān)的規(guī)章制度還是不能約束其行為。那么局域網(wǎng)監(jiān)控系統(tǒng),完全可以起到約束的作用。該系統(tǒng)可以實時的對局域網(wǎng)內(nèi)的每臺計算機進(jìn)行屏幕監(jiān)控。
10、 </p><p> 設(shè)計的要求:(1)學(xué)會如何分割UDP數(shù)據(jù)報;(2)學(xué)會發(fā)送和接受UDP數(shù)據(jù)報;(3)學(xué)會自定義控件;(4)學(xué)會抓取屏幕(5)學(xué)會ADO技術(shù)對數(shù)據(jù)庫操作
11、 </p><p> 預(yù)期成果:(1)將客戶端隱藏,并且不斷向服務(wù)器端發(fā)送屏幕信息;(2)通過發(fā)送指令來控制客戶端發(fā)來屏幕信息的位置;(3)通過ADO技術(shù)實現(xiàn)對ACCess數(shù)據(jù)庫操作 </p>&
12、lt;p> 時間安排:9月20號-----10月15號熟悉課題的基本要求,查閱相關(guān)的資料,初步擬定設(shè)計的整體方案,完成開題報告 ;10月16日-----11月2號將監(jiān)控系統(tǒng)的客戶端完成,并對客戶端進(jìn)行試驗總;11月2日-----11月13號將服務(wù)器端完成,對數(shù)據(jù)的操作進(jìn)行總結(jié),以及整個畢業(yè)設(shè)計的完成。
13、 </p><p> 在王老師的指導(dǎo)下,綜合我們以前所學(xué)的專業(yè)知識及查找的相關(guān)資料,能夠在預(yù)期的時間內(nèi)完成整個網(wǎng)站和論文。
14、
15、 </p><p> 指導(dǎo)教師簽名: 日期: </p><p> 備注:(1)來源:A
16、—教師擬訂;B—學(xué)生建議;C—企業(yè)和社會征集;D—實習(xí)單位提供</p><p> ?。?)類型:X—真實課題;Y—模擬課題;Z—虛擬課題</p><p><b> 摘 要</b></p><p> Internet在我國剛剛起步時,上網(wǎng)人群主要是從事IT技術(shù)的專業(yè)人員,年齡段多是中年人,但是隨著Internet技術(shù)的快速發(fā)展,我國的上網(wǎng)人
17、群年齡逐年增多,不僅包括中年人,青少年及老年人在上網(wǎng)人群的比重不斷增加。Internet上豐富的資源給人們帶來了很多的方便,但是也存在許多不良的信息危害青少年的健康,一些家長擔(dān)心青少年上網(wǎng)會影響其學(xué)習(xí)。局域網(wǎng)監(jiān)控系統(tǒng)能夠?qū)⒕钟蚓W(wǎng)中的某一臺計算機的屏幕信息發(fā)送到服務(wù)器端,家長可以隨時了解青少年瀏覽的網(wǎng)頁信息,對青少年上網(wǎng)起到監(jiān)督作用。</p><p> 本文首先介紹了問題的背景,接著提出問題,并針對具體項目展開需
18、求調(diào)查分析;再基于需求設(shè)計出具體的方案;然后對整個系統(tǒng)進(jìn)行了詳細(xì)的分析和設(shè)計,在設(shè)計與實現(xiàn)過程中,結(jié)合源代碼具體的描述出整個項目的開發(fā)過程;最后對整個系統(tǒng)進(jìn)行測試得出測試結(jié)論。</p><p> 關(guān)鍵字:屏幕監(jiān)控;數(shù)據(jù)過濾</p><p><b> Abstract</b></p><p> The Internet in China h
19、as just started, IT is mainly engaged in the Internet population technology professionals, the age is more middle-aged, but with the rapid development of Internet technology, online population increased year by year, not
20、 only include age, teenagers and the elderly in middle-aged people increase the proportion of Internet. Abundant natural resources in the Internet has brought people a lot of convenience, but there are also many bad info
21、rmation of health hazards, some paren</p><p> This paper firstly introduces the background, and then put forward questions, and in the light of specific project on demand survey analysis, Based on the speci
22、fic requirements to design the plan, Then the whole system to carry on the detailed analysis and design, design and implementation process, combined with a specific description of the source of the development process of
23、 project, Finally to the whole system test that test conclusions.</p><p> Key words: Monitor screen Data filtering</p><p><b> 第一章 緒論8</b></p><p> §1.1 問題背景8&l
24、t;/p><p> §1.2 研究范圍及技術(shù)要求8</p><p> §1.2.1 研究范圍8</p><p> §1.2.2 技術(shù)要求8</p><p> 第二章 系統(tǒng)設(shè)計10</p><p> §2.1 需求分析10</p><p>
25、 §2.2 系統(tǒng)目標(biāo)10</p><p> §2.3 系統(tǒng)功能結(jié)構(gòu)10</p><p> §2.3 系統(tǒng)預(yù)覽11</p><p> §2.4 業(yè)務(wù)流程圖13</p><p> §2.5程序運行環(huán)境14</p><p> §2.5數(shù)據(jù)庫設(shè)計
26、14</p><p> 第三章 客戶端設(shè)計15</p><p> §3.1客戶端模塊概述15</p><p> §3.2客戶端技術(shù)分析15</p><p> §3.3客戶端實現(xiàn)過程16</p><p> 第四章 公共類設(shè)計20</p><p>
27、 第五章 系統(tǒng)登錄模塊設(shè)計20</p><p> §5.1系統(tǒng)登錄模塊概述20</p><p> §5.2系統(tǒng)登錄模塊技術(shù)分析21</p><p> §5.3系統(tǒng)登錄模塊實現(xiàn)過程21</p><p> 第六章 主窗體設(shè)計24</p><p> §6.1主窗體概
28、述24</p><p> §6.2主窗體的實現(xiàn)過程24</p><p> 第七章 操作員管理模塊設(shè)計28</p><p> §7.1操作員模塊概述28</p><p> §7.2操作員模塊技術(shù)分析29</p><p> §7.3操作員模塊實現(xiàn)過程29<
29、/p><p> 第八章 系統(tǒng)設(shè)置模塊設(shè)計36</p><p> §8.1系統(tǒng)設(shè)置模塊概述36</p><p> §8.2系統(tǒng)設(shè)置模塊實現(xiàn)過程36</p><p><b> }37</b></p><p> 第九章 開發(fā)技巧與難點分析37</p>&
30、lt;p> §9.1及時關(guān)閉記錄集37</p><p> §9.2訪問帶密碼的Access數(shù)據(jù)庫38</p><p> §9.3防止SQL注入攻擊38</p><p> §9.4ON_COMMAND_RANGE宏的注意事項39</p><p> §9.5收獲與體會39
31、</p><p><b> 致謝39</b></p><p><b> 參考文獻(xiàn)40</b></p><p><b> 第一章 緒論</b></p><p><b> §1.1 問題背景</b></p><p>
32、; Internet在我國剛剛起步時,上網(wǎng)人群主要是從事IT技術(shù)的專業(yè)人員,年齡段多是中年人,但是隨著Internet技術(shù)的快速發(fā)展,我國的上網(wǎng)人群年齡逐年增多,不僅包括中年人,青少年及老年人在上網(wǎng)人群的比重不斷增加。Internet上豐富的資源給人們帶來了很多的方便,但是也存在許多不良的信息危害青少年的健康,一些家長擔(dān)心青少年上網(wǎng)會影響其學(xué)習(xí)。局域網(wǎng)監(jiān)控系統(tǒng)能夠?qū)⒕钟蚓W(wǎng)中的某一臺計算機的屏幕信息發(fā)送到服務(wù)器端,家長可以隨時了解青少年
33、瀏覽的網(wǎng)頁信息,對青少年上網(wǎng)起到監(jiān)督作用。</p><p> §1.2 研究范圍及技術(shù)要求</p><p> §1.2.1 研究范圍 </p><p> 設(shè)計該系統(tǒng)的功能模塊劃分,使用Acesss 2003設(shè)計出該系統(tǒng)的數(shù)據(jù)庫。</p><p> 參考實際局域網(wǎng)監(jiān)控系統(tǒng),完成對系統(tǒng)的需求分析及設(shè)計文檔。</
34、p><p> 根據(jù)需求分析及設(shè)計文檔完成代碼編制。</p><p> §1.2.2 技術(shù)要求 </p><p><b> 功能模塊劃分合理。</b></p><p> 數(shù)據(jù)庫設(shè)計滿足功能要求。</p><p> 采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。</p><p>
35、 對客戶端的數(shù)據(jù)進(jìn)行過濾。</p><p> 建立數(shù)據(jù)庫訪問接口類,實現(xiàn)對數(shù)據(jù)庫的訪問。</p><p> 6. 實時抓取客戶端的屏幕信息。</p><p><b> 第二章 系統(tǒng)設(shè)計</b></p><p><b> §2.1 需求分析</b></p><
36、p> 局域網(wǎng)監(jiān)控系統(tǒng)主要是對計算機屏幕信息進(jìn)行實時監(jiān)控。因此局域網(wǎng)監(jiān)控系統(tǒng)需要實現(xiàn)屏幕信息的時時發(fā)送和接受。由于屏幕信息需要時時顯示,因此信息的傳輸速度要快,屏幕信息要時時發(fā)送。為此,選擇UDP協(xié)議進(jìn)行傳輸。為了防止服務(wù)器端隨意的接收客戶端發(fā)來的數(shù)據(jù)報,服務(wù)器端需要對發(fā)來的數(shù)據(jù)報進(jìn)行過濾,只有是制定的客戶端才接收數(shù)據(jù)。</p><p><b> §2.2 系統(tǒng)目標(biāo)</b>
37、</p><p> 本系統(tǒng)屬于小型的局域網(wǎng)監(jiān)控系統(tǒng),可以對某一臺計算機進(jìn)行屏幕監(jiān)控。本系統(tǒng)主要實現(xiàn)一下目標(biāo):</p><p> 系統(tǒng)采用人機交互的方式,界面美觀友好。</p><p> 屏幕信息需要時時顯示,網(wǎng)絡(luò)延時不能大于1秒。</p><p> 服務(wù)器端可以隨時運行,只要客戶端運行,就能夠顯示屏幕信息。</p>&l
38、t;p> 系統(tǒng)運行時占用內(nèi)存不能大于10MB,以免影響系統(tǒng)的性能。</p><p> 客戶端運行時需要隱藏顯示窗口,其感覺不到在運行。</p><p> §2.3 系統(tǒng)功能結(jié)構(gòu)</p><p> 局域網(wǎng)監(jiān)控系統(tǒng)功能結(jié)構(gòu)圖如下所示。</p><p><b> §2.3 系統(tǒng)預(yù)覽</b>&
39、lt;/p><p> 局域網(wǎng)監(jiān)控系統(tǒng)分為客戶端和服務(wù)器端兩部分,其中客戶端運行時將窗體隱身,服務(wù)器端主要有四個窗體組成,分別為主窗體、操作員管理窗體、系統(tǒng)登錄窗體、系統(tǒng)設(shè)置窗體。其中,主窗體用于接收并顯示屏幕信息。操作員管理窗體用于添加、修改、刪除操作員信息,</p><p> 系統(tǒng)登錄窗體用于系統(tǒng)在啟動時驗證用戶身份。系統(tǒng)設(shè)置窗體用于設(shè)置客戶端 IP。</p><p&
40、gt; 主 窗 體</p><p><b> 系統(tǒng)登錄窗體</b></p><p><b> 操作員管理窗體</b></p><p><b> 系統(tǒng)設(shè)置窗體</b></p><p> §2.4 業(yè)
41、務(wù)流程圖</p><p> §2.5程序運行環(huán)境</p><p> 本系統(tǒng)對運行環(huán)境有一定的要求,具體如下:</p><p> 系統(tǒng)開發(fā)平臺:Microsoft VC 6.0.</p><p> 系統(tǒng)開發(fā)語言:C++</p><p> 數(shù)據(jù)庫軟件系統(tǒng)軟件:Microsoft Acess 2003&l
42、t;/p><p> 運行平臺:Windows XP</p><p> 分辨率:最佳效果1024*1280像素</p><p><b> §2.5數(shù)據(jù)庫設(shè)計</b></p><p><b> 數(shù)據(jù)庫分析</b></p><p> 在開發(fā)局域網(wǎng)監(jiān)控系統(tǒng)時,使用數(shù)據(jù)
43、庫主要用于記錄操作員信息及客戶端信息,系統(tǒng)設(shè)計的數(shù)據(jù)量比較小,因此本系統(tǒng)采用的Microsoft Access2003作為后臺數(shù)據(jù)庫,數(shù)據(jù)庫名字為db_Video,其中包含了2張表</p><p><b> 數(shù)據(jù)庫概念設(shè)計</b></p><p> 數(shù)據(jù)庫概念設(shè)計是根據(jù)各個模塊的需求“抽象”出數(shù)據(jù)實體的過程,也就是宏觀上用文字、圖表描述數(shù)據(jù)表的過程。</p&
44、gt;<p> 為了增加系統(tǒng)的安全性,服務(wù)器端設(shè)置了登錄窗口,在系統(tǒng)啟動時彈出該窗口,要求用戶輸入操作員名稱和密碼。其中用戶的操作員名稱和密碼信息存儲在數(shù)據(jù)表中。這樣在系統(tǒng)登錄模塊就需要一個操作員信息實體。</p><p> 為了過濾服務(wù)器端接受的數(shù)據(jù)報,時期值接收制定客戶端發(fā)來的數(shù)據(jù),需要存儲客戶端IP,為此,需要單獨設(shè)計一個客戶端信息實體對象。</p><p><
45、;b> 第三章 客戶端設(shè)計</b></p><p> §3.1客戶端模塊概述</p><p> 局域網(wǎng)監(jiān)控系統(tǒng)分為客戶端和服務(wù)器端兩大模塊,其中,客戶端的主要作用是時時抓取本機的屏幕信息,將其分成多個數(shù)據(jù)報,發(fā)送到服務(wù)器端。為了保證屏幕信息能夠完整的發(fā)送到服務(wù)器,客戶端在發(fā)送一個數(shù)據(jù)報后,需要等待服務(wù)器端發(fā)來的確認(rèn)信息,然后繼續(xù)發(fā)送下一個數(shù)據(jù)報。</
46、p><p> §3.2客戶端技術(shù)分析</p><p> 客戶端要實現(xiàn)屏幕信息的發(fā)送,要解決兩個關(guān)鍵問題:一是獲取屏幕信息,將其轉(zhuǎn)換為位圖格式;二是將位圖信息發(fā)送到服務(wù)器。</p><p> 將屏幕信息轉(zhuǎn)換為位圖格式</p><p> CDC* pDeskDC = GetDesktopWindow()->GetDC();
47、//獲取桌面畫布對象</p><p><b> CRect rc;</b></p><p> GetDesktopWindow()->GetClientRect(rc);//獲取屏幕的客戶區(qū)域</p><p> int width = 300;//獲取屏幕的寬度</p><p>
48、 int height = 300;//獲取屏幕的高度</p><p> CDC memDC;//定義一個內(nèi)存畫布</p><p> memDC.CreateCompatibleDC(pDeskDC);//創(chuàng)建一個兼容的畫布</p><p> CBitmap bmp;</p><p>
49、; bmp.CreateCompatibleBitmap(pDeskDC,width,height);//創(chuàng)建兼容位圖</p><p> memDC.SelectObject(&bmp);//選中位圖對象</p><p> BITMAP bitmap; //定義位圖信息</p>
50、;<p> bmp.GetBitmap(&bitmap); //獲取位圖信息</p><p> memDC.BitBlt(0,0,width,height,pDeskDC,m_X,m_Y,SRCCOPY);//將屏幕信息輸出到位圖</p><p> 根據(jù)位圖對象獲取位圖信息</p><p
51、> 一個位圖文件通常有“位圖文件頭”、“位圖信息頭”、“調(diào)色板”和“實際位圖數(shù)據(jù)”4個部分組成。其中“位圖文件頭” 包含BMP圖像文件的類型、顯示內(nèi)容、位圖標(biāo)記、位圖大小等信息,在程序中使用BITMAPFILEHEADER結(jié)構(gòu)來表示?!拔粓D信息頭”和“調(diào)色板”2個部分描述了位圖的寬度、高度、是否壓縮、位圖顏色等信息,在程序中使用BITMAPINFO結(jié)構(gòu)描述。由于程序發(fā)送的位圖不是以文件形式發(fā)送的,只需要發(fā)送位圖位圖信息頭、調(diào)色板
52、和實際數(shù)據(jù)就可以了,因此不需要位圖文件頭。</p><p> int panelsize = 0;//記錄調(diào)色板大小</p><p> if (bitmap.bmBitsPixel<16)//判斷是否為真彩色位圖</p><p> panelsize = pow(2,bitmap.bmBitsPixel*sizeof(R
53、GBQUAD));</p><p> BITMAPINFO *pBInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);</p><p> pBInfo->bmiHeader.biBitCount = bitmap.bmBitsPixel;//設(shè)置位圖顏色用到的位數(shù)</p><p&g
54、t; pBInfo->bmiHeader.biClrImportant = 0;//指定顯示位圖顏色的種類,如果值為0,所有的顏色種類都需要</p><p> pBInfo->bmiHeader.biCompression = 0;//指定位圖的壓縮類型-- “該語句=0”說明改為圖不進(jìn)行壓縮</p><p> pBInfo->bmiHeader.biHeig
55、ht = height;//指定位圖的高度</p><p> pBInfo->bmiHeader.biPlanes = bitmap.bmPlanes;//為目標(biāo)設(shè)備指定調(diào)色板的數(shù)量,且該值只能是1</p><p> pBInfo->bmiHeader.biSize = sizeof(BITMAPINFO);//設(shè)置BITMAP
56、INFO結(jié)構(gòu)大小</p><p> pBInfo->bmiHeader.biSizeImage = = bitmap.bmWidthBytes*bitmap.bmHeight;//設(shè)置圖像的大小</p><p> pBInfo->bmiHeader.biWidth = width;//指定位圖的寬度</p><p> pB
57、Info->bmiHeader.biXPelsPerMeter = 0;//目標(biāo)設(shè)備的水平分辨率</p><p> pBInfo->bmiHeader.biYPelsPerMeter = 0;//目標(biāo)設(shè)備的垂直分辨率</p><p> m_X = m_RecX;</p><p> m_Y = m_RecY;</p><p>
58、 三、將位圖信息發(fā)送到服務(wù)器</p><p> 因為將圖片信息傳送到服務(wù)器端要求的實時性比較強,所以采用UDP協(xié)議將位圖信息發(fā)送到服務(wù)器</p><p> §3.3客戶端實現(xiàn)過程</p><p> 創(chuàng)建一個基于對話框的工程,名稱為Client。</p><p> 在Stafx.h文件中引入套接字庫。</p>
59、<p> 在應(yīng)用程序類的Instance函數(shù)中初始化套接字</p><p> WSADATA data;</p><p> WSAStartup(2,&data);</p><p> 改寫應(yīng)用程序類的虛方法ExitInstance</p><p> int CClientApp::ExitInstance() &l
60、t;/p><p><b> {</b></p><p> WSACleanup(); //清理套接字資源</p><p> return CWinApp::ExitInstance();</p><p><b> }</b></p><p> 在對話框類中添加
61、如下成員變量</p><p> SOCKET m_Socket;//客戶端套接字</p><p> CString m_ServerIP;//服務(wù)器IP</p><p> int m_X,m_Y;//抓起屏幕的起始坐標(biāo)</p><p> WORD m_RecX,m_RecY;//收到服務(wù)器發(fā)來的抓起屏幕的起始坐標(biāo)</p>
62、<p> BOOL m_Confirm;//確認(rèn)信息</p><p> int m_FrameIndex;//記錄索引</p><p> int count;//每一個位圖分報的數(shù)量</p><p> int bmpsize;//位圖的實際大小</p><p> int mod;//記錄余數(shù)</p><
63、;p> char *pSendBuf;//發(fā)送緩沖區(qū)指針</p><p> char *Head;//臨時指針</p><p> sockaddr_in addrl;//套接字地址</p><p> BOOL m_Received;//是否受到服務(wù)器發(fā)來的確認(rèn)信息</p><p> int m_Counter;//計數(shù)器<
64、;/p><p> 6、在對話框的初始化函數(shù)中,創(chuàng)建套接字將其綁定到指定位置,并初始化相應(yīng)的成員變量</p><p> BOOL CClientDlg::OnInitDialog()</p><p><b> {</b></p><p> hostent *phost=gethostbyname(""
65、;);</p><p> char *localIP=inet_ntoa(*(struct in_addr*)*phost->h_addr_list);</p><p> sockaddr_in addr;</p><p> addr.sin_family=AF_INET;</p><p> addr.sin_addr.S_un
66、.S_addr=inet_addr(localIP);</p><p> addr.sin_port=htons(5001);</p><p> m_Socket=socket(AF_INET,SOCK_DGRAM,0);</p><p> if(m_Socket==INVALID_SOCKET)</p><p><b>
67、{</b></p><p> MessageBox("套接字創(chuàng)建失?。?quot;);</p><p><b> }</b></p><p> if(bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)</p><p>
68、<b> {</b></p><p> MessageBox("綁定套接字失敗!");</p><p><b> }</b></p><p> m_ServerIP="127.0.0.1";</p><p> GetPrivateProfileStr
69、ing("ServerInfo","IP","127.0.0.1",m_ServerIP.GetBuffer(0),MAX_PATH,"./server.ini");//讀取INI配置文件</p><p> WSAAsyncSelect(m_Socket,m_hWnd,CM_RECEIVED,FD_READ);//該函數(shù)的功能是在套
70、接字m_Socket上,看是否有讀取事件發(fā)生如果有,向窗口句柄為m_hWnd的窗口發(fā)送CM_RECEIVED消息</p><p> m_X=m_Y=0;</p><p> m_RecX=m_RecY=0;</p><p> m_Confirm=true;</p><p> pSendBuf=new char[1024*1024*2];
71、</p><p> Head=pSendBuf;</p><p><b> Onok();</b></p><p> m_Received=false;</p><p> m_Counter=0;</p><p> SetTimer(1,1000,NULL);</p>&l
72、t;p> return TRUE; // return TRUE unless you set the focus to a control</p><p><b> }</b></p><p> 自定義一個消息,當(dāng)套接字接到數(shù)據(jù)時,將該消息發(fā)送到主窗口</p><p> #define GraphSize 1024</
73、p><p> #define CM_RECEIVED WM_USER+200 //自定的消息CM_RECEIVED</p><p> 添加OnReceived()方法,該方法的作用是:接收服務(wù)器端發(fā)來的確認(rèn)信息和控制信息</p><p> void CClientDlg::OnReceived()</p><p><b> {
74、</b></p><p> char *pData=new char[1024];</p><p> memset(pData,0,1024);</p><p> sockaddr_in addr;</p><p> int factsize=sizeof(sockaddr);</p><p>
75、int ret=recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);</p><p> if(ret!=-1) //判斷是否接收成功</p><p><b> {</b></p><p> if(ret==4) //方向指令</p>&l
76、t;p><b> {</b></p><p> m_RecX=*(WORD*)&pData[0]; //填充屏幕x坐標(biāo)</p><p> m_RecY=*(WORD*)&pData[2]; //填充屏幕y坐標(biāo)</p><p><b> }</b></p><
77、p> if(ret==8) //確認(rèn)指令</p><p><b> {</b></p><p> m_Received=TRUE;</p><p> m_FrameIndex+=1; //將發(fā)送的數(shù)據(jù)報的序號加1</p><p> if(m_FrameIndex<coun
78、t) //判斷數(shù)據(jù)是否發(fā)送完</p><p> SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addrl);</p><p><b> else</b></p><p> Onok(); //重新開始發(fā)送數(shù)據(jù)</p><
79、;p><b> }</b></p><p><b> }</b></p><p> delete[] pData;</p><p><b> }</b></p><p> 將CM_RECEIVED消息和處理該消息的函數(shù)OnReceived關(guān)聯(lián)起來</p&g
80、t;<p> ON_MESSAGE(CM_RECEIVED,OnReceived)</p><p> 添加SendData方法,該方法的作用:將數(shù)據(jù)封成數(shù)據(jù)報,將該數(shù)據(jù)報發(fā)送到指定地址</p><p> int CClientDlg::SendData(int index, int mod, int bmpsize, int frames, char *pSendBuf
81、, sockaddr_in &addr)</p><p><b> {</b></p><p><b> /*</b></p><p> index表示數(shù)據(jù)包的序列號;mod表示余數(shù);bmpsize表示數(shù)據(jù)報中位圖數(shù)據(jù)的大小</p><p> frames表示總的發(fā)送次數(shù);addr表
82、示服務(wù)器地址;pSendBuf表示要發(fā)送數(shù)據(jù)的緩沖區(qū)</p><p><b> */</b></p><p> char *pPackage; //定義一個數(shù)據(jù)報指針</p><p> int packsize=0; //初始化數(shù)據(jù)報的大小</p>
83、<p> if(mod==0||index!=frames-1) //計算數(shù)據(jù)報的大小</p><p> packsize=2+2+bmpsize+4+2+2+4;</p><p><b> else</b></p><p> packsize=2+2+mod+4+2+2+4;</p><p&
84、gt; pPackage=new char[packsize];</p><p> memset(pPackage,0,packsize);</p><p> *(WORD*)&pPackage[0]=index; //填充序號</p><p> if(index!=frames-1)
85、 //填充結(jié)束標(biāo)記</p><p> *(WORD*)&pPackage[2]=0;</p><p><b> else</b></p><p> *(WORD*)&pPackage[2]=1;</p><p> pSendBuf+=index*bmpsize;
86、 //定位數(shù)據(jù)</p><p> memcpy(&pPackage[4],pSendBuf,packsize-16); //填充位圖數(shù)據(jù)</p><p> *(int*)&pPackage[packsize-12]=bmpsize; //填充位圖大小</p><p> *(WORD*)&pPackage[packsiz
87、e-8]=m_X; //填充屏幕x坐標(biāo)</p><p> *(WORD*)&pPackage[packsize-6]=m_Y; //填充屏幕y坐標(biāo)</p><p> *(int*)&pPackage[packsize-4]=packsize; //填充數(shù)據(jù)報大小</p><p> //m_Confirm=
88、false;</p><p> int ret=sendto(m_Socket,pPackage,packsize,0,(sockaddr*)&addr,sizeof(addr));</p><p> delete[] pPackage;</p><p> return ret;</p><p><b> }<
89、/b></p><p> 處理對話框的WM_TIMER消息,在發(fā)送數(shù)據(jù)后,如果5秒鐘內(nèi)沒有收到服務(wù)器端 發(fā)來的確認(rèn)信息,放棄當(dāng)前位圖的發(fā)送,重新抓取屏幕位圖并發(fā)送。</p><p> void CClientDlg::OnTimer(UINT nIDEvent) </p><p><b> {</b></p>&l
90、t;p> // TODO: Add your message handler code here and/or call default</p><p> if(!m_Received) //判斷是否接收到服務(wù)器發(fā)來的數(shù)據(jù)</p><p><b> {</b></p><p> m_Counter++;
91、 //計數(shù)器自加1</p><p> if(m_Counter>5)</p><p><b> {</b></p><p> m_Counter=0;</p><p><b> Onok();</b></p><p><b> }</b&
92、gt;</p><p><b> }</b></p><p> else //當(dāng)接收到服務(wù)器發(fā)來的數(shù)據(jù)</p><p><b> {</b></p><p> m_Received=FALSE;</p><p> m_Co
93、unter=0;</p><p><b> }</b></p><p> CDialog::OnTimer(nIDEvent);</p><p><b> }</b></p><p> 添加一個Onok方法,將屏幕信息轉(zhuǎn)化為位圖信息,劃分?jǐn)?shù)據(jù)報的格式,計算每個 位圖信息需要發(fā)送數(shù)據(jù)報
94、的次數(shù),調(diào)用SendData方法。</p><p> 在對話框類中的OnPaint函數(shù)中添加ShowWindow(SW_HIDE);將對話框隱藏。</p><p><b> 第四章 公共類設(shè)計</b></p><p> 在局域網(wǎng)監(jiān)控系統(tǒng)的服務(wù)器端需要對數(shù)據(jù)庫進(jìn)行操作。為了方便管理,將有關(guān)數(shù)據(jù)庫的操作封裝為一個類CDataManage。該
95、類中包含ADOConnection對象、ADOCommand對象和ADORecordset對象,被提供InitDatabase方法用于構(gòu)造ADO對象、連接數(shù)據(jù)庫。CDataManage類的具體實現(xiàn)過程如下:</p><p> 在visual C++工程中的Stdafx.h頭文件中導(dǎo)入msado15.dll動態(tài)庫。</p><p> #import "C:\Program Fi
96、les\Common Files\System\ado\msado15.dll" no_namespacerename("EOF","ADOEof")</p><p> 創(chuàng)建一個普通類,命名為CDataManage,在該類中添加如下成員變量。</p><p> _ConnectionPtr m_pConnection;</p>
97、;<p> _CommandPtr m_pCommand;</p><p> _RecordsetPtr m_pRecord;</p><p> 向CDataManage類中添加InitDatabase方法構(gòu)造ADO對象,并連接數(shù)據(jù)庫。</p><p> BOOL CDataManage::InitDatebase()</p>&
98、lt;p><b> {</b></p><p> HRESULT hr;</p><p><b> try</b></p><p><b> {</b></p><p> hr = m_pConnection.CreateInstance("ADODB
99、.Connection");///創(chuàng)建Connection對象</p><p> m_pCommand.CreateInstance("ADODB.Command");</p><p> m_pRecord.CreateInstance("ADODB.Recordset");</p><p> if(SUCCE
100、EDED(hr))</p><p><b> {</b></p><p> hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_Video.mdb","","",adModeUnknown);///連接數(shù)
101、據(jù)庫</p><p> ///上面一句中連接字串中的Provider是針對ACCESS2000環(huán)境的,對于ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51; }</p><p><b> }</b></p><p><b> }</b></p><p
102、> catch(_com_error e)///捕捉異常</p><p><b> {</b></p><p> CString errormessage;</p><p> errormessage.Format("連接數(shù)據(jù)庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());</p&g
103、t;<p> AfxMessageBox(errormessage);///顯示錯誤信息</p><p> return FALSE;</p><p><b> } </b></p><p> return true;</p><p><b> }</b></p>
104、<p> 第五章 系統(tǒng)登錄模塊設(shè)計</p><p> §5.1系統(tǒng)登錄模塊概述</p><p> 為了防止非法用戶使用系統(tǒng),在局域網(wǎng)監(jiān)控系統(tǒng)的服務(wù)器端提供了系統(tǒng)登錄莫塊。在系統(tǒng)啟動時,只有輸入正確的用戶名和密碼才能進(jìn)入主界面。</p><p> §5.2系統(tǒng)登錄模塊技術(shù)分析</p><p> 為了驗
105、證用戶輸入的用戶名和密碼是否正確,需要根據(jù)用戶輸入的用戶名和密碼從數(shù)據(jù)庫中查詢用戶信息,如果有信息返回,表明用戶名和密碼正確;否則不正確。程序中使用了ADOCommand對象執(zhí)行查詢操作。在使用ADOCommand對象時,首先需要設(shè)置ActiveConnection屬性,該屬性關(guān)聯(lián)一個ADOCommand對象,然后設(shè)置CommandText屬性,該屬性表示ADOCommand對象要執(zhí)行的SQL語句。如果SQl語句中有參數(shù),還需要調(diào)用Pa
106、rameters屬性的Append方法插入?yún)?shù),最后調(diào)用ADOCommand對象的execute方法執(zhí)行SQL語句。代碼如下:</p><p> _ParameterPtr pUser,pPassword;</p><p> CServerApp *pAPP=(CServerApp*)AfxGetApp();</p><p> pUser=pAPP->m
107、_DataManage.m_pCommand->CreateParameter("user",adVarWChar,adParamInput,</p><p> 100,(_bstr_t)user);</p><p> pPassword=pAPP->m_DataManage.m_pCommand->CreateParameter("pa
108、ssword",adVarWChar,adParamInput,</p><p> 100,(_bstr_t)password);</p><p> pAPP->m_DataManage.m_pConnection->CursorLocation=adUseServer;</p><p> pAPP->m_DataManage.m_
109、pCommand->ActiveConnection=pAPP->m_DataManage.m_pConnection;</p><p> pAPP->m_DataManage.m_pCommand->Parameters->Append(pUser);</p><p> pAPP->m_DataManage.m_pCommand->Param
110、eters->Append(pPassword);</p><p> //CString sql="select *from tb_userInfo where UserName='"+user+"' and PassWord='"+password+"'";</p><p> pAPP-
111、>m_DataManage.m_pCommand->CommandText=</p><p> "select *from tb_userInfo where UserName=@user and PassWord=@password";//</p><p> _RecordsetPtr pRecord=NULL;</p><p>
112、; pRecord=pAPP->m_DataManage.m_pCommand->Execute(0,NULL,adCmdText);</p><p> pAPP->m_DataManage.m_pCommand->Parameters->Delete("user");</p><p> pAPP->m_DataManage.m
113、_pCommand->Parameters->Delete("password");</p><p> §5.3系統(tǒng)登錄模塊實現(xiàn)過程</p><p> 創(chuàng)建一個對話框,如下圖:</p><p> 修改對話框類的PreTranslateMessage虛方法,當(dāng)編輯框獲得焦點時,按Enter鍵控制焦點移動。</p&g
114、t;<p> BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg) </p><p><b> {</b></p><p> if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )</p><p>
115、;<b> {</b></p><p> CString str;</p><p><b> //獲取類名</b></p><p> GetClassName(pMsg->hwnd,str.GetBuffer(0),MAX_PATH);</p><p> if (str=="
116、;Edit")</p><p> pMsg->wParam = VK_TAB ;</p><p><b> }</b></p><p> return CDialog::PreTranslateMessage(pMsg);</p><p><b> }</b></p&g
117、t;<p> 處理“登錄”按鈕的單擊事件,驗證用戶名和密碼是否正確。如果用戶名和密碼正確,關(guān)閉對話框并返回IDOK。</p><p> void CLoginDlg::OnLogin() </p><p><b> {</b></p><p> // TODO: Add your control notification
118、handler code here</p><p> CString user,password;</p><p> m_Username.GetWindowText(user);</p><p> m_Password.GetWindowText(password);</p><p> if(user.IsEmpty()||pass
119、word.IsEmpty())</p><p><b> {</b></p><p> MessageBox("用戶或密碼不能為空!");</p><p> m_Username.SetFocus();</p><p><b> }</b></p><
120、p><b> else</b></p><p><b> {</b></p><p> _ParameterPtr pUser,pPassword;</p><p> CServerApp *pAPP=(CServerApp*)AfxGetApp();</p><p> pUser=
121、pAPP->m_DataManage.m_pCommand->CreateParameter("user",adVarWChar,adParamInput,</p><p> 100,(_bstr_t)user);</p><p> pPassword=pAPP->m_DataManage.m_pCommand->CreateParamete
122、r("password",adVarWChar,adParamInput,</p><p> 100,(_bstr_t)password);</p><p> pAPP->m_DataManage.m_pConnection->CursorLocation=adUseServer;</p><p> pAPP->m_Dat
123、aManage.m_pCommand->ActiveConnection=pAPP->m_DataManage.m_pConnection;</p><p> pAPP->m_DataManage.m_pCommand->Parameters->Append(pUser);</p><p> pAPP->m_DataManage.m_pCommand
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計--局域網(wǎng)監(jiān)控系統(tǒng)
- 局域網(wǎng)監(jiān)控系統(tǒng)畢業(yè)設(shè)計
- 局域網(wǎng)設(shè)計畢業(yè)設(shè)計
- 局域網(wǎng)畢業(yè)設(shè)計2
- 局域網(wǎng)畢業(yè)設(shè)計論文
- cisco局域網(wǎng)設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---無線局域網(wǎng)設(shè)計
- 畢業(yè)設(shè)計---企業(yè)局域網(wǎng)設(shè)計
- 畢業(yè)設(shè)計-小型網(wǎng)吧局域網(wǎng)設(shè)計
- 畢業(yè)設(shè)計---局域網(wǎng)規(guī)劃與設(shè)計
- 校園局域網(wǎng)規(guī)劃設(shè)計_畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---校園局域網(wǎng)的組建
- 校園局域網(wǎng)的組建畢業(yè)設(shè)計
- 局域網(wǎng)反監(jiān)控
- 畢業(yè)設(shè)計----公司局域網(wǎng)組建
- 畢業(yè)設(shè)計(論文)----企業(yè)局域網(wǎng)設(shè)計
- 企業(yè)局域網(wǎng)設(shè)計畢業(yè)設(shè)計(論文)
- 畢業(yè)設(shè)計--局域網(wǎng)的設(shè)計與實現(xiàn)
- 企業(yè)局域網(wǎng)設(shè)計畢業(yè)設(shè)計(論文)
- 局域網(wǎng)實時監(jiān)控系統(tǒng)設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論