局域網(wǎng)監(jiān)控系統(tǒng)_第1頁(yè)
局域網(wǎng)監(jiān)控系統(tǒng)_第2頁(yè)
局域網(wǎng)監(jiān)控系統(tǒng)_第3頁(yè)
局域網(wǎng)監(jiān)控系統(tǒng)_第4頁(yè)
局域網(wǎng)監(jiān)控系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中州大學(xué)信息工程學(xué)院 畢業(yè)設(shè)計(jì)(論文) 2009 2010學(xué)年第 三 學(xué)期 題目 局域網(wǎng)監(jiān)控系統(tǒng) 學(xué)生姓名(學(xué)號(hào)) 指導(dǎo)教師職稱 副教授 評(píng)閱教師職稱 中州大學(xué)信息工程學(xué)院畢業(yè)設(shè)計(jì)(論文)任務(wù)書 指導(dǎo)教師: 王學(xué)軍職稱: 副教授學(xué)生人數(shù):1 學(xué)生姓名、學(xué)號(hào)、專業(yè)):曲利賓(200702131051131,信安) 畢業(yè)設(shè)計(jì)(論文)題目(來(lái)源、類型) 局域網(wǎng)監(jiān)控系統(tǒng)(B、X) 畢業(yè)設(shè)計(jì)(論文)工作內(nèi)容與基本要求(H標(biāo)、任務(wù)、途徑、方法、成果形式, 應(yīng)掌握的原始資料(數(shù)據(jù))、參考資料(文獻(xiàn))以及設(shè)計(jì)技術(shù)要求、注意事項(xiàng)等) 為高效、便利的進(jìn)行局域網(wǎng)監(jiān)控,研制基于UDP協(xié)議,該系統(tǒng)功能如下: 1. 注冊(cè)

2、、修改個(gè)人資料功能。 2. 對(duì)客戶端數(shù)據(jù)進(jìn)行選擇性的過濾 3. 用戶資料管理 4. 管理員權(quán)限管理 5. 用戶桌面的信息 本系統(tǒng)采用VC6.0+Acess2000進(jìn)行開發(fā)。 希望能支持多方面問卷、有用戶交流頁(yè)面(論壇或留言板) 在研制中希望能體現(xiàn)VC+的獨(dú)特優(yōu)點(diǎn),也希望能在居于網(wǎng)的安全性上有 所研究 教研室審批意見: 審批人簽名: 備;主:(1)來(lái)源:A教師擬訂;B學(xué)生建議:C企業(yè)和社會(huì)征集;D實(shí)習(xí)單位提供 (2)類型:X真實(shí)課題:Y模擬課題;Z虛擬課題 中州大學(xué)信息工程學(xué)院設(shè)計(jì)(論文)開題報(bào)告 課題名稱: 局域網(wǎng)監(jiān)控系統(tǒng) 指導(dǎo)教師: 王學(xué)軍職稱: 副教授 學(xué)生人數(shù):1人 學(xué)生姓名(學(xué)號(hào)、專業(yè)

3、):姓名:曲利賓 學(xué)號(hào):200702131051131 專業(yè):信息 安全技術(shù) 開題報(bào)告內(nèi)容: 設(shè)計(jì)的LI的及意義:隨著信息化的不斷擴(kuò)展,大部分企業(yè)都釆用計(jì)算機(jī) 來(lái)管理自己的財(cái)務(wù)、商業(yè)機(jī)密等別的業(yè)務(wù)。但是并不是每個(gè)用訃算機(jī)的員工,都 能在上班時(shí)間充分的利用訃算機(jī)干自己的工作。即便是制定了相關(guān)的規(guī)章制度還 是不能約束其行為。那么局域網(wǎng)監(jiān)控系統(tǒng),完全可以起到約束的作用。該系統(tǒng)可 以實(shí)時(shí)的對(duì)局域網(wǎng)內(nèi)的每臺(tái)計(jì)算機(jī)進(jìn)行屏幕監(jiān)控。 設(shè)計(jì)的要求:(1)學(xué)會(huì)如何分割UDP數(shù)據(jù)報(bào):(2)學(xué)會(huì)發(fā)送和接受UDP 數(shù)據(jù)報(bào);(3)學(xué)會(huì)自定義控件:(4)學(xué)會(huì)抓取屏幕(5)學(xué)會(huì)ADO技術(shù)對(duì)數(shù)據(jù)庫(kù) 操作 預(yù)期成果:(1)將客戶

