ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:38.60KB ,
资源ID:7221327      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7221327.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计局域网屏幕监控软件.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计局域网屏幕监控软件.docx

1、设计局域网屏幕监控软件计算机网络技术题目:局域网屏幕监控软件学院:计算机科学与技术 班级:计科0903姓名:张永辉 学号:0908030319 日期:2012年5月28设计局域网屏幕监控软件实现说明:本程序所实现的功能就是将服务器所在计算机的屏幕活动反映到客户端的程序窗口中,屏幕监控就是在服务器端获取屏幕图像,然后转换成可在网络中传输的数据发送到客户端,客户端接收到服务器短发来的数据后再将起转换成图像信息,并绘制在指定的窗口上,就这样不断的接收数据,绘制图像就可以实现局域网屏幕监控软件。技术要点:实现这样的操作的存在两种方法,一种是将图片信息存入文件,再将文件发送到客户端;另一种方法是将图片信

2、息存入内存,直接以内存数据发送到客户端。图片信息由两部分组,及BITMAP结构信息和数据图片数据。BITMAP结构可以通过CBitmap类直接获取,实现代码如下:CDC dc,bmpdc;int width,height;dc.CreateDC(“DISPLAY”NULL,NULL,NULL);/创建关联屏幕的画布;CBitmap bm;/位图类width=GetSystemMetics(SM_CXSCREEN);/屏幕宽度height= GetSystemMetics(SM_CYSCREEN);/屏幕高度bm.CreatCompatibleBitmap(&dc,width,height);/

3、创建与屏幕画布兼容的位图bmpdc. CreatCompatibleDC(&dc);/创建与屏幕画布兼容的临时画布bmpdc.SelectObject(bm);/选择位图bmpdc.BibBlt(0,0, width,height&dc,0,0,SRCCOY)/将屏幕图像复制到临时画布bm.GetBitmap(&bitmap);/获取位图结构在获取图片数据是首先要设置BITMAPINFORMATIONHEADER结构信息,再利用GetDIBits函数通过BITMAPINFORMATIONHEADER结构获取图片数据,实现代码如下:Bm.GetBitmap(&bitmap);/获取位图结构siz

4、e=bitmap.bmWidthBytes*bitmapHeight;/计算图片大小bmpdata=new charsize;/定义图片数据存储区BITMAPINFORMATIONHEADER bih;/位图信息头结构bihbiBitCount=bitmap.bmBitsPixel/图片像素位数bih.biClrImportant=0;bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=bitmap.bmHeight;bih.biPlanes=1;bih.biSize=sizeof(BITMAPINFORMATIONHEADER);bih.biSi

5、zeImage=size;bih.biXPelsPerMeter=0;bih.biY PelsPerMeter=0;/获取图片数据GetDIBits(dc,bm,0,bih,biHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);在客户端也就是图片数据的接收端会根据接收到的BITMAP结构和图片数据通过SetDIBITS方法生成图片,实现代码如下:SetDIBits(bmpdc.m_Hdc, bm,0,bih,biHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);实现过程:(1) 新建一个基于对话框的

6、工程,命名为server(服务器)。(2) 主要代码:在窗口类中定义Getscreen方法来获取服务器端屏幕的图像即发送所需要的BITMAP结构和位图数据。实现代码:void CServerDlg:GetScreen() CDC dc,bmpdc;/屏幕画布与临时画布 int width,height;/屏幕的宽度与高度 dc.CreateDC(DISPLAY,NULL,NULL,NULL);/根据屏幕上下文创建画布 CBitmap bm;/定义存储屏幕图形的位图 width = GetSystemMetrics(SM_CXSCREEN);/屏幕宽度 height = GetSystemMet

7、rics(SM_CYSCREEN);/屏幕高度 bm.CreateCompatibleBitmap(&dc, width,height); bmpdc.CreateCompatibleDC(&dc);/ 创建与屏幕画布相容的临时画布 bmpdc.SelectObject(&bm); bmpdc.BitBlt(0,0,width,height,&dc,0,0,SRCCOPY); bm.GetBitmap(&bitmap); size = bitmap.bmWidthBytes * bitmap.bmHeight; bmpdata = new charsize; BITMAPINFOHEADER

8、bih; bih.biBitCount=bitmap.bmBitsPixel; bih.biClrImportant=0; bih.biClrUsed=0; bih.biCompression=0; bih.biHeight=bitmap.bmHeight;/位图高度 bih.biPlanes=1; bih.biSize=sizeof(BITMAPINFOHEADER); bih.biSizeImage=size; bih.biWidth=bitmap.bmWidth;/位图大小 bih.biXPelsPerMeter=0;/位图宽度 bih.biYPelsPerMeter=0; GetDIB

9、its(dc,bm,0,bih.biHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);在窗口体中实现OnReceive方法用来接收客户端发送的命令并执行,该方法由CSocket类的子类CTCPClientSocket来调用,实现代码如下:void CServerDlg:OnReceive(CSocket * socket, int nErrorCode ) char buffer255; int len = socket-Receive(buffer,255);/接收数据,并返回实现接受数据的长度 bufferlen = 0;/添加结束符 swi

10、tch (*buffer) case D: SendBitData(socket);/发送图像数据 break; case M: SendBitmap(socket);/发送位图结构 break; default: AfxMessageBox(buffer); 在OnReceive方法中分别调用SendBitData方法和SendBitmap方法,用来发送可组成图像的信息,代码如下:void CServerDlg:SendBitData(CSocket *socket) char *data = bmpdata;/指向图片数据的指针 int sendlen=0;/ 实际发送长度 int len

