freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

機房監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)—免費畢業(yè)設(shè)計論文(參考版)

2024-12-07 20:59本頁面
  

【正文】 經(jīng)過幾個月來的設(shè)計 ,系統(tǒng)基本滿足 機房監(jiān)控 方面的需要。 本文的主要工作有: 1)介紹了機房監(jiān)控的重要行,對 CS 模式、 Socket、 Hook 及都進行了簡單的介紹; 2) 闡述了 Socket 的基本實現(xiàn)原理; 3) 模擬了 機房監(jiān)控 系統(tǒng)的開發(fā)需求,提出了比較詳細的解決方案,闡明了系統(tǒng)的功能模塊的劃分及相互之間的關(guān)系,并詳細描述了每 個模塊的實現(xiàn)過程或者實現(xiàn)方法; 該系統(tǒng)也有一些不盡人意的地方。 系統(tǒng)能實現(xiàn) 屏幕截圖、鎖定屏幕以及服務(wù)器端和客戶端的通信 等功能。 } 結(jié) 論 在分析以往一些機房監(jiān)控系統(tǒng)的基礎(chǔ)上,此設(shè)計采用 Socket 編程技術(shù)和 鉤子 (Hook)技術(shù) 設(shè)計方案。 } LRESULT CALLBACK KeyboardProc(int iCode, WPARAM wParam, LPARAM lParam ) { /* *判斷是對哪個窗口進行鍵盤輸入, *如果不是對客戶端窗口進行輸入, *直接返回,從而達到屏蔽鍵盤的作用 */ if(::GetActiveWindow()!=gTargWnd) return 1。 } DLLEXPORT int CALLBACK UninstallHOOK() { //卸載鍵盤和鼠標鉤子 if (UnhookWindowsHookEx(g_hHookK)==0||UnhookWindowsHookEx(g_hHookM)) return FALSE。 g_hHookK) return TRUE。 if(g_hHookM amp。 //客戶端窗口句柄復制 //安裝鍵盤和鼠標鉤子 第 27 頁 共 30 頁 g_hHookK=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,0)。 return CallNextHookEx(g_hHookM,iCode,wParam,lParam)。 static HHOOK g_hHookM=NULL。 在本系統(tǒng)中,鎖屏幕和解鎖主要涉及到下面幾個函數(shù): HWND gTargWnd。 該系統(tǒng)只需要處理鍵盤和鼠標的輸入,因此只需要 在應(yīng)用程序中 安裝 WH_KEYBOARD Hook 用來監(jiān)視 WM_KEYDOWN and WM_KEYUP 消息 ,還有安裝WH_MOUSE Hook 監(jiān)視從 GetMessage 或者 PeekMessage 函數(shù)返回的鼠標消息 , 使用這個 Hook監(jiān)視輸入到消息隊列中的鼠標消息。 第 26 頁 共 30 頁 這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強制結(jié)束消息的傳遞。鉤子實際上是一個處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。當消息到達后,在目標窗口處理函數(shù)之前處理它。 鎖屏和解屏 屏幕的鎖定功能可以通過多種方式實現(xiàn),本系統(tǒng)使用的是 Windows 鉤子( Hook)技術(shù)進行實現(xiàn)的。在本系統(tǒng)中,使用 CxImage( CxImage 類庫是一個優(yōu)秀的圖像操 作類庫。 } } return FALSE。 } if(!(nWidth, nHeight)) //縮放位圖 { return FALSE。 if((hBmp)) //位圖句柄構(gòu)建對象 { if(nWidth = 0) 第 25 頁 共 30 頁 { nWidth = ()。bBuf, long amp。 } BOOL Bmp2Stream( HBITMAPamp。 DeleteDC(hmemdc)。 //得到屏幕位圖的句柄 hbitmap = (HBITMAP)SelectObject(hmemdc, holdbitmap)。 // 把新位圖選到內(nèi)存設(shè)備描述表中 holdbitmap = (HBITMAP)SelectObject(hmemdc, hbitmap)。 nheight = yscrn。 第 24 頁 共 30 頁 yscrn = GetDeviceCaps(hscrdc, VERTRES)。 //為屏幕設(shè)備描述表創(chuàng)建兼容的內(nèi)存設(shè)備描述表 hmemdc = CreateCompatibleDC(hscrdc)。// 位圖寬度和高度 int xscrn, yscrn。// 屏幕和內(nèi)存設(shè)備描述表 HBITMAP hbitmap, holdbitmap。正如他們的名字所示, Screen2Bitmap 的作用是將屏幕截圖,并保存到一個位圖中,然后返回這個位圖的句柄;而 Bmp2Stream則是為了網(wǎng)絡(luò)傳輸作準備,它接收一個位圖句柄,對這個位圖進行編碼,并拷貝到一個緩沖區(qū)里。然后調(diào)用 Connect,連接向指定的服務(wù)器端,如果連接成功,屏幕解鎖并開啟監(jiān)聽線程,準備接收來自服務(wù)器的命令并進行響應(yīng)。 } } else { m_strInfo = 重復 登錄 !。 //開啟監(jiān)聽線程 m_strInfo = 登錄 成功 !。 ()。 在用戶進行登錄時: if(!) //若未連接 { if(((0), 20211, (0), (0))) { //連接成功 TRACE(m_strName+\r\n)。 //綁定屏幕鎖定下可以操作的窗口 ()。 } else { AfxMessageBox(ip+屏幕未鎖住 )。 //設(shè)置監(jiān)聽端口為 22221 ()。 }。}。 第 22 頁 共 30 頁 }。 ~CClient() { closesocket(local)。 bConnected = FALSE。 local=INVALID_SOCKET。wsaData)。 CClient() { WSADATA wsaData。 static DWORD WINAPI ResponseThreadPrc(LPVOID lpParam)。 bool UnlockScreen()。 BOOL bLocked。 int remote_addr_len。 class CClient { private: SOCKET local。 int pos。 vectorClient clients。 第 21 頁 共 30 頁 SOCKET srvsock。 BOOL Init(int port)。 WSACleanup()。cs)。 }。 CServer() { InitializeCriticalSection(amp。client)。 void AliveAll()。 bool SnapScreen(char *ip, CxImageamp。 CString GetNextClientIP()。 bool LockScreen(char* ip)。 class CServer { public: bool Check(char* name, char* pass)。因此,之間涉及大量的網(wǎng)絡(luò)通信。如下圖所示: 圖 42 客戶器端運行效果圖 第 20 頁 共 30 頁 由于整個系統(tǒng)基本使用 MFC 開發(fā),而且涉及到很多方面,代碼量比較大,不可能一一介紹,下面選擇幾個較為重要的核心功能的實現(xiàn)進行介紹。選中其中的某個,就可以進行響應(yīng)的操作,比如“截取屏幕”,那么就可以獲取客戶端的屏幕畫面,并顯示到用戶界面中。在登錄成功后,客戶端就不停的監(jiān)聽來自服務(wù)器的消息,并對消息進行響應(yīng)(可能會在本地進行很多操作),然后把結(jié)果返回到服務(wù)器端。當用戶選擇終止程序時將退出。如果客戶端發(fā)送來的用戶合法,那么 將這個新的客戶端添加到管理集合中。在本協(xié)議中,服務(wù)器將定時發(fā) 送 ALIVE 命令給每個客戶端,客戶端在收到后回復 OK給服務(wù)器端。所謂心跳包 就是在客戶端和服務(wù)器間定時通知對方自己狀態(tài)的一個自己定義的命令字,按照一定的時間間隔發(fā)送,類似于心跳,所以叫做心跳包。接下來就將把進程信息發(fā)送到服務(wù)器端。 圖 35 屏幕截圖 5)查看進程。 圖 34 發(fā)送消息 4)屏幕截圖。服務(wù)器端通過發(fā)送命令 MSG 向客戶端發(fā)送消息。服務(wù)器端向客戶端發(fā)送 LOCK 命令,客戶端將嘗試鎖定屏幕,如果成功,將向服務(wù)器返回 OK,否則返回 NO;服 務(wù)器端向客戶端發(fā)送 UNLOCK 命令,客戶端將嘗試解除鎖定屏幕,如果成功,將向服務(wù)器返回 OK,否則返回 NO。若用戶名和密碼正確,將返回 OK,否則返回 NO。 1)用戶登錄。而這些控制的實現(xiàn),都是通過向客戶端發(fā)送消息來實現(xiàn)的。要求程序界面友好,安裝及維護簡易可行。即一臺服務(wù)器就能管理多個客戶端,一般上限應(yīng)不低于 250 臺。管理員可以從服務(wù)器上直接發(fā)送一些消息到用戶電腦上,比如對用戶的違規(guī)行為進行警告,對時間快要用盡的用戶進行提醒等。即控制用戶的使用電腦的時間。該功能可以用于設(shè)定某些 程序無法執(zhí)行(比如一些被禁止的游戲等),同時,也可以從一定程度上起到病毒防治作用。而解鎖就是將已經(jīng)鎖定的電腦恢復正常。 2)能隨時鎖定和解鎖用戶電腦。因此,該系統(tǒng)應(yīng)該具有下列功能: 1)能隨時查看某個主機的屏幕畫面,即能進行屏幕截圖。 MFC 編制軟件時的大量內(nèi)節(jié) ,如應(yīng)用程序?qū)崿F(xiàn)消息的處理 ,設(shè)備環(huán)境繪圖 ,這種結(jié)合是以方便為目的的 ,必定要付出一定代價 , 因此就造成了 MFC 對類封裝中的一定程度的的冗余和迂回 ,但這是可以 接收 的 。 MFC 是 Win API與 C++的結(jié)合 ,API,即微軟提供的 Windows下應(yīng)用程序的編程語言接口 ,是一種軟件編程的規(guī)范 ,但不是一種程序開發(fā)語言本身 ,可以允許用戶使用各種各樣的第三方的編程語言來進行對 Windows 下應(yīng)用程序的開發(fā) ,使這些被開發(fā)出來的應(yīng)用程序能在 Windows 下運行 ,比如 VB, VC++, Java, Delphi 編程語言函數(shù)本質(zhì)上全部源于 API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在Windows 的消息機制和繪圖里 ,遵守 Windows 作為一個操作系統(tǒng)的 內(nèi)部實現(xiàn) 。 win32 編程可以用 C 來完成 , 主要是通過 Windows 的 API來工作 。daddr,sizeof(daddr))。 =i_addr()。 =AF_INET。 memset((void *)amp。如果連接成功, connect 返回0;如果失敗則返回 SOCKET_ERROR。 十 ) connect 函數(shù) int connect( SOCKET s, const struct sockaddr FAR *name, int namelen )。ServerSocketAddr,amp。 第 13 頁 共 30 頁 addrlen=sizeof(ServerSocketAddr)。下面是一個調(diào)用 accept 的例子: struct sockaddr_in ServerSocketAddr。 服務(wù)程序調(diào)用 accept函數(shù)從處于監(jiān)聽狀態(tài)的流套接字 s的客戶連接請求隊列中取出排在最前的一個客戶請求,并且創(chuàng)建一個新的套接字來與客戶套接字創(chuàng)建連接通道,如果連接成功,就返回新創(chuàng)建的套接字的描述符,以后與 客 戶 套 接字 交 換數(shù) 據(jù) 的 是新 創(chuàng) 建的 套 接 字; 如 果 失敗 就 返 回INVALID_SOCKET。假如該函數(shù)執(zhí)行成功,則返回 0;如果執(zhí)行失敗,則返回SOCKET_ERROR。 服務(wù)程序可以調(diào)用 listen 函數(shù)使其流套接字 s 處于監(jiān)聽狀態(tài)。 bind(ListenSocket,(struct sockaddr *)amp。 = htons(8888)。我們用 0 來填充 sin_zero 數(shù)組,目的是讓sockaddr_in 結(jié)構(gòu)的大小與 sockaddr 結(jié)構(gòu)的大小一致。 其中 sin_family 置 AF_INET; sin_port 指明端口號; sin_addr 結(jié)構(gòu)體 第 12 頁 共 30 頁 中只有一個唯一的字段 s_addr,表示 IP 地址,該字段是一個整數(shù),一般用函數(shù) i_addr()把字符串形式的 IP 地址轉(zhuǎn)換成 unsigned long 型的整數(shù)值后再置給 s_addr。 char sin_zero[8]。 u_short sin_port。 sa_family 指定地址族,對于 TCP/IP 協(xié)議族的套接字,給其置 AF_INET。 char sa_data[14]??蛻舫绦蛞话悴槐卣{(diào)用 bind 函數(shù)來為其 Socket 綁定 IP地址和斷口號。 當創(chuàng)建了一個 Socket 以后,套接字數(shù)據(jù)結(jié)構(gòu)中有一個默認的 IP 地址和默認的端口號。 注意:在 Unix 系統(tǒng)下,如果 recv 函數(shù)在等待協(xié)議接收數(shù)據(jù)時網(wǎng)絡(luò)斷開了,那么調(diào)用 recv 的進程會接收到一
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1