4、端隱藏,并且不斷向服務(wù)器端發(fā)送屏幕信息;(2) 通過發(fā)送指令來(lái)控制客戶端發(fā)來(lái)屏幕信息的位置;(3)通過ADO技術(shù)實(shí)現(xiàn)對(duì) ACCess數(shù)據(jù)庫(kù)操作 時(shí)間安排:9月20號(hào)一-10月15號(hào)熟悉課題的基本要求,查閱相關(guān)的 資料,初步擬定設(shè)計(jì)的整體方案,完成開題報(bào)告;10月16日-11月2號(hào)將 監(jiān)控系統(tǒng)的客戶端完成,并對(duì)客戶端進(jìn)行試驗(yàn)總;11月2日11月13號(hào)將服 務(wù)器端完成,對(duì)數(shù)據(jù)的操作進(jìn)行總結(jié),以及整個(gè)畢業(yè)設(shè)計(jì)的完成。 在王老師的指導(dǎo)下,綜合我們以前所學(xué)的專業(yè)知識(shí)及查找的相關(guān)資料,能 夠在預(yù)期的時(shí)間內(nèi)完成整個(gè)網(wǎng)站和論文。 指導(dǎo)教師簽名:日期: 備;主:(1)來(lái)源:A教師擬訂;B學(xué)生建議:C企業(yè)和社會(huì)征

5、集;D實(shí)習(xí)單位提供 (2)類型:X真實(shí)課題:Y模擬課題;Z虛擬課題 摘要 Internet在我國(guó)剛剛起步時(shí),上網(wǎng)人群主要是從事IT 技術(shù)的專業(yè)人員,年齡段多是中年人,但是隨著imernet 技術(shù)的快速發(fā)展,我國(guó)的上網(wǎng)人群年齡逐年增多,不僅 包括中年人,青少年及老年人在上網(wǎng)人群的比重不斷增 加。Internet 豐富的資源給人們帶來(lái)了很多的方便,但 是也存在許多不良的信息危害青少年的健康,一些家長(zhǎng) 擔(dān)心青少年上網(wǎng)會(huì)影響其學(xué)習(xí)。局域網(wǎng)監(jiān)控系統(tǒng)能夠?qū)?局域網(wǎng)中的某一臺(tái)計(jì)算機(jī)的屏幕信息發(fā)送到服務(wù)器端, 家長(zhǎng)可以隨時(shí)了解青少年瀏覽的網(wǎng)頁(yè)信息,對(duì)青少年上 網(wǎng)起到監(jiān)督作用。 本文首先介紹了問題的背景,接著提

6、出問題,并針 對(duì)具體項(xiàng)LI展開需求調(diào)查分析:再基于需求設(shè)計(jì)出具體 的方案;然后對(duì)整個(gè)系統(tǒng)進(jìn)行了詳細(xì)的分析和設(shè)計(jì),在 設(shè)計(jì)與實(shí)現(xiàn)過程中,結(jié)合源代碼具體的描述出整個(gè)項(xiàng)LI 的開發(fā)過程;最后對(duì)整個(gè)系統(tǒng)進(jìn)行測(cè)試得出測(cè)試結(jié)論。 關(guān)鍵字:屏幕監(jiān)控;數(shù)據(jù)過濾 Abstract The Internet in China has just started, IT is mainly engaged in the Internet population technology professionals, the age is more middle-aged, but with the rapid develo

7、pment of Internet technology, online population increased year by year, not 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 informati

8、on of health hazards, some parents teenagers about teenagers will affect the Internet learning LAN monitoring system can be a computer network of the screen messages to the server, parents can understand teenagers web page for teenagers online information, play supervisio n. This paper firstly intro

9、duces the background, and then put forward questions, and in the light of specific project on demand survey analysis, Based on the specific 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

10、 description of the source of the development process of project, Finally to the whole system test that test conclusions Key words: Monitor screen Data filtering 第一章緒論8 1.1問題背景8 1.2研究范圍及技術(shù)要求8 121研究范圍8 1.2.2技術(shù)要求8 第二章系統(tǒng)設(shè)計(jì)10 2.1需求分析10 2.2系統(tǒng)目標(biāo)10 2.3系統(tǒng)功能結(jié)構(gòu)10 2.3系統(tǒng)預(yù)覽11 2.4業(yè)務(wù)流程圖13 2.5程序運(yùn)行環(huán)境14 2.5數(shù)據(jù)庫(kù)設(shè)計(jì)14 第三

11、章客戶端設(shè)計(jì)15 3.1客戶端模塊概述15 3.2客戶端技術(shù)分析15 3.3客戶端實(shí)現(xiàn)過程16 第四章公共類設(shè)計(jì)20 第五章系統(tǒng)登錄模塊設(shè)計(jì)20 5.1系統(tǒng)登錄模塊概述20 5.2系統(tǒng)登錄模塊技術(shù)分析21 5.3系統(tǒng)登錄模塊實(shí)現(xiàn)過程21 第六章主窗體設(shè)計(jì)24 6.1主窗體概述24 6.2主窗體的實(shí)現(xiàn)過程24 第七章操作員管理模塊設(shè)計(jì)28 7.1操作員模塊概述28 7.2操作員模塊技術(shù)分析29 7.3操作員模塊實(shí)現(xiàn)過程29 第八章系統(tǒng)設(shè)置模塊設(shè)計(jì)36 CRect rc; 獲取桌而畫布對(duì)象 GetDesktopWindow()-GetClientRect(rc); /獲取屏幕的客戶區(qū)域 int w