11、 = 0;/发送总长度 do sendlen = socket-Send(data,size);/发送数据 len += sendlen; data += sendlen; while(lenSend(&bitmap,sizeof(BITMAP);新建一个基于对话框的项目,命名为Screen(客户端)。在窗口体中增加两个按钮控件和一个picture控件。在窗口体中实现GetScreen方法用于向服务器发送命令,并接受数据。实现代码:void CScreenDlg:GetScreen() char *buffer = M;/命令M获取BITMAP结构 clientsocket.Send(buff

12、er,strlen(buffer); clientsocket.Receive(&bitmap,sizeof(BITMAP); size = bitmap.bmWidthBytes * bitmap.bmHeight; bmpdata = new charsize;/指定存储图像数据缓冲区 char * data = bmpdata; int len,receivelen; len = receivelen = 0; buffer = D; clientsocket.Send(buffer,strlen(buffer); do receivelen = clientsocket.Receive

13、(data,size); len += receivelen; data += receivelen; while(lenStretchBlt(0,0,rect.Width(),rect.Height(),&bmpdc,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);在窗口中单击“开始获取”按钮,将开始和停止窗体OnTimer消息事件的运行,用来不断的获取图像信息并绘制,实现代码如下:void CScreenDlg:OnStart() clientsocket.Create(); run = false; bool ret = clientsocket.

14、Connect(127.0.0.1,1033); if (!ret) return; this-SetTimer(0,1000,NULL);/运行OnTimer事件void CScreenDlg:OnStop() this-KillTimer(0); clientsocket.ShutDown(2);/停止OnTimer事件 clientsocket.Close();void CScreenDlg:OnTimer(UINT nIDEvent) if (nIDEvent != 0) return; if (run) return; run = true; GetScreen();/获取远程屏幕信

15、息并绘制 run = false; CDialog:OnTimer(nIDEvent);程序源代码:服务器类:class CAboutDlg : public CDialogpublic: CAboutDlg(); enum IDD = IDD_ABOUTBOX ;protected: virtual void DoDataExchange(CDataExchange* pDX); protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchang

16、e(CDataExchange* pDX) CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CServerDlg:CServerDlg(CWnd* pParent /*=NULL*/) : CDialog(CServerDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CServerDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExc

17、hange(pDX);BEGIN_MESSAGE_MAP(CServerDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() END_MESSAGE_MAP()BOOL CServerDlg:OnInitDialog() CDialog:OnInitDialog(); ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING,

18、 IDM_ABOUTBOX, strAboutMenu); SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon bool ret = false; serversocket.SetServerEvent(this); ret = serversocket.Create(1033); ret = serversocket.Listen(); return TRUE; / return TRUE unless you set the focus to a controlvoid CServ

19、erDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); void CServerDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHd

20、c(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); HCURSOR CServerDlg:OnQueryDragIcon() r

21、eturn (HCURSOR) m_hIcon;void CServerDlg:SendBitData(CSocket *socket) char *data = bmpdata; int sendlen=0; int len = 0; do sendlen = socket-Send(data,size); len += sendlen; data += sendlen; while(lenSend(&bitmap,sizeof(BITMAP);void CServerDlg:OnReceive(CSocket * socket, int nErrorCode ) char buffer25

22、5; int len = socket-Receive(buffer,255); bufferlen = 0; switch (*buffer) case D: SendBitData(socket); break; case M: SendBitmap(socket); break; default: AfxMessageBox(buffer); void CServerDlg:GetScreen() CDC dc,bmpdc; int width,height; dc.CreateDC(DISPLAY,NULL,NULL,NULL); CBitmap bm; width = GetSyst

23、emMetrics(SM_CXSCREEN); height = GetSystemMetrics(SM_CYSCREEN); bm.CreateCompatibleBitmap(&dc, width, height); bmpdc.CreateCompatibleDC(&dc); bmpdc.SelectObject(&bm); bmpdc.BitBlt(0,0,width,height,&dc,0,0,SRCCOPY); bm.GetBitmap(&bitmap); size = bitmap.bmWidthBytes * bitmap.bmHeight; bmpdata = new ch

24、arsize; BITMAPINFOHEADER bih; bih.biBitCount=bitmap.bmBitsPixel; bih.biClrImportant=0; bih.biClrUsed=0; bih.biCompression=0; bih.biHeight=bitmap.bmHeight; bih.biPlanes=1; bih.biSize=sizeof(BITMAPINFOHEADER); bih.biSizeImage=size; bih.biWidth=bitmap.bmWidth; bih.biXPelsPerMeter=0; bih.biYPelsPerMeter

25、=0; GetDIBits(dc,bm,0,bih.biHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);class CServerApp : public CWinApppublic: CServerApp(); public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP();class CServerDlg : public CDialog,CTCPServerEventprotected: BITMAP bitmap; int size; char * bmpdata; void GetScreen();protected: void SendBitData(CSocket *socket); void SendBitmap(CSocket *socket);public: CTCPServerSocket serversocket; CServerDlg(CWnd* pParent = NULL); / standard constructor virtual void OnReceive(CSocket * socket, int nErrorCode ); enum IDD = IDD_SERVER_DIALOG ; protected:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1