實驗二遠程監(jiān)控系統(tǒng).doc_第1頁
實驗二遠程監(jiān)控系統(tǒng).doc_第2頁
實驗二遠程監(jiān)控系統(tǒng).doc_第3頁
實驗二遠程監(jiān)控系統(tǒng).doc_第4頁
實驗二遠程監(jiān)控系統(tǒng).doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通達學(xué)院實驗報告實驗名稱: 遠程監(jiān)控系統(tǒng) 姓名: 學(xué)號: 專業(yè): 網(wǎng)絡(luò)工程 指導(dǎo)老師: 王誠 2010年11月20日實驗名稱:在線考試系統(tǒng)一、 實驗?zāi)康?. 通過這次實驗,了解遠程控制的原理。2. 通過這次實驗,掌握C/S模式MFC的通信過程及原理。3. 熟練的操作VC6.0,并利用其作出所需的軟件程序。二、 實驗內(nèi)容制作C/S結(jié)構(gòu)模式的遠程控制軟件,并利用其實現(xiàn)遠程桌面顯示,關(guān)機,以及重啟的功能。三、 實驗分析及過程1. 實驗采用的是TCP/IP協(xié)議中的UDP傳送協(xié)議。而Windows下,通信的實現(xiàn)就是要借助于Sockets(套接字)實現(xiàn)的。在連接成功時,應(yīng)用程序兩端都會產(chǎn)生一個Socket實例,操作這個實例,完成所需的會話。具體的代碼實現(xiàn)如下:服務(wù)器端:/初始化套接字CServerView:CServerView()m_bServerIsOpen = FALSE;m_hClientSocket = INVALID_SOCKET;CServerView:CServerView()if (m_bServerIsOpen)closesocket(m_pDoc-m_hServerSocket);if (m_hClientSocket != INVALID_SOCKET)closesocket(m_hClientSocket);m_hClientSocket = INVALID_SOCKET; 客戶端:/初始化套接字BOOL IniSock(HWND hWnd)WORD wVersionrequested;WSADATA wsaData;wVersionrequested = MAKEWORD(2,0);int err = WSAStartup(wVersionrequested,&wsaData);if (err = -1)MessageBox(0,套接字初始化錯誤!,遠程控制,MB_OK|MB_APPLMODAL);return FALSE;CONNECT = TRUE;/設(shè)置計時器SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);return TRUE;/-/連接套接字BOOL ConnectSock()int msgsock;/分配套接字ServerSock = socket(AF_INET,SOCK_STREAM,0);if (ServerSock m_strServerMsg=strBackMsg;pServer-SendMsg();/強制關(guān)機ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);然后在對話框關(guān)機按鈕中,賦予關(guān)機鍵功能即可。至于,控制遠程客戶端重啟以及注銷等功能都可以按相同的原理實現(xiàn)!3. 遠程桌面顯示比較簡單,實現(xiàn)原理就是單獨建立一個傳輸畫面進程,代碼如下:/傳輸畫面線程UINT ThreadFunForVideo(LPVOID pParam)CServer* pServer=(CServer*)pParam;int nLength=sizeof(pServer-m_sockaddrServer);/建立真正會話連接pServer-m_socketRealConversationForVideo=accept(pServer-m_socketListenForVideo,(sockaddr*)&pServer-m_sockaddrServer,&nLength);if (pServer-m_socketRealConversationForVideo=INVALID_SOCKET)pServer-m_pDlg-MessageBox(建立通信套接字失??!);return 1;while (1)if(pServer-m_bEndThreadVideo=TRUE)AfxEndThread(2);pServer-SendScrBmp();/開始傳送畫面return 1;至于,屏幕傳輸內(nèi)容的細節(jié)就是通過一個捕捉桌面的函數(shù)實現(xiàn),代碼如下:void CServer:CatchScrBmp()HDC hScrDC,hMemDC;/創(chuàng)建設(shè)備表述句柄HBITMAP hBmp;int nWidth,nHeight;hScrDC=:CreateDC(DISPLAY,NULL,NULL,NULL);/創(chuàng)建屏幕設(shè)備dchMemDC=:CreateCompatibleDC(hScrDC);/創(chuàng)建與屏幕兼設(shè)備容的內(nèi)存DC/得到屏幕的高和寬nHeight=:GetDeviceCaps(hScrDC,VERTRES);nWidth=:GetDeviceCaps(hScrDC,HORZRES);/創(chuàng)建與屏幕設(shè)備兼容位圖hBmp=:CreateCompatibleBitmap(hScrDC,nWidth,nHeight);:SelectObject(hMemDC,hBmp);/將位圖選入內(nèi)存設(shè)備描述表/復(fù)制屏幕設(shè)備到內(nèi)存設(shè)備:BitBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,0,0,SRCCOPY);CBitmap bmp;bmp.Attach(hBmp);BITMAP bitmap;bmp.GetBitmap(&bitmap);/得到位圖結(jié)構(gòu)BITMAPINFO bitmapInfo;/位圖信息結(jié)構(gòu),包括位圖信息頭和位圖顏色信息/填充位圖信息頭bitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFO);bitmapInfo.bmiHeader.biWidth=bitmap.bmWidth;bitmapInfo.bmiHeader.biHeight=bitmap.bmHeight;bitmapInfo.bmiHeader.biPlanes=1;bitmapInfo.bmiHeader.biBitCount=bitmap.bmBitsPixel;bitmapInfo.bmiHeader.biCompression=0;bitmapInfo.bmiHeader.biSizeImage=bitmap.bmWidthBytes*bitmap.bmHeight;bitmapInfo.bmiHeader.biXPelsPerMeter=0;bitmapInfo.bmiHeader.biYPelsPerMeter=0;bitmapInfo.bmiHeader.biClrUsed=0;bitmapInfo.bmiHeader.biClrImportant=0;/申請位圖數(shù)據(jù)信息m_pBmpData=new charbitmap.bmWidthBytes*bitmap.bmHeight;/將位圖信息填入到位圖數(shù)據(jù)區(qū)int n=:GetDIBits(hMemDC,hBmp,0,bitmap.bmHeight,m_pBmpData,&bitmapInfo,DIB_RGB_COLORS);/賦值位圖結(jié)構(gòu)m_bmpBit=bitmap;/釋放dc:DeleteDC(hScrDC);:DeleteDC(hMemDC);void CServer:SendScrBmp()CatchScrBmp();/捕捉屏幕得到位圖結(jié)構(gòu)和位圖數(shù)據(jù),即得到m_bmpBit和m_bmpData;/發(fā)送位圖結(jié)構(gòu)信息int nSend=send(m_socketRealConversationForVideo,(char*)&m_bmpBit,sizeof(m_bmpBit),0);/發(fā)送位圖數(shù)據(jù)int nBytesOneTime=0;/每次發(fā)送數(shù)據(jù)int nBytesSend=0;/總共發(fā)送數(shù)據(jù)char* pch=m_pBmpData;int size=m_bmpBit.bmWidthBytes*m_bmpBit.bmHeight;doif(m_bEndThreadVideo)break;nBytesOneTime=send(m_socketRealConversationForVideo,pch,size-nBytesSend,0);nBytesSend+=nBytesOneTime;pch+=nBytesOneTime; while(nBytesSendsize);delete m_pBmpData;m_pBmpData=NULL;這樣,就將這個實驗的核心功能實現(xiàn)了!四、 實驗結(jié)果1. 程序運行后如下圖所示:2. 屏幕顯示功能(未能完美實現(xiàn))

溫馨提示

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

評論

0/150

提交評論