

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計(論文)</b></p><p> 2009 — 2010學年第 三 學期</p><p> 題目 局域網監(jiān)控系統(tǒng)</p><p> 畢業(yè)設計(論文)任務書</p><p> 畢業(yè)設計(論文)題目(來源、類型)</p><p> 局域網
2、監(jiān)控系統(tǒng)(B、X) </p><p> 畢業(yè)設計(論文)工作內容與基本要求(目標、任務、途徑、方法、成果形式,應掌握的原始資料(數據)、參考資料(文獻)以及設計技術要求、注意事項等)</p><p> 為高效、便利的進行局域網監(jiān)控,研制基于UDP協(xié)議,該系統(tǒng)功能如下:</p><p> 1.注冊、修改
3、個人資料功能。 </p><p> 2.對客戶端數據進行選擇性的過濾 </p><p> 3.用戶資料管理
4、 </p><p> 4.管理員權限管理 </p><p> 5. 用戶桌面的信息
5、 </p><p> 本系統(tǒng)采用VC6.0+Acess2000進行開發(fā)。 </p><p> 希望能支持多方面問卷、有用戶交流頁面(論壇或留言板) </p><p> 在研制中希望能體現VC++ 的獨特優(yōu)點,也希望能在居于網的安全性上有所研究 <
6、/p><p><b> 教研室審批意見:</b></p><p><b> 審批人簽名:</b></p><p> 備注:(1)來源:A—教師擬訂;B—學生建議;C—企業(yè)和社會征集;D—實習單位提供</p><p> ?。?)類型:X—真實課題;Y—模擬課題;Z—虛擬課題</p>&
7、lt;p> 中州大學信息工程學院設計(論文)開題報告</p><p><b> 課題名稱:</b></p><p> 局域網監(jiān)控系統(tǒng) </p><p> 指導教師: 王學軍 職稱: 副教授 學生人數: 1人
8、</p><p> 學生姓名(學號、專業(yè)):姓名:曲利賓 學號:200702131051131 專業(yè):信息安全技術 </p><p><b> 開題報告內容: </b></p><p> 設計的
9、目的及意義:隨著信息化的不斷擴展,大部分企業(yè)都采用計算機來管理自己的財務、商業(yè)機密等別的業(yè)務。但是并不是每個用計算機的員工,都能在上班時間充分的利用計算機干自己的工作。即便是制定了相關的規(guī)章制度還是不能約束其行為。那么局域網監(jiān)控系統(tǒng),完全可以起到約束的作用。該系統(tǒng)可以實時的對局域網內的每臺計算機進行屏幕監(jiān)控。
10、 </p><p> 設計的要求:(1)學會如何分割UDP數據報;(2)學會發(fā)送和接受UDP數據報;(3)學會自定義控件;(4)學會抓取屏幕(5)學會ADO技術對數據庫操作
11、 </p><p> 預期成果:(1)將客戶端隱藏,并且不斷向服務器端發(fā)送屏幕信息;(2)通過發(fā)送指令來控制客戶端發(fā)來屏幕信息的位置;(3)通過ADO技術實現對ACCess數據庫操作 </p>&
12、lt;p> 時間安排:9月20號-----10月15號熟悉課題的基本要求,查閱相關的資料,初步擬定設計的整體方案,完成開題報告 ;10月16日-----11月2號將監(jiān)控系統(tǒng)的客戶端完成,并對客戶端進行試驗總;11月2日-----11月13號將服務器端完成,對數據的操作進行總結,以及整個畢業(yè)設計的完成。
13、 </p><p> 在王老師的指導下,綜合我們以前所學的專業(yè)知識及查找的相關資料,能夠在預期的時間內完成整個網站和論文。
14、
15、 </p><p> 指導教師簽名: 日期: </p><p> 備注:(1)來源:A
16、—教師擬訂;B—學生建議;C—企業(yè)和社會征集;D—實習單位提供</p><p> ?。?)類型:X—真實課題;Y—模擬課題;Z—虛擬課題</p><p><b> 摘 要</b></p><p> Internet在我國剛剛起步時,上網人群主要是從事IT技術的專業(yè)人員,年齡段多是中年人,但是隨著Internet技術的快速發(fā)展,我國的上網人
17、群年齡逐年增多,不僅包括中年人,青少年及老年人在上網人群的比重不斷增加。Internet上豐富的資源給人們帶來了很多的方便,但是也存在許多不良的信息危害青少年的健康,一些家長擔心青少年上網會影響其學習。局域網監(jiān)控系統(tǒng)能夠將局域網中的某一臺計算機的屏幕信息發(fā)送到服務器端,家長可以隨時了解青少年瀏覽的網頁信息,對青少年上網起到監(jiān)督作用。</p><p> 本文首先介紹了問題的背景,接著提出問題,并針對具體項目展開需
18、求調查分析;再基于需求設計出具體的方案;然后對整個系統(tǒng)進行了詳細的分析和設計,在設計與實現過程中,結合源代碼具體的描述出整個項目的開發(fā)過程;最后對整個系統(tǒng)進行測試得出測試結論。</p><p> 關鍵字:屏幕監(jiān)控;數據過濾</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 研究范圍及技術要求8</p><p> §1.2.1 研究范圍8</p><p> §1.2.2 技術要求8</p><p> 第二章 系統(tǒng)設計10</p><p> §2.1 需求分析10</p><p>
25、 §2.2 系統(tǒng)目標10</p><p> §2.3 系統(tǒng)功能結構10</p><p> §2.3 系統(tǒng)預覽11</p><p> §2.4 業(yè)務流程圖13</p><p> §2.5程序運行環(huán)境14</p><p> §2.5數據庫設計
26、14</p><p> 第三章 客戶端設計15</p><p> §3.1客戶端模塊概述15</p><p> §3.2客戶端技術分析15</p><p> §3.3客戶端實現過程16</p><p> 第四章 公共類設計20</p><p>
27、 第五章 系統(tǒng)登錄模塊設計20</p><p> §5.1系統(tǒng)登錄模塊概述20</p><p> §5.2系統(tǒng)登錄模塊技術分析21</p><p> §5.3系統(tǒng)登錄模塊實現過程21</p><p> 第六章 主窗體設計24</p><p> §6.1主窗體概
28、述24</p><p> §6.2主窗體的實現過程24</p><p> 第七章 操作員管理模塊設計28</p><p> §7.1操作員模塊概述28</p><p> §7.2操作員模塊技術分析29</p><p> §7.3操作員模塊實現過程29<
29、/p><p> 第八章 系統(tǒng)設置模塊設計36</p><p> §8.1系統(tǒng)設置模塊概述36</p><p> §8.2系統(tǒng)設置模塊實現過程36</p><p><b> }37</b></p><p> 第九章 開發(fā)技巧與難點分析37</p>&
30、lt;p> §9.1及時關閉記錄集37</p><p> §9.2訪問帶密碼的Access數據庫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> 參考文獻40</b></p><p><b> 第一章 緒論</b></p><p><b> §1.1 問題背景</b></p><p>
32、; Internet在我國剛剛起步時,上網人群主要是從事IT技術的專業(yè)人員,年齡段多是中年人,但是隨著Internet技術的快速發(fā)展,我國的上網人群年齡逐年增多,不僅包括中年人,青少年及老年人在上網人群的比重不斷增加。Internet上豐富的資源給人們帶來了很多的方便,但是也存在許多不良的信息危害青少年的健康,一些家長擔心青少年上網會影響其學習。局域網監(jiān)控系統(tǒng)能夠將局域網中的某一臺計算機的屏幕信息發(fā)送到服務器端,家長可以隨時了解青少年
33、瀏覽的網頁信息,對青少年上網起到監(jiān)督作用。</p><p> §1.2 研究范圍及技術要求</p><p> §1.2.1 研究范圍 </p><p> 設計該系統(tǒng)的功能模塊劃分,使用Acesss 2003設計出該系統(tǒng)的數據庫。</p><p> 參考實際局域網監(jiān)控系統(tǒng),完成對系統(tǒng)的需求分析及設計文檔。</
34、p><p> 根據需求分析及設計文檔完成代碼編制。</p><p> §1.2.2 技術要求 </p><p><b> 功能模塊劃分合理。</b></p><p> 數據庫設計滿足功能要求。</p><p> 采用UDP協(xié)議進行數據傳輸。</p><p>
35、 對客戶端的數據進行過濾。</p><p> 建立數據庫訪問接口類,實現對數據庫的訪問。</p><p> 6. 實時抓取客戶端的屏幕信息。</p><p><b> 第二章 系統(tǒng)設計</b></p><p><b> §2.1 需求分析</b></p><
36、p> 局域網監(jiān)控系統(tǒng)主要是對計算機屏幕信息進行實時監(jiān)控。因此局域網監(jiān)控系統(tǒng)需要實現屏幕信息的時時發(fā)送和接受。由于屏幕信息需要時時顯示,因此信息的傳輸速度要快,屏幕信息要時時發(fā)送。為此,選擇UDP協(xié)議進行傳輸。為了防止服務器端隨意的接收客戶端發(fā)來的數據報,服務器端需要對發(fā)來的數據報進行過濾,只有是制定的客戶端才接收數據。</p><p><b> §2.2 系統(tǒng)目標</b>
37、</p><p> 本系統(tǒng)屬于小型的局域網監(jiān)控系統(tǒng),可以對某一臺計算機進行屏幕監(jiān)控。本系統(tǒng)主要實現一下目標:</p><p> 系統(tǒng)采用人機交互的方式,界面美觀友好。</p><p> 屏幕信息需要時時顯示,網絡延時不能大于1秒。</p><p> 服務器端可以隨時運行,只要客戶端運行,就能夠顯示屏幕信息。</p>&l
38、t;p> 系統(tǒng)運行時占用內存不能大于10MB,以免影響系統(tǒng)的性能。</p><p> 客戶端運行時需要隱藏顯示窗口,其感覺不到在運行。</p><p> §2.3 系統(tǒng)功能結構</p><p> 局域網監(jiān)控系統(tǒng)功能結構圖如下所示。</p><p><b> §2.3 系統(tǒng)預覽</b>&
39、lt;/p><p> 局域網監(jiān)控系統(tǒng)分為客戶端和服務器端兩部分,其中客戶端運行時將窗體隱身,服務器端主要有四個窗體組成,分別為主窗體、操作員管理窗體、系統(tǒng)登錄窗體、系統(tǒng)設置窗體。其中,主窗體用于接收并顯示屏幕信息。操作員管理窗體用于添加、修改、刪除操作員信息,</p><p> 系統(tǒng)登錄窗體用于系統(tǒng)在啟動時驗證用戶身份。系統(tǒng)設置窗體用于設置客戶端 IP。</p><p&
40、gt; 主 窗 體</p><p><b> 系統(tǒng)登錄窗體</b></p><p><b> 操作員管理窗體</b></p><p><b> 系統(tǒng)設置窗體</b></p><p> §2.4 業(yè)
41、務流程圖</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> 數據庫軟件系統(tǒng)軟件:Microsoft Acess 2003&l
42、t;/p><p> 運行平臺:Windows XP</p><p> 分辨率:最佳效果1024*1280像素</p><p><b> §2.5數據庫設計</b></p><p><b> 數據庫分析</b></p><p> 在開發(fā)局域網監(jiān)控系統(tǒng)時,使用數據
43、庫主要用于記錄操作員信息及客戶端信息,系統(tǒng)設計的數據量比較小,因此本系統(tǒng)采用的Microsoft Access2003作為后臺數據庫,數據庫名字為db_Video,其中包含了2張表</p><p><b> 數據庫概念設計</b></p><p> 數據庫概念設計是根據各個模塊的需求“抽象”出數據實體的過程,也就是宏觀上用文字、圖表描述數據表的過程。</p&
44、gt;<p> 為了增加系統(tǒng)的安全性,服務器端設置了登錄窗口,在系統(tǒng)啟動時彈出該窗口,要求用戶輸入操作員名稱和密碼。其中用戶的操作員名稱和密碼信息存儲在數據表中。這樣在系統(tǒng)登錄模塊就需要一個操作員信息實體。</p><p> 為了過濾服務器端接受的數據報,時期值接收制定客戶端發(fā)來的數據,需要存儲客戶端IP,為此,需要單獨設計一個客戶端信息實體對象。</p><p><
45、;b> 第三章 客戶端設計</b></p><p> §3.1客戶端模塊概述</p><p> 局域網監(jiān)控系統(tǒng)分為客戶端和服務器端兩大模塊,其中,客戶端的主要作用是時時抓取本機的屏幕信息,將其分成多個數據報,發(fā)送到服務器端。為了保證屏幕信息能夠完整的發(fā)送到服務器,客戶端在發(fā)送一個數據報后,需要等待服務器端發(fā)來的確認信息,然后繼續(xù)發(fā)送下一個數據報。</
46、p><p> §3.2客戶端技術分析</p><p> 客戶端要實現屏幕信息的發(fā)送,要解決兩個關鍵問題:一是獲取屏幕信息,將其轉換為位圖格式;二是將位圖信息發(fā)送到服務器。</p><p> 將屏幕信息轉換為位圖格式</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;//定義一個內存畫布</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> 根據位圖對象獲取位圖信息</p><p
51、> 一個位圖文件通常有“位圖文件頭”、“位圖信息頭”、“調色板”和“實際位圖數據”4個部分組成。其中“位圖文件頭” 包含BMP圖像文件的類型、顯示內容、位圖標記、位圖大小等信息,在程序中使用BITMAPFILEHEADER結構來表示。“位圖信息頭”和“調色板”2個部分描述了位圖的寬度、高度、是否壓縮、位圖顏色等信息,在程序中使用BITMAPINFO結構描述。由于程序發(fā)送的位圖不是以文件形式發(fā)送的,只需要發(fā)送位圖位圖信息頭、調色板
52、和實際數據就可以了,因此不需要位圖文件頭。</p><p> int panelsize = 0;//記錄調色板大小</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;//設置位圖顏色用到的位數</p><p&g
54、t; pBInfo->bmiHeader.biClrImportant = 0;//指定顯示位圖顏色的種類,如果值為0,所有的顏色種類都需要</p><p> pBInfo->bmiHeader.biCompression = 0;//指定位圖的壓縮類型-- “該語句=0”說明改為圖不進行壓縮</p><p> pBInfo->bmiHeader.biHeig
55、ht = height;//指定位圖的高度</p><p> pBInfo->bmiHeader.biPlanes = bitmap.bmPlanes;//為目標設備指定調色板的數量,且該值只能是1</p><p> pBInfo->bmiHeader.biSize = sizeof(BITMAPINFO);//設置BITMAP
56、INFO結構大小</p><p> pBInfo->bmiHeader.biSizeImage = = bitmap.bmWidthBytes*bitmap.bmHeight;//設置圖像的大小</p><p> pBInfo->bmiHeader.biWidth = width;//指定位圖的寬度</p><p> pB
57、Info->bmiHeader.biXPelsPerMeter = 0;//目標設備的水平分辨率</p><p> pBInfo->bmiHeader.biYPelsPerMeter = 0;//目標設備的垂直分辨率</p><p> m_X = m_RecX;</p><p> m_Y = m_RecY;</p><p>
58、 三、將位圖信息發(fā)送到服務器</p><p> 因為將圖片信息傳送到服務器端要求的實時性比較強,所以采用UDP協(xié)議將位圖信息發(fā)送到服務器</p><p> §3.3客戶端實現過程</p><p> 創(chuàng)建一個基于對話框的工程,名稱為Client。</p><p> 在Stafx.h文件中引入套接字庫。</p>
59、<p> 在應用程序類的Instance函數中初始化套接字</p><p> WSADATA data;</p><p> WSAStartup(2,&data);</p><p> 改寫應用程序類的虛方法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;//服務器IP</p><p> int m_X,m_Y;//抓起屏幕的起始坐標</p><p> WORD m_RecX,m_RecY;//收到服務器發(fā)來的抓起屏幕的起始坐標</p>
62、<p> BOOL m_Confirm;//確認信息</p><p> int m_FrameIndex;//記錄索引</p><p> int count;//每一個位圖分報的數量</p><p> int bmpsize;//位圖的實際大小</p><p> int mod;//記錄余數</p><
63、;p> char *pSendBuf;//發(fā)送緩沖區(qū)指針</p><p> char *Head;//臨時指針</p><p> sockaddr_in addrl;//套接字地址</p><p> BOOL m_Received;//是否受到服務器發(fā)來的確認信息</p><p> int m_Counter;//計數器<
64、;/p><p> 6、在對話框的初始化函數中,創(chuà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)建失??!");</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);//該函數的功能是在套
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> 自定義一個消息,當套接字接到數據時,將該消息發(fā)送到主窗口</p><p> #define GraphSize 1024</
73、p><p> #define CM_RECEIVED WM_USER+200 //自定的消息CM_RECEIVED</p><p> 添加OnReceived()方法,該方法的作用是:接收服務器端發(fā)來的確認信息和控制信息</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坐標</p><p> m_RecY=*(WORD*)&pData[2]; //填充屏幕y坐標</p><p><b> }</b></p><
77、p> if(ret==8) //確認指令</p><p><b> {</b></p><p> m_Received=TRUE;</p><p> m_FrameIndex+=1; //將發(fā)送的數據報的序號加1</p><p> if(m_FrameIndex<coun
78、t) //判斷數據是否發(fā)送完</p><p> SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addrl);</p><p><b> else</b></p><p> Onok(); //重新開始發(fā)送數據</p><
79、;p><b> }</b></p><p><b> }</b></p><p> delete[] pData;</p><p><b> }</b></p><p> 將CM_RECEIVED消息和處理該消息的函數OnReceived關聯(lián)起來</p&g
80、t;<p> ON_MESSAGE(CM_RECEIVED,OnReceived)</p><p> 添加SendData方法,該方法的作用:將數據封成數據報,將該數據報發(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表示數據包的序列號;mod表示余數;bmpsize表示數據報中位圖數據的大小</p><p> frames表示總的發(fā)送次數;addr表
82、示服務器地址;pSendBuf表示要發(fā)送數據的緩沖區(qū)</p><p><b> */</b></p><p> char *pPackage; //定義一個數據報指針</p><p> int packsize=0; //初始化數據報的大小</p>
83、<p> if(mod==0||index!=frames-1) //計算數據報的大小</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、 //填充結束標記</p><p> *(WORD*)&pPackage[2]=0;</p><p><b> else</b></p><p> *(WORD*)&pPackage[2]=1;</p><p> pSendBuf+=index*bmpsize;
86、 //定位數據</p><p> memcpy(&pPackage[4],pSendBuf,packsize-16); //填充位圖數據</p><p> *(int*)&pPackage[packsize-12]=bmpsize; //填充位圖大小</p><p> *(WORD*)&pPackage[packsiz
87、e-8]=m_X; //填充屏幕x坐標</p><p> *(WORD*)&pPackage[packsize-6]=m_Y; //填充屏幕y坐標</p><p> *(int*)&pPackage[packsize-4]=packsize; //填充數據報大小</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ā)送數據后,如果5秒鐘內沒有收到服務器端 發(fā)來的確認信息,放棄當前位圖的發(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) //判斷是否接收到服務器發(fā)來的數據</p><p><b> {</b></p><p> m_Counter++;
91、 //計數器自加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 //當接收到服務器發(fā)來的數據</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方法,將屏幕信息轉化為位圖信息,劃分數據報的格式,計算每個 位圖信息需要發(fā)送數據報
94、的次數,調用SendData方法。</p><p> 在對話框類中的OnPaint函數中添加ShowWindow(SW_HIDE);將對話框隱藏。</p><p><b> 第四章 公共類設計</b></p><p> 在局域網監(jiān)控系統(tǒng)的服務器端需要對數據庫進行操作。為了方便管理,將有關數據庫的操作封裝為一個類CDataManage。該
95、類中包含ADOConnection對象、ADOCommand對象和ADORecordset對象,被提供InitDatabase方法用于構造ADO對象、連接數據庫。CDataManage類的具體實現過程如下:</p><p> 在visual C++工程中的Stdafx.h頭文件中導入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方法構造ADO對象,并連接數據庫。</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);///連接數
101、據庫</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("連接數據庫失敗!\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)登錄模塊設計</p><p> §5.1系統(tǒng)登錄模塊概述</p><p> 為了防止非法用戶使用系統(tǒng),在局域網監(jiān)控系統(tǒng)的服務器端提供了系統(tǒng)登錄莫塊。在系統(tǒng)啟動時,只有輸入正確的用戶名和密碼才能進入主界面。</p><p> §5.2系統(tǒng)登錄模塊技術分析</p><p> 為了驗
105、證用戶輸入的用戶名和密碼是否正確,需要根據用戶輸入的用戶名和密碼從數據庫中查詢用戶信息,如果有信息返回,表明用戶名和密碼正確;否則不正確。程序中使用了ADOCommand對象執(zhí)行查詢操作。在使用ADOCommand對象時,首先需要設置ActiveConnection屬性,該屬性關聯(lián)一個ADOCommand對象,然后設置CommandText屬性,該屬性表示ADOCommand對象要執(zhí)行的SQL語句。如果SQl語句中有參數,還需要調用Pa
106、rameters屬性的Append方法插入參數,最后調用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)登錄模塊實現過程</p><p> 創(chuàng)建一個對話框,如下圖:</p><p> 修改對話框類的PreTranslateMessage虛方法,當編輯框獲得焦點時,按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> 處理“登錄”按鈕的單擊事件,驗證用戶名和密碼是否正確。如果用戶名和密碼正確,關閉對話框并返回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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計--局域網監(jiān)控系統(tǒng)
- 局域網監(jiān)控系統(tǒng)畢業(yè)設計
- 局域網設計畢業(yè)設計
- 局域網畢業(yè)設計2
- 局域網畢業(yè)設計論文
- cisco局域網設計畢業(yè)設計
- 畢業(yè)設計---無線局域網設計
- 畢業(yè)設計---企業(yè)局域網設計
- 畢業(yè)設計-小型網吧局域網設計
- 畢業(yè)設計---局域網規(guī)劃與設計
- 校園局域網規(guī)劃設計_畢業(yè)設計
- 畢業(yè)設計---校園局域網的組建
- 校園局域網的組建畢業(yè)設計
- 局域網反監(jiān)控
- 畢業(yè)設計----公司局域網組建
- 畢業(yè)設計(論文)----企業(yè)局域網設計
- 企業(yè)局域網設計畢業(yè)設計(論文)
- 畢業(yè)設計--局域網的設計與實現
- 企業(yè)局域網設計畢業(yè)設計(論文)
- 局域網實時監(jiān)控系統(tǒng)設計與實現.pdf
評論
0/150
提交評論