VisualC++实现对计算机远程监控_第1页
VisualC++实现对计算机远程监控_第2页
VisualC++实现对计算机远程监控_第3页
VisualC++实现对计算机远程监控_第4页
VisualC++实现对计算机远程监控_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/16VisualC++实现对计算机远程监控键字:Socket套接字、服务器、客户端、远程监控在工程施工中经常遇到中心主控机房和工程现场相分离的情况,这就需要工程设计人员经常往返于中心机房与工程现场之间,有时甚至为了修改几个数据也要相关人员的现场操作才能解决。而且也不能很好的对工程现场进行实时的监测,这就为工程施工与系统的维护带来了极大的不便。现在局域网的技术已相当成熟,在中心机房和工程现场之间构建一个局域网也并不困难。所以我们可以在局域网的物理架构基础之上通过Socket套接字来实现计算机之间的通地监测、控制远在工程现方法进行简单的介绍。Socket路WindowsSockets规范定义了一个基于MicrosoftWindows的网络编程界面,它源于加里弗尼亚大学伯克利分校的伯克利软件发布(BSD)。它既包括熟悉的伯克利Socket风格的例程,也包括了一组Windows特有的扩展,序中最常用的一种模式就是客户/服务器模式。在这种框架中,客户应用程序n说,直到一个客户向服务器发出联接请求之前,服务器进程进2/16程是休眠的。收到请求时,服务器进程"醒来(wakeup)",完成客户请求的相。流无重复的顺序数据互独立的报文进行测试等。无连接服务器客户程序与服务程序之复杂,不是一来一去的3/16务器端程序设计实现位于中心机房的客户端来监控远程的服务器端,而根据前面介绍的面向连接套接字应用程序的工作方式,要求服务器必须先于客户端而运行。所以根据实际需要,我们应当让服务器程序能自启动。一般有三种向注册表的4/16//设定待添加的注册表的路径LPCTSTRRgspath="Software\\Microsoft\\Windows\\CurrentVersion\\Run";//获取系统路径GetSystemDirectory(SysPath,size);GetModuleFileName(NULL,CurrentPath,size);//把服务程序从当前位置拷贝到系统目录中entNameCurrentPathFileNewName=lstrcat(SysPath,"\\System_Server.exe");ret=CopyFile(FileCurrentName,FileNewName,TRUE);//打开键值ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,Rgspath,0,KEY_WRITE,ESS{}//设置键值ret=RegSetValueEx(hKEY,"System_Server",NULL,type,5/16{}//关闭键值ketcurrentormostrecent"backlog’’),可能的话,继续侦听到来的联接。下面是分的主要代码:wMajorVersion=MAJOR_VERSION;wMinorVersion=MINOR_VERSION;6/16ServerSock=socket(AF_INET,SOCK_STREAM,0);ifServerSock==INVALID_SOCKET)dstserver_addr.sin_family=PF_INET;dstserver_addr.sin_port=htons(7016);dstserver_addr.sin_addr.s_addr=INADDR_ANY;//BINDStatusbindServerSock,(structsockaddrfardstserveraddr,sizeof(dstserver_addr));us//LISTENtatuslistenServerSockus7/16SOCKETsstructsockaddrFAR*addr,intFAR*addrlen);该例程从在s (acceptedsocket)不应用于接受更多的联接。参数addr是一个返回参数,数addr的严格格式由进行通信的地CCEPT{ck}//获取屏幕大小SysWidth=GetSystemMetrics(SM_CXSCREEN);SysHeight=GetSystemMetrics(SM_CYSCREEN);8/16{Sockkck}{}{caseUSDESKTOPBIT幕图像9/16}voidvoidSendDesktop(){//创建桌面设备环境句柄hdcmy=CreateDC("DISPLAY",NULL,NULL,NULL);hbufferdc=CreateCompatibleDC(hdcmy);//创建位图hBit=CreateCompatibleBitmap(hdcmy,BitWidth,BitHeight);hOldBitmap=(HBITMAP)SelectObject(hbufferdc,hBit);StretchBlt(hbufferdc,0,0,BitWidth,BitHeight,hdcmy,0,0,SysWidth,SysHeight,SRCCOPY);hBit=(HBITMAP)SelectObject(hbufferdc,hOldBitmap);//DDBtoDIBhPal=(HPALETTE)GetStockObject(DEFAULT_PALETTE);//获取位图信息GetObject(bitmap,sizeof(bm),(LPSTR)&bm);//初始化位图信息头10/16DEResBitCountbmbmPlanesbmbmBitsPixelbibiHeightLPBYTENULLCOLORS{}ABLE11/16ElpbibibiSizencolorsNFOlpbiDWORDDIBRGBCOLORSEizesizeofbitSizeMSGOOBtMsgORDii{ZEsg}{sg}12/16}程序设计实现相比而言,客户端程序的网络通讯部分的实现较为简单,只需创建socketwVersionrequestedMAKEWORD//启动套接字WSAStartup(wVersionrequested,&wsaData);SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);在此,通过设置定时器来及时地把远程计算机的当前屏幕以位图数据的形式传到客户端,并显示在屏幕上,使维护人员能及时了解到远程计算机的工作状态。首先要用connect()先建立一个到对等端(peer)的联接。connect()函数主要用于创建到指定的外部关联的联接。如果socket尚未绑扎(unbound),则由系统为本地关联指定一个唯一值。注意如果名字结构的地址域(theaddressfieldofthenamestructure)为全0,connect()将返回错误对流式sockets(SOCK_STREAM类),将启动一个到使用名字(该13/16socket名字空间的一个地址)的外部主机的活动联接。当调用成功完成时,该socket已准备好发送/接收数据。下面是定时器消息响应函数的部分主要代码:clientSock=socket(AF_INET,SOCK_STREAM,0);if(clientSock<0)returnFALSE;//建立连接client.sin_family=PF_INET;client.sin_port=htons(7016);client.sin_addr.s_addr=inet_addr(client_address);msgsock=connect(clientSock,(structsockaddr*)&client,sizeof(client));ck//获取屏幕尺寸GetWindowRect(hWnd,&rect);BitWidth=rect.right-rect.left;BitHeightrectbottom-rect.top;recv(clientSock,(char*)&Flag,sizeof(Flag)+1,0);ifFlagUSFLAG){//发送消息KTOPBIT14/16rMsgsizeofMsgMSGOOBendBitHeightandWeidthWidthsizeofBitWidthMSGOOBeightsizeofBitHeightMSGOOB//接收数据GetDesktopBithWndntFlagtrue}//关闭套接字,释放数据closesocket(clientSock);//GetBitSizefFlagMSGOOB//锁定内存hDib=GlobalAlloc(GMEM_MOVEABLE,bitSize);p=(LPBYTE)GlobalLock(hDib);for(WORDi=0;i<bitSize/US_MAXSIZE;i++){E15/16FlagsizeofFlagMSGOOB}{ZE}//定义颜色intcolor=(1<<((LPBITMAPINFOHEADER)p2)->biBitCount);color=0;//显示StretchDIBits(hdc,0,0,rect.right,rect.bottom,0,0,LPBITMAPINFOHEADERp)->biWidth,LPBITMAPINFOHEADERp)->biHeight,(LPBYTE)p+(sizeof(BITMAPINFOHEADER)+color*sizeof(RGBQUAD)),(LPBITMAPINFO)p,DIB_RGB_COLORS,SRCCOPY);16/16不论是服务器还是客户端,对于数据的传输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论