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

正文內(nèi)容

機(jī)房監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)—畢業(yè)設(shè)計(jì)論文-wenkub.com

2024-11-27 20:45 本頁面
   

【正文】 需求分析并沒有非常細(xì)致全面,軟件的性能、健壯性、使用方便及美觀等方面離真正的商業(yè)軟件還有一定的差距;系統(tǒng)并沒有考慮安全因素;另外,該系統(tǒng)并沒有考慮與 機(jī)房 其他軟件系統(tǒng)之間的關(guān)系 ,這些都有待今后的完善。該方案采用 C/S 模式,采用 VC++ 作為開發(fā)工具,在 第 28 頁 共 30 頁 Win32 平臺(tái)下實(shí)現(xiàn)了一個(gè)機(jī)房監(jiān)控系統(tǒng) 。 else return TRUE。amp。 } DLLEXPORT int CALLBACK InstallHOOK(HWND hWnd) { gTargWnd = hWnd。 //客戶端窗口句柄 pragma data_seg (shared) static HHOOK g_hHookK=NULL。 鉤子有很多種, 每一種類型的 Hook 可以使應(yīng)用程序能夠監(jiān)視不同類型的系統(tǒng)消息處理機(jī)制。鉤子機(jī)制允許應(yīng)用程序截獲處理 window 消息或特定事件。它可以快捷地存取、顯示、轉(zhuǎn)換各種圖像 )這個(gè)開源項(xiàng)目提供的強(qiáng)大的庫進(jìn)行編碼,將位圖轉(zhuǎn)化為 Jpg 格式再進(jìn)行傳輸,這正是 Bmp2Stream函數(shù)存在的目的。 } if((bBuf, size, type)) //編碼 return TRUE。size, DWORD type = CXIMAGE_FORMAT_JPG, int nWidth=0, int nHeight=0 ) { if(hBmp != INVALID_HANDLE_VALUE) { CxImage img。 // 返回位圖句柄 return hbitmap。 // 把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表中 BitBlt(hmemdc, 0, 0, nwidth, nheight, hscrdc, 0, 0, SRCCOPY)。 nwidth = xscrn。// 屏 幕分辨率 //為屏幕創(chuàng)建設(shè)備描述表 hscrdc = CreateDC(display, NULL, NULL, NULL)。下面是這兩個(gè)函數(shù)的具體實(shí)現(xiàn): HBITMAP Screen2Bitmap() { HDC hscrdc, hmemdc。 } 首先檢查是否已經(jīng)建立了連接,避免重復(fù)登錄。 //屏幕解除鎖定 ()。 //鎖定窗口 首先把自身窗口設(shè)置為屏幕鎖定下可以操作的窗口,然后把屏幕鎖定,等待用戶登錄。 //進(jìn)行監(jiān)聽 而如果服務(wù)器要進(jìn)行某種操作,比如,鎖定屏幕,則這樣使用 m_server: if(((0))) { AfxMessageBox(ip+屏 幕已鎖住 )。 bool Connect(char* ip, int port, char* name, char* pass)。 WSACleanup()。 bLocked = FALSE。 WSAStartup(MAKEWORD(2,2),amp。 bool LockSrceen()。 HWND hWnd。 }。 SOCKADDR_IN srvaddr。 }。 ~CServer() { DeleteCriticalSection(amp。 void Run()。 x)。 bool SendMsg(char* ip, char* msg)。在整個(gè)系統(tǒng)中,網(wǎng)絡(luò)通信至關(guān)重要,主要通過兩個(gè)類實(shí)現(xiàn): CClient 和 CServer。 初 始化, 鎖定屏幕 響應(yīng)命令,進(jìn)行相關(guān)操作(如截圖,鎖屏) 監(jiān)聽服務(wù)器命令 登錄成功,解除 鎖 定 接收用戶命令 發(fā)送結(jié)果給服務(wù)器 結(jié) 束 第 19 頁 共 30 頁 圖 41 服務(wù)器端運(yùn)行效果圖 在客戶端,用戶被要求填入服務(wù)器 ip,用戶名以及密碼,然后登錄。 客戶端在程序運(yùn)行后會(huì)首先鎖定屏幕,只有當(dāng)?shù)卿浄?wù)器成功后才會(huì)解除鎖定。 用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )M S G m s gO K用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )S N A PO K l e n o r N Od a t a用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )L I S TO K l e n o r N Od a t a 第 17 頁 共 30 頁 圖 36 心跳包 整個(gè)系統(tǒng)的運(yùn)作流程如下面兩圖所示: 圖 37 服務(wù)器流程圖 初始化,設(shè)置服務(wù)器 用戶是否合法 向客戶端發(fā)送請(qǐng)求并返回處理結(jié)果 接受主機(jī)的管理(如鎖屏、截圖等) 進(jìn)行監(jiān)聽,接受連接登錄 將新客戶加入到管理集合中 結(jié)束 不合法 合法 返回處理結(jié)果 用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )A L I V EO K 第 18 頁 共 30 頁 圖 38 客戶端流程圖 服務(wù)器端在程序開始運(yùn)行后,一方面啟動(dòng)了監(jiān)聽線程,不停的準(zhǔn)備接收新的客戶端的連接請(qǐng)求。 圖 36 查看進(jìn)程 6)心跳包。服務(wù)器端通過 SNAP 命令向客戶端要求截圖,客戶端進(jìn)行截圖嘗試,如失敗,將返回 NO;如果成功,將返回 OK len 命令,將圖像數(shù)據(jù)大小從len 參數(shù)中傳遞給服務(wù)器端,并接著傳遞所得圖像的數(shù)據(jù)給 服務(wù)器。 圖 33 鎖定和解鎖 用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )L O G I N : n a m e p a s s w o r dO K o r N O用 戶 ( 客 戶 端 )管 理 員 ( 服 務(wù) 器 )L O C K o r U N L C O KO K o r N O 第 16 頁 共 30 頁 3)發(fā)送消息??蛻舳溯斎敕?wù)器的 ip 和自身的用戶名及密碼,作為 LOGIN命令的參數(shù)發(fā)送到服務(wù)器端。 系統(tǒng)架構(gòu)設(shè)計(jì) 按照前面提出的設(shè)計(jì)目標(biāo)來看,該系統(tǒng)是一個(gè)典型的 C/S 系統(tǒng),其架構(gòu) 圖如下所示: 第 15 頁 共 30 頁 用 戶 主 機(jī) 1管 理 員 服 務(wù) 器用 戶 主 機(jī) 2用 戶 主 機(jī) n用 戶 主 機(jī) 3 圖 31 系統(tǒng)框圖 在該系統(tǒng)中,管理員通過一臺(tái)服務(wù)器,對(duì)多個(gè)客戶端進(jìn)行控制。 6)能同時(shí)支持多個(gè)客戶端。 4)能為用戶設(shè)定使用時(shí)間。所謂“鎖定”是指讓用戶無法進(jìn)行鍵盤輸入和鼠標(biāo)操作,使電腦暫時(shí)“失靈”,該功能主要用于強(qiáng)迫用戶下機(jī)。 3 系統(tǒng) 的 設(shè)計(jì) 本程序設(shè)計(jì)意圖是為了更好的管理 局域網(wǎng)內(nèi)電腦的使用,對(duì)電腦的使用進(jìn)行實(shí)時(shí)的監(jiān)控,為局域網(wǎng)內(nèi)部提供一個(gè)良好的運(yùn)行環(huán)境。 然而更方便的是使用 MFC,微軟基礎(chǔ)類 (Microsoft Foundation Classes),實(shí)際上是微軟提供的 ,用于在 C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎 ,VC++是 Windows 下開發(fā)人員使用的專業(yè)C++ SDK(SDK, Standard Software Develop Kit,專業(yè)軟件開發(fā)平臺(tái) ),MFC 就是掛在它之上的一個(gè)輔 助軟件開發(fā)包 ,MFC 作為與 VC++血肉相連的部分 ,可以大大方便程序員,簡化程序員的工作。 connect(ClientSocket,(struct sockaddr *)amp。daddr,0,sizeof(daddr))。 客戶程序調(diào)用 connect 函數(shù)來使客戶 Socket s 與監(jiān)聽于 name 所指定的計(jì)算機(jī)的特定端口上的服務(wù) Socket 進(jìn)行連接。 ServerSocket=accept(ListenSocket,(struct sockaddr *)amp。該函數(shù)的第一個(gè)參數(shù)指定處于監(jiān)聽狀態(tài)的流套接字;操作系統(tǒng)利用第二個(gè)參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu);操作系統(tǒng)利 用第三個(gè)參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu)的長度。處于監(jiān)聽狀態(tài)的流套接字 s 將維護(hù)一個(gè)客戶連接請(qǐng)求隊(duì)列,該隊(duì)列最多容納 backlog個(gè)客戶連接請(qǐng)求。 = htonl(INADDR_ANY)。有的服務(wù)器是多宿主機(jī),至少有兩個(gè)網(wǎng)卡,那么運(yùn)行在這樣的服務(wù)器上的服務(wù)程序在為其 Socket 綁定 IP 地址時(shí)可以把htonl(INADDR_ANY)置給 s_addr,這樣做的好處是不論哪個(gè)網(wǎng)段上的客戶程序都能與該服務(wù)程序通信;如果只給運(yùn)行在多宿主機(jī)上的服務(wù)程序的 Socket綁定一個(gè)固定的 IP 地址,那么就只有與該 IP 地址處于同一個(gè)網(wǎng)段上的客戶程序才能與該服務(wù)程序通信。 struct in_addr sin_addr。 }。一個(gè)服務(wù)程序必須調(diào)用 bind 函數(shù)來給其綁定一個(gè) IP 地址和一個(gè)特定的端口號(hào)。如果 recv 在 copy 時(shí)出錯(cuò),那么它返回 SOCKET_ERROR;如果 recv函數(shù)在等待協(xié)議接收數(shù)據(jù)時(shí)網(wǎng)絡(luò)中斷了,那么它返回 0。這里只描述同步 Socket 的 recv 函數(shù)的執(zhí)行流程。(每一個(gè)除 send 外的 Socket 函數(shù)在執(zhí)行的最開始總要先等待套接字的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢才能繼續(xù),如果在等待時(shí)出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,那么該 Socket 函數(shù)就返回 SOCKET_ERROR) 注意:在 Unix系統(tǒng)下,如果 send 在等待協(xié)議傳送數(shù)據(jù)時(shí)網(wǎng)絡(luò)斷開的話,調(diào)用 send 的進(jìn)程會(huì)接收到一個(gè) SIGPIPE 信號(hào),進(jìn)程對(duì)該信號(hào)的默認(rèn)處理是進(jìn)程終止。當(dāng)調(diào)用該函數(shù)時(shí), send 先比較待發(fā)送數(shù)據(jù)的長度 len 和套接字 s的發(fā)送緩沖區(qū)的長度,如果 len 大于 s 的發(fā)送緩沖區(qū)的長度,該函數(shù)返回 SOCKET_ERROR;如果 len 小于或者等于 s 的發(fā)送緩沖區(qū)的長度,那么 send 先檢查協(xié)議是否正在發(fā)送 s的發(fā)送緩沖中的數(shù)據(jù),如果是就等待協(xié)議把數(shù)據(jù)發(fā)送完,如果協(xié)議還沒有開始發(fā)送 s 的發(fā)送緩沖中的數(shù)據(jù)或者 s 的發(fā)送緩沖中沒有數(shù)據(jù),那么 send 就比較 s的發(fā)送緩沖區(qū)的剩余空間和 len,如果 len 大于剩余空間大小 send 就一直等待協(xié)議把 s 的發(fā)送緩沖中的數(shù)據(jù)發(fā)送完,如果 len 小于剩余空間大小 send 就僅僅把 buf 中的數(shù)據(jù) copy到剩余空間里(注意并不是 send 把 s的發(fā)送緩沖中的數(shù)據(jù)傳到連接的另一端的,而是協(xié)議傳的, send 僅僅是把 buf 中的數(shù)據(jù) copy 到 s 的發(fā)送緩沖區(qū)的剩余空間里)。 第 10 頁 共 30 頁 不論是客戶還是服務(wù)器應(yīng)用程序都用 send函數(shù)來向 TCP連接的另一端發(fā)送數(shù)據(jù)。套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中專門有一個(gè)字段存放該結(jié)構(gòu)的被引用次數(shù),即有多少個(gè)套接字描述符指向該結(jié)構(gòu)。 SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppep_proto)。該表中有一個(gè)字段存放新創(chuàng)建的套接字的描述符,另一個(gè)字段存放套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的地址,因此根據(jù)套接字描述符就可以找到其對(duì)應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。第二個(gè)參數(shù)指定 要?jiǎng)?chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報(bào)套接字類型為 SOCK_DGRAM;第三個(gè)參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。 第 9 頁 共 30 頁 應(yīng)用程序在完成對(duì)請(qǐng)求的 Socket 庫的使用后,要調(diào)用 WSACleanup 函數(shù)來解除與 Socket 庫的綁定并且釋放 Socket 庫所占用的系統(tǒng)資源。 例:假如一個(gè)程序要使用 版本的 Socket,那么程序代碼如下 wVersionRequested = MAKEWORD( 2, 1 )。該函數(shù)的第一個(gè)參數(shù)指明程序請(qǐng)求使用的 Socket 版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的 Socket 的版本信息。 Windows socket 又利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通信工作。實(shí)際使用中,同一個(gè)分組數(shù)據(jù)報(bào)可能不止一次的被發(fā)送,一般要等到接收方發(fā)回確認(rèn)收到的消息才會(huì)停止發(fā)送。通?;谶B接的流式套 接字是設(shè)計(jì)客戶機(jī) /服務(wù)器應(yīng)用程序時(shí)的標(biāo)準(zhǔn)。 Socket 類型及規(guī)范 可以提供給用戶使用的套接字有兩種,它們分別是數(shù)據(jù)報(bào)套接字和流式套接字: 1)流式套接字( SOCKET_STREAM) 提供了面向連接、雙向可靠的數(shù)據(jù)流傳輸服務(wù),數(shù)據(jù)無出錯(cuò),無重復(fù)地發(fā)送且按發(fā)送順序接收。 我們可以把套接字看作相應(yīng)進(jìn)程上的“門”:進(jìn)程把消息發(fā)送到網(wǎng)絡(luò)或從網(wǎng)絡(luò) 接收 消息都得經(jīng)過自身得套接字。 當(dāng)我們進(jìn)行編程時(shí),需要用到 Socket 接口,Socket 接口定義了許多函數(shù)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1