12、idth = 300; int height = 300: 獲取屏幕的寬度 獲取屏幕的髙度 CDC memDC; /定義一個(gè)內(nèi)存畫布 memDC.CreateCompatibleDC(pDeskDC); 創(chuàng)建一個(gè)兼容的畫布 CBitmap bmp: bmp.CreateCompatibleBitmap(pDeskDC,width,height); 創(chuàng)建兼容位圖 meniDC.SelectObject( 選中位圖對(duì)象 BITMAP bitmap; 定義位圖信息 bmp.GetBitmap( /獲取位圖信息 mcmDCBitBlt(OQwidth,height, pDeskDC,m_X,m_Y,S

13、RCCOPY)將屏幕信息輸出到位圖 二、根據(jù)位圖對(duì)象獲取位圖信息 一個(gè)位圖文件通常有“位圖文件頭二“位圖信息頭S “訓(xùn)色板”和“實(shí)際位圖數(shù)據(jù)” 4 個(gè)部分組成。英中“位圖文件頭”包含BMP圖像文件的類型、顯示內(nèi)容、位圖標(biāo) 記、位圖大小等信息,在程序中使用BITMAPFILEHEADER結(jié)構(gòu)來(lái)表示位圖 信息頭”和“調(diào)色板” 2個(gè)部分描述了位圖的寬度、高度、是否壓縮、位圖顏色 等信息,在程序中使用BITMAPINFO結(jié)構(gòu)描述。由于程序發(fā)送的位圖不是以文 件形式發(fā)送的,只需要發(fā)送位圖位圖信息頭、調(diào)色板和實(shí)際數(shù)據(jù)就可以了,因此 不需要位圖文件頭。 int panelsize = 0;記錄調(diào)色板大小 i

14、f (bitmap.bmBitsPixelbmiHeader.biBitCount = bitmap.bmBitsPixel;/ 設(shè)置位圖顏色用到的位 數(shù) pBlnfo-bmiHeader.biClrlmportant = 0;/指怎顯示位圖顏色的種類,如果值為 0,所有的顏色種類都需要 pBlnfo-bmiHeader.biCompression= 0;/指左位圖的壓縮類型-“該語(yǔ)句=0” 說明改為圖不進(jìn)行壓縮 pBlnfo-bmiHeader.biHeight= height;/ 指圧位圖的高度 pBlnfo-bmiHeader.biPlanes= bitmap.bmPlanes;/ 為目

15、標(biāo)設(shè)備指立調(diào) 色板的數(shù)量,且該值只能是1 pBlnfo-bmiHeader.biSize= sizeof(BITMAPINFO);/ 設(shè) 置 BITMAPINFO結(jié)構(gòu)大小 pBlnfo-bmiHeader.biSizelmage= bitmap.bmWidthBytes*bitmap.bmHeight;/ 設(shè)宜圖像的大小 pBlnfo-bmiHeader.biWidth= width;/ 指泄位圖的寬度 pBlnfo-bmiHeader.biXPelsPerMeter = 0;目標(biāo)設(shè)備的水平分辨率 pBlnfo-bmiHeader.biYPelsPerMeter = 0;目標(biāo)設(shè)備的垂直分辨率

16、m_X = m_RecX; m_Y = m_RecY; 三、將位圖信息發(fā)送到服務(wù)器 因?yàn)閷D片信息傳送到服務(wù)器端要求的實(shí)時(shí)性比較強(qiáng),所以采用UDP協(xié)議將位圖 信息發(fā)送到服務(wù)器 3.3客戶端實(shí)現(xiàn)過程 1、創(chuàng)建一個(gè)基于對(duì)話框的工程,名稱為Client, 2、在Stafx.h文件中引入套接字庫(kù)。 3、在應(yīng)用程序類的Instance函數(shù)中初始化套接字 WSADATA data; WSAStartup(2? 4、改寫應(yīng)用程序類的虛方法Exitinstance int CClientApp:ExitInstance() WSACIeanupO;淸理套接字資源 return CWinApp:ExitInst

17、ance(); 5、在對(duì)話框類中添加如下成員變量 SOCKET m_Socket;/客戶端套接字 CString m_ServerIP:/服務(wù)器 IP int m_X.m_Y;抓起屏幕的起始坐標(biāo) WORD m_RecX.m_RecY7/收到服務(wù)器發(fā)來(lái)的抓起屏幕的起始坐標(biāo) BOOL m_Confirm:/ 確認(rèn)信息 int m_FrameIndexy/記錄索引 int county/每一個(gè)位圖分報(bào)的數(shù)量 int bmpsizey/位圖的實(shí)際大小 int mod:/記錄余數(shù) char *pSendBuf;/發(fā)送緩沖區(qū)指針 char Head;/臨時(shí)指針 sockaddr_in addrl;/套接字

18、地址 BOOL m_Received7/是否受到服務(wù)器發(fā)來(lái)的確認(rèn)信息 int m_Counter;/計(jì)數(shù)器 6、在對(duì)話框的初始化函數(shù)中,創(chuàng)建套接字將其綁定到指定位置,并初始化相應(yīng)的成員變量 BOOL CClientDlg: :OnInitDialog() hostent *phost=gethostbyname(,M,); char *localIP=inet_ntoa(*(struct in_addr*)*phost-h_addrjist); sockaddr_in addr; addr.sin_family=AFJNET; add r.sin_add r.S_unS_addr=inci_a

19、ddr(localIP); addr.sin_port=htons(5001); m_Socket=socket(AF_INET.SOCK_DGRAM,0); if(m_Socket=INVALID_SOCKET) ( McssagcBoxC套接字創(chuàng)建失??! J; if(bind(m_Socket5(sockaddr*) m_ServerIP=n 127.0.0. ln; GetPrivateProfileString(uServerInfoM/IP,H M,m_Sen erIP.GetBuffer(O),M AX_PATH ,M./server.iniM)y/讀取 INI

20、 配置文件 WSAAsyncSelect(m_Socket.m_hWnd.CM_RECEIVED.FD_READ);/ 該函數(shù)的功能是在 套接字m_Socket上,看是否有讀取事件發(fā)生如果有,向窗口句柄為m_hWnd的窗口發(fā)送 CM_RECEIVED 消息 m_X=m_Y=0; m_RccX=m_Rec Y=0; m_Confirm=true; pSendBuf=new char 1024* 1024*2; Head=pSendBuf; Onok(); m_Received=false; m_Counter=0; SetTimer(l J 000.NULL); return TRUE: / r

21、eturn TRUE unless you set the focus to a control 7、自定義一個(gè)消息,當(dāng)套接字接到數(shù)據(jù)時(shí),將該消息發(fā)送到主窗口 #define GraphSize 1024 #define CM.RECEIVED WM_USER十200 自立的消息 CM_RECEIVED 8、添加OnReceived ()方法,該方法的作用是:接收服務(wù)器端發(fā)來(lái)的確認(rèn)信息和控制信 息 void CClientDIg:OnReceived() char *pData=new char 1024: memset(pData,0,1024); sockaddr in addr; int

22、 factsize=sizeof(sockaddr); int ret=recvfrom(m_Socket,pData, 1024,0,(sockaddr*) if(ret!=-l)判斷是否接收成功 if(ret=4) /方向指令 m_RecX=*(WORD*)填充屏幕 x 坐標(biāo) m_RecY=*(WORD*)填充屏幕 y 坐標(biāo) if(ret=8) 確認(rèn)指令 m_Received=TRUE; m_FrameIndex+=l;將發(fā)送的數(shù)據(jù)報(bào)的序號(hào)加1 if(m_FrameIndex5) 訃數(shù)器自加1 m_Counter=0; Onok(); else 當(dāng)接收到服務(wù)器發(fā)來(lái)的數(shù)據(jù) m_Receive

23、d=FALSE; m_Counter=0: CDialog:OnTimcr(nIDEvent); 12、添加一個(gè)Onok方法,將屏幕信息轉(zhuǎn)化為位圖信息,劃分?jǐn)?shù)據(jù)報(bào)的格式,計(jì)算每個(gè) 位圖信息需要發(fā)送數(shù)據(jù)報(bào)的次數(shù),調(diào)用SendData方法。 13、在對(duì)話框類中的OnPaint函數(shù)中添加ShowWindow(SW_HIDE);將對(duì)話框隱 藏。 第四章公共類設(shè)計(jì) 在局域網(wǎng)監(jiān)控系統(tǒng)的服務(wù)器端需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。為了方便管理,將有關(guān)數(shù)據(jù)庫(kù)的 操作封裝為一個(gè)類CDataManageo該類中包含ADOConnection對(duì)象、ADOCommand對(duì)象和 ADORecordset對(duì)象,被提供InitDatab

24、ase方法用于構(gòu)造ADO對(duì)象、連接數(shù)據(jù)庫(kù)oCDataManage 類的具體實(shí)現(xiàn)過程如下: 1、在visual C+工程中的Stdafx.h頭文件中導(dǎo)入msadol5.dll動(dòng)態(tài)庫(kù)。 # importC:ProgramFilesCommonFilesSystemadomsado 15.dll” no_namespacerename(HEOFM/,ADOEof,) 2、創(chuàng)建一個(gè)普通類,命劣為CDataManage,在該類中添加如下成員變雖:。 .Connect ionPt r m_pConnection; _CommandPtr m_pCommand; _RecordsetPtr m_pRecor

25、d; 3、向CDataManage類中添加InitDatabase方法構(gòu)造ADO對(duì)象,并連接數(shù)據(jù)庫(kù)。 BOOL CDataManage: :InitDatebase() HRESULT hr; try hr = m_pConncction.CreateInstance(HADODB.ConnectionH);/創(chuàng)建 Connection 對(duì)象 m_pCommand.CreateInstance(nADODB.CommandN); m_pRecord.CreateInstance(uADODB.RecordsetM); if(SUCCEEDED(hr) hr = m_pConnection-Op

26、en(MProvider=Microsoft.Jet.OLEDB.4.0;Data Source=db_Video.mdbM;H,MadModeUnknown);/i 接數(shù)據(jù)庫(kù) /上而一句中連接字串中的Provider是針對(duì)ACCESS2000環(huán)境的,對(duì)于ACCESS97,需 要改為:Provider=Microsoft.Jet.OLEDB.3.51; ) catch(_com_ciror c)/捕捉異常 CString errormessage; errormessage.FormatC連接數(shù)據(jù)庫(kù)失敗!rn 錯(cuò)誤信息:%sH,e.ErrorMessage(); AfxMessageBox(e

27、rrormessage)y/ 顯示錯(cuò)誤信息 return FALSE; return true; 第五章系統(tǒng)登錄模塊設(shè)計(jì) 5.1系統(tǒng)登錄模塊概述 為了防止非法用戸使用系統(tǒng),在局域網(wǎng)監(jiān)控系統(tǒng)的服務(wù)器端提供了系統(tǒng)登錄莫塊。在 系統(tǒng)啟動(dòng)時(shí),只有輸入正確的用戶名和密碼才能進(jìn)入主界而。 5.2系統(tǒng)登錄模塊技術(shù)分析 為了驗(yàn)證用戶輸入的用戶爼和密碼是否正確,需要根據(jù)用戶輸入的用戶劣和密碼從數(shù)據(jù) 庫(kù)中查詢用戶信息,如果有信息返回,表明用戶名和密碼正確;否則不正確。程序中使用了 ADOCommand對(duì)象執(zhí)行査詢操作。在使用ADOCommand對(duì)象時(shí),首先需要設(shè)宜 ActiveConnection屬性,該屬性關(guān)聯(lián)

28、一個(gè)ADOCommand對(duì)彖,然后設(shè)置CommandText屬性, 該屬性表示ADOCommand對(duì)象要執(zhí)行的SQL語(yǔ)句。如果SQ1語(yǔ)句中有參數(shù),還需要調(diào)用 Parameters屬性的Append方法插入?yún)?shù),最后調(diào)用ADOCommand對(duì)彖的execute方法執(zhí)行 SQL語(yǔ)句。代碼如下: .ParameterPtr pUser,pPassword: CServerApp *pAPP=(CServerApp*)AfxGetApp(); pUser=pAPP-m_DataManage.m_pCommand-CreatcParameter(Huser,adVarWChar.adParamIn pu

29、t, 100,(_bstr_t)user); pPassword=pAPP-m_DataManage.m_pCominand-CreateParameter(,password,adVarWChar.a dParamlnput, IOO,Gbstr_t)password); pAPP-m_DataManage.m_pConnection-CiirsorLocation=adUseServer; pAPP-m_DataManagen_pCommimd-AciivcConncction=pAPPm_DalaManagcm_pCo nnection; pAPP-m_DataManage.m_pCom

30、mand-Parameters-Appcnd(pUser); pAPP-m_DataManagen_pCommandParamclcrsAppcnd(pPassword); /CString sql=Hselect *from tb_userlnfo where UserNanie=,M+user+,H and PassWord=M,+password+HH,; pAPP-m_DataManage.m_pConimand-CommandText= Hselect *froni tb_userlnfo where UserName=uscr and PassWord=passwordM;/ _R

31、ecordsetPtr pRecord=NULL; pRecord=pAPP-m_DataManage.m_pCommand-Execute(0,NULL.adCmdText); pAPP-m_DataManage.m_pConimand-Parameters-Delete(HuserH); pAPP-m_DataManage.m_pConimand-Parameters-Delete(Hpassword,r); 5.3系統(tǒng)登錄模塊實(shí)現(xiàn)過程 1、創(chuàng)建一個(gè)對(duì)話框,如下圖: 2、修改對(duì)話框類的PreTranslateMessage虛方法,當(dāng)編輯框獲得焦點(diǎn)時(shí),按Enlcr鍵控制焦 點(diǎn)移動(dòng)。 BOOL

32、 CLoginDlg:PreTranslateMessage(MSG* pMsg) if (pMsg-message=WM_KEYDOWN 獲取類名 GetClassName(pMsg-hwnd,str.GetBuffer(O).MAX_PATH); if(str=MEditH) pMsg-wParani = VK_TAB ; return CDialog:PreTranslateMessage(pMsg); 3、處理“登錄”按鈕的單擊事件,驗(yàn)證用戶需和密碼是否正確。如果用戶名和密碼正確, 關(guān)閉對(duì)話框并返回IDOKo void CLoginDlg:OnLogin() / TODO: Add y

33、our control notification handler code here CString user.password; m_U sername. GetWindowText(user); m_Password.GetWindowText(password); if(user.IsEmpty()llpassword.IsEmpty() MessageBox(M用戶或密碼不能為空!”); in_Username.SetFocus(); else _ParameterPtr pUse r.pPassword: CServerApp *pAPP=(CSererApp*)AfxGetApp(

34、); pUser=pAPP-m_DataManage.m_pConimand-CreateParameter(Huser,adVarWChaEadPara inInput, 100,Gbstr_t)user); pPassword=pAPP-m_DataManage.m_pCommand-CreateParanieter(Hpassword,adVarWC ha 匚 adParamlnput, 100,Gbstr_t)password); pAPP-m_DataManage.m_pConnection-CursorLocation=adUseServer; pAPP-m_DataManage

35、.m_pCommand-ActiveConnection=pAPP-m_DataManage .m_pCo nnection; pAPP-m_DataManage.m_pConimand-Parameters-Append(pUser); pAPP-m_DataManage.m_pCommand-Parameters-Append(pPassword); /CString sql=Hselect *from tb_userlnfo where UserName=,M+user+H, and PassWord=M,+password+HH,; pAPP-m_DataManage.m_pComma

36、nd-CommandText= select *from tb_userlnfo where UserName=user and PassWord=passwordH;/ 需要解釋 _RecordsetPtr pRecord=NULL; pRecord=pAPP-m_DataManage.m_pCommand-Execute(O.NULL.adCmdText); pAPP-m_DataManage.m_pConimand-Parameters-Delete(Huser,r); pAPP-ni_DataManage.m_pCominand-Parameters-Delete(Hpassword,

37、r); if(pRecord!=NULL) try CString str=(char*)LbstrJ)pRecord-GetFields()-GetIteni(HUserNanieM)- Value; /MessageBox(str); pRecord-Close(); catch() ( MessageBox(H用戶名或密碼不正確!”); /mUsername.GetFocusO;岀錯(cuò)的一個(gè)地方 m_Username.SetFocus(); pRecord -Close(); return ; EndDialog(IDOK); else MessageBox(u用戶名或密碼不正確); /m

38、_Usernaine.GetFocus();出錯(cuò)的一個(gè)地方 m_Username.SctFocus(); pRccord -Close(); void CLoginDlg: :OnCancel() / TODO: Add extra cleanup here CDialog:OnCancel(); 第六章主窗體設(shè)計(jì) 6.1主窗體概述 局域網(wǎng)監(jiān)控系統(tǒng)服務(wù)器端主窗體主要顯示客戶端發(fā)來(lái)的位圖信息,并且控制客戶端抓 圖的起始坐標(biāo)。 6.2主窗體的實(shí)現(xiàn)過程 1、向?qū)υ捒蝾愔刑砑尤缦鲁蓡T變量。 SOCKET m_Socket; char *m_BnipData; char *m_TempData; cha

39、r *Head: BOOL m_ShowBmp; int m_BmpSizc; int m_RecSize; CString m_Clicn(IP; UINT m_ClientPort; WORD m.LeftTopX; WORD m.LeftTopY; 2、自泄義一個(gè)消息,用于自套接字有數(shù)據(jù)時(shí)發(fā)送到主窗口中。 #define CM_RECEIVED WM_USER十 1001 3、想對(duì)話框中添加Showlmage方法,顯示位圖數(shù)據(jù)。 void CServerDlg:Showlniage() if(m_ShowBmp) BITMAPINFO blnfo; niemcpyC int x=bInf

40、o.bmiHeader.biWidth; int y=bInfo.bmiHeader.biHeight; StrctchDIBits(m_BKGctDC()m_hDC,OQxyOOxy 4、向?qū)υ捒蛑刑砑覱nRcccivcd方法,用于接收客戶端發(fā)來(lái)的數(shù)#乳 在數(shù)據(jù)接收后,向客 戶端發(fā)送確認(rèn)信息。 void CServerDlg: :OnReceived() char *buffer=new charMAX_BUFFl; sockaddr in addr; int factsize=sizeof(addr); int ret=recvfrom(m_Socket,bufferJ050.0,(soc

41、kaddr*) if(ret!=-l) CString recIP=inet_ntoa(add r.sin_addr); /MessageBox(recIP); if(recIP!=m_ClientIP) /MessageBox(m_ClientIP); deleted buffer; return; m_ClientPort=ntohs(add r.sin_port); m_RecSize+=ret: WORD orderID=*(WORD*) WORD endID=*(WORD*) int bmpsize=*(int *) m_LeftTopX=*(WORD*) m_LeftTopY=*(

42、WORD*) sockaddr_in addrl; addrl.sin_addr.S_un.S_addr=inet_addr(m_ClientIP.GetBuffer(O); addrI.sin_port=htons(m_ClientPort); addr 1 .sin_family=AF_INET; int size=sizeof(addrl); char pData=vconfirm,; sendto(m_Socket.pData. if(orderID=0) m_BmpSize=bmpsize; m_BmpData=Head: else m_BmpSize+=bmpsize; mcmcp

43、y(m_BmpData, m_B mpData+=bmpsize; m_ShowBmp=false; if(endID=l) m_ShowBmp=true; m_BmpData=Head: memcpy(m_TempData.HeadJ 024* 1024); Showlmage(); deletef buffer; 5、在對(duì)話框的消息映射部分手動(dòng)添加一個(gè)消息映射,用于將CM.RECEIVED與OnRcccivcd 方法聯(lián)系起來(lái)。如下: ON_MESSAGE(CM_RECEIVED.OnReceived) 6、向?qū)υ捒蛑刑砑?nButtonDown方法,用于向客戶端發(fā)送控制指令。 void C

44、ServerDlg:OnButtonDown(UINT nID) if(!m_ClientIRIsEmpty() WORD x=m_LcftTopX; WORD y=m_LeftTopY; char buffer4; sockaddrjn addr; addr.sin_family=AF_INET; addr.sin_port=htons(m_ClientPort); addr.sin_addr.S_un.S_addr=inet_addr(m_ClientIRGetBuffer(O); int size=sizeof(addr); switch(nlD) case IDC.BTDOWN: y=

45、m_LcftTop Y+100: *(WORD*) (WORD*) int ret=sendto(m_Socket.buffer,4,0Xsockaddr*) break; case IDC.BTUP: y=m_LeftTopY-100; *(WORD*) (WORD*) int ret=sendto(m_Socket,buffer,4,0/sockaddr*) break; case IDC_BTLEFT: x=m_LeftTopX-100; *(WORD*) (WORD#) int ret=sendto(m_Socket,buffer,4,0/sockaddr*) break: case

46、IDC_BTRIGHT: x=m_LeftTopX+100; (WORD*) *(WORD*) int ret=sendto(m_Socket,buffer,4,OXsockaddr*) break; case IDC.BTRESTORE: *(WORD*) *(WORD*) int ret=sendto(m_Socket,buffer,4,0Xsockaddr*) break; 7、在對(duì)話框的消息映射部分添加一個(gè)ON_COMMAND_RANGE消息映射宏,用以處理按 鈕單擊事件。 ON_COMMAND_RANGE(IDC_BTRESTORE.IDC_BTRIGHTOnButtonDown)

47、8、在對(duì)話框的初始化函數(shù)中創(chuàng)建并綁左套接字,從數(shù)據(jù)庫(kù)中讀取客戶端IP BOOL CSenferDlg:OnInitDialog() CDialog:OnInitDialog(); sockaddr_in addr; addr.sin_family = AFJNET: /addr. sin_addr.S_un.S_addr = inet_addr(IocalIP); addr.sin_addr.S_un.S_addr = inet_addr(H 127.0.01 J; addr.sin_port = htons(5002); 創(chuàng)建套接字 m_Socket = socket(AF_INET.SOC

48、K_DGRAM,0); if (m.Socket = INVALID.SOCKET) ( MessageBoxC套接字創(chuàng)建失敗門; 綁從套接字 if (bind(m_SocketXsockaddr*) m.BmpData = new char 1024*1024*2; memset(m_BmpData,0,1024* 1024*2); m_TempData = new char( 1024* 1024*2; memset(m_TempData.0,1024* 1024*2); Head = m_BmpData: WSAAsyncSelect(m_Socket.m_hWnd,CM_RECEIVE

49、D.FD_READ); m_ShowBmp = FALSE; m_BmpSize = 0; m_RccSizc = 0; m_ClientPort = 0; CServerApp* pApp = (CServrerApp*)AfxGetApp(); CString sql = select * from tb.Clientlnfo; pApp-m_DataManage.m_pRecord-CursorLocation = adUscScrvcr; pApp-m_DataManage.m_pRecord-Open(Cbstr_t)sqI,pApp-m_DataManage.m_pConnect

50、ion.GetInterfacePtr(),adOpcnKeyset,adLockOptimistic,adCmdTcxt); m_ClientIP= if (pApp-m_DataManage.m_pRecord-RecordCount0) ( m_ClientIP= (char*)Cbstr_t)pApp-ni_DataManage.m_pRecord-GetFields()-GetItem(OL)- Value; /MessageBox(m_ClientIP); pApp-m_DataManage.m_pRecord-Close(); m_LeftTopX= 0; m_LeftTopY=

51、 0; m_BK.SetWindowPos(NULU0.0305,305,SWP_NOMOVE); return TRUE; 9、處理對(duì)話框的OnCancel方法,在對(duì)話框關(guān)閉時(shí)釋放分配的內(nèi)存,防止內(nèi)存泄漏匚 第七章操作員管理模塊設(shè)計(jì) 7.1操作員模塊概述 操作員模塊主要用于實(shí)現(xiàn)操作員信息的添加、修改、刪除。操作員模塊運(yùn)行結(jié)果如下圖。 7.2操作員模塊技術(shù)分析 操作員管理模塊主要實(shí)現(xiàn)操作員信息的添加、修改、刪除。為了方便用戶進(jìn)行添加、修改、 刪除操作,在操作員管理窗口顯示時(shí)會(huì)將操作員信息以表格形式顯示出來(lái)。這里的表格使用 的是MFC提供的CListCtrl類。 7.3操作員模塊實(shí)現(xiàn)過程 1、創(chuàng)

52、建一個(gè)對(duì)話框,中間的空間如上圖顯示的樣式。 2、改寫對(duì)話框的PreTranslateMessage虛方法,當(dāng)焦點(diǎn)在編輯框中時(shí)按Enter鍵將控制焦點(diǎn) 移動(dòng)。 BOOL CCopManage:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base class if (pMsg-message=WM_KEYDOWN 獲取類名 GetCIassName(pMsg-hwnd,str.GetBuffer(O).MAX_PATH); if(str=nEditH) pMsg-wPar

53、am = VK_TAB ; return CDialog:PreTranslateMessage(pMsg); 3、向?qū)υ捒蛑刑砑覥LearText方法,用于刪除編輯框中的文本。為了增加程序的靈活性, cleartext方法逐一利用循環(huán)遍歷對(duì)話框中的控件.如果是編借框控件,則淸空文本,這 樣,無(wú)論對(duì)話框中有多少個(gè)編借控件,調(diào)用cleartext方法會(huì)將所有的文本淸空。 void CCopManage:CIearText() HWND pWnd=NULL; pWnd=:GetWindow(m_hWnd.GW_CHILD); char clsnamej M AX_PATH ; memset(cls

54、nanie,O,MAX_PATH); if(pWnd!=NULL) ( if(:GetClassName(pWnd,clsname,MAX_PATH)!=O)/需要了解 GetClassName 函數(shù) if(strcmp(clsname/EditM)=O) :SetWindowText(pWnd/H,); HWND hWnd=:GetWindow(pWnd.GW_HWNDNEXT): do if(:GetClassName(hWndxlsname,MAX_PATH)!=O) :SetWindowText(hWnd;H,); hWnd=:GetWindow(hWnd.GW_HWNDNEXT);

55、while(hWnd!=NULL); ) ) 4、向?qū)υ捒蛑刑砑覮oadOpcratorlnfo方法.從用戶數(shù)據(jù)表中查詢數(shù)據(jù),將其顯示在列表中。 void CCopManage:LoadOpcratorlnfoO CServerApp *pAPP=(CServrerApp *)AfxGetApp(); CString sql=Mselect * from tb_userinfoM; pAPP-m_DataManage.m_pRecord-Opcn(_bstr_t)sql,pAPP-m_DataManage.m_pConnec tion .GetInterfacePtr() ,adOpenKey

56、set,adLockOptimistic,adC mdText); mJist.DeleteAllItemsO; int row=0; CString user.password; while(!pAPP-m_DataManage.m_pRecord-ADOEof) m_list.InsertItem(row/,0); user=(char *)LbstrJ)pAPP-m_DataManage.m_pRecord-GetFields()-GetItem(OL)-Valued/ 需要看看 _bstr_t password=(char *)CbstrJ)pAPP-m_DataManage.ni_p

57、Record-GetFieIds()-GetItem(IL)-Value; m_list.SetIteniText(row,Oruser); m_list.SetIteniText(rou; 1 .password); row+; pAPP-m_DataManage.m_pRecord-MoveNext(); pAPP-m_DataManage.m_pRecord-Close(); ) 5、處理列表中的雙擊事件,將當(dāng)前行信息顯示在編借框中。 void CCopManage:OnDblclkListInfo(NMHDR* pNMHDR. LRESULT* pResult) / TODO: Add

58、 your control notification handler code here int seIrow=m_list.GetSeIectionMark(); if(selrow!=-l) ( ni_Username.SetWindowText(mJist.GetItemText(selrow.O); ni_Password.SetWindowText(m_list.GetItemText(selrowJ); in_CofPassword.SetWindowText(mJist.GetItemText(selrowJ); *pResult = 0; ) 6、在對(duì)話框中初始化時(shí)設(shè)置列表控件

59、風(fēng)格,并向列表控件中添加列,調(diào)用LoadOperatorlnfo 方法向列表控件中添加操作員信息。 BOOL CCopManage:OnInitDialog() CDialog:OnInitDialog(); /TODO: Add extra initialization here m list.SetExtendedStyle(LVS EX FULLROWSELECTILVS EX GRIDLINESILVS EX T WOCLICKACTIVATE); /m_list.InsertItem(O/H,); mJist.InsertCoiumn(0/ 用戶名稱 n.LVCFMT_LEFT,25

60、0); mJist.InsertColumn( 1 用戶密碼H.LVCFMT_LEFT,250);/需要看一下 insercolumn 函數(shù) m_ImageList.Create( 16,16,TRUE,2,2); mJmageList. Add( AfxGet App()-LoadIcon(IDIJCON 1); mJist.SetImageList( LoadOperatorlnfoO; return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages shoul

溫馨提示

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

評(píng)論

0/150

提交評(píng)論