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

正文內容

某學校機房管理系統的設計與實現(參考版)

2025-04-21 06:50本頁面
  

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