远程监控软件的设计_第1页
远程监控软件的设计_第2页
远程监控软件的设计_第3页
远程监控软件的设计_第4页
远程监控软件的设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、 编 号: 审定成绩: 毕业设计(论文)设计(论文)题目:远程监控软件设计摘 要随着网络技术以及通信网络的设备快速发展,日常办公越来越不仅仅局限于办公室,因而远程监控软件也越来越受到人们的重视。计算机远程监控技术是计算机系统管理人员将本机与目标机相连从而实现管理控制。不但突破了空间的限制,能够允许使用者无需亲临现场就能实现远程办公,提高效率。本软件是基于Windows编程的远程监控软件,整体结构为客户及服务器模式。通过将Socket建立在OSI网络中第四层中的面向连接协议的基础上,进行客户机与服务器间信息的传输。客户端与服务器分别安装在监控者的计算机中与被监控对象的计算机中,通过远程指令,实现

2、对远程计算机的监视与控制。整个软件占用计算机资源较少,通过定时器实现实时监控、鼠标、键盘的模拟以及记录被监控者的使用痕迹。实现了远程执行相应控制功能,并且有着良好的操作界面。本系统从前期的功能构想、界面设计、代码编写以及后来的测试与实现,均按照标准软件设计思路进行。【关键词】Socket Windows编程远程控制 实时监控 C/S模式ABSTRACTWith the development of network technology and communication network equipment, the daily work is not limited to the office

3、. More and more attention has been paid to remote monitoring software. Remote monitoring technology is a computer system that management connected the local computer to the target computer so that we can achieve remote control. In doing this can not only broke through the limitations of space, but t

4、o allow the user to achieve remote work and improve efficiency without going to office. This software is based on Windows programming remote monitoring software. The overall architecture is Client and Server mode. Use Socket in transmission layer of the TCP protocol for the transmission of informati

5、on between client and server. The client and server were installed in the monitoring computer and the computer to be monitored by remote command, monitoring and control of the remote computer. The entire software takes up less computer resources, set timer to achieve real-time monitor and emulate mo

6、use and keyboard activities and record users trial. Succeed in remote executing of the corresponding control functions, and has a good user interface. The system features from the early connection, interface design, coding, testing and subsequent implementation are carried out in accordance with sta

7、ndard software design ideas. 【Key words】Socket Windows programming real-time monitor C/S mode目 录前 言.1第一章 远程监控软件概述2第一节 远程监控软件发展历史及趋势2第二节 课题研究目的及意义2第三节 课题研究主要内容2第二章 远程监控软件系统分析4第一节 系统功能分析4第二节 系统软件模型4第三节 系统的开发平台5一、VC+介绍5第三章 客户端详细设计与实现7第一节 客户端功能及模块简介7一、客户端功能简介7二、客户端模块划分7第二节 客户端主要应用技术8一、屏幕分隔技术8二、图像压缩技术12第

8、三节 客户端界面及程序设计详解13一、客户端主窗口设计与实现13二、连接服务器功能设计与实现14三、指令传输功能设计与实现18四、屏幕监控功能设计与实现19五、聊天功能设计与实现20六、远程控制功能设计与实现21第四章 服务器端功能及模块简介24第一节 服务器端简介24一、功能简介24二、服务器端功能模块划分24第二节 服务器主要设计思路25第三节 服器部分模块设计与实现26一、连接模块设计与实现26二、指令接收并响应模块设计与实现28三、屏幕信息发送模块设计与实现29四、聊天模块设计与实现29第五章 测试30第一节 白盒测试30一、测试环境配置30二、正确性测试30第二节 黑盒测试31一、测

9、试环境配置31二、功能性测试31三、容错性测试31四、性能与效率测试31五、易用性测试32结 论33致 谢34参考文献35附 录36一、英文原文36二、英文翻译:42 - 49 -前 言在计算机网络快速发展的今天,网络已经深入到世界各个角落。计算机网络按照覆盖范围划分也出现了广域网、城域网、局域网等。在各大企业、高校和政府等部门内部都建立了各自的局域网络。面对局域网络中众多的联网计算机,对部门管理人员,要及时有效又不打扰他人的与每台计算机前的工作人员沟通交流,文件传输共享和监管控制,是很大的工作量;对网络维护者,每台计算机都需要亲自维护,既浪费时间,工作效率也低;对员工,许多公事只能在办公室完

10、成,在突发情况下无法及时处理,也是部门的一大损失。因此迫切的希望能对整个网络上的计算机实现远程控制操作、文件操作、同时还能实时监控计算机的运行状态,员工的工作状态,杜绝办公室中不允许的事件发生。对于工业环境中有些特殊地点不适合工作人员长时间停留或者对于有些机器设备需要时时监测各项运行状态等的硬性要求,大量的将人力放在这些方面必将增加企业运行成本,降低工作效率。因此,不论在现代化的办公室内还是在工业控制领域,一个合适的远程监控软件是十分重要的,同时也对未来的办公模式与工业控制模式提出了新的方向。第一章 远程监控软件概述第一节 远程监控软件发展历史及趋势随着网络技术的快速发展,监控技术由原来的单机

11、监控发展到后来的网络监控。监控对象的范围逐步扩大,监控软件的功能也愈加丰富,界面也愈加人性化、简易化。远程监控系统软件发展到今天可以说经历了三个时期:初期阶段是面向一台被监控机器,即对独立的当前所布控的电脑或大型设备实行监视控治。该监控是独立的、非共享的,所得到的监控信息只能在监控者处查看并使用;中期则是在监控范围上有所扩大。如在一个厂房或机房中,通过增加多个监控传感器或多条双绞线连入一个小型的内部局域网,即在一台计算机上监控连入该机的所有计算机或设备;现行时期是大范围远程性的监控。当今,最理想最实用的模式应为一对多,即一台控制机可以控制多台电脑,在控制端能够监控联入监控网内的PC,即显示全部

12、电脑目录,能够进行远程桌面协助,远程管理控制等功能。这样做将带来极大的方便。随着物联网的快速发展,监控的对象将不再局限于固定的设备,而是任一经过验证接入网络的设备。对这些设备的正确监管控制,无论在生活上还是工作上都将会为我们产生极大地便利。第二节 课题研究目的及意义加深了解计算机网络知识,通过动手编程将理论知识与实践相结合。通过课程中学过的网络编程为基础,进一步了解 PC机的进程机制原理及调度过程以及网络传输过程中所涉及到的TCP/IP协议以及套接字编程原理。第三节 课题研究主要内容使用Socket网络编程技术以及C程序开发语言。实现老师布置题目中所要求的基本功能以及部分扩展功能,软件用户界面

13、明了易操作。完全符合软件开发所要遵循的规则要求。 要求: 学习并会用VC+软件开发平台。 编写一个简单的远程监控软件,实现局域网内由一台电脑远程控制另一台电脑的功能。 基于C/S模式架构。第二章 远程监控软件系统分析第一节 系统功能分析该系统设计由客户机与服务器两部分应用程序构成。使用时,需要将两部分软件同时开启才能实现具体功能,具体操作步骤如下:第一步,服务器端运行Server程序,将服务器端口置于监听状态,该端口可以设置为5000以后的任一端口;将端口与IP绑定后,被控计算机处于等待监听状态。第二步,客户机运行Client程序,输入服务器端IP与预先设定的端口号,点击连接在Internet

14、中搜索拥有指定IP的用户电脑。第三步,当客户端成功遍历到所要连接的计算机时,客户端应用部分就会通过预设定的端口号与服务器端进行信息通信,请求建立连接(本设计使用TCP连接协议)。如果服务器端应用程序已经开启对预设端口的监听并且收到请求,那么两者之间的通信在经过3次握手即正式建立。第二节 系统软件模型本系统采用典型的客户机服务器的架构,由Server(服务端应用程序)与Client(客户端应用程序)两部分构成,通信调度如图1.1:图1.1系统结构对客户端的设计,遵循面向对象的设计思想,用户界面明了,易操作;服务器部分由于设计要求,在创建后即对其最小化,只在需要的时候将其打开。详尽的设计过程将在下

15、面章节进行介绍。第三节 系统的开发平台一、VC+介绍Microsoft Visual C+ 6.0是微软公司开发的基于C/C+的集成开发工具,它也是Visual Studio中功能最为强大、代码效率最高的开发工具。利用Visual C+6.0可以以两种方式编写Win32应用程序,一种是基于Windows API函数C语言编程方式,另一种是基于MFC(微软基本类库)的C+编程方式【1】。采用C语言进行代码开发已经有了一段时间,该方法经过不断的改进与更新,具有比较好的编译器,能够提高代码的执行效率,但由于版本的问题,其开发方法具有一定的局限性,并且开发起来也比较难。C+编程方式在能够保证运行效率的

16、同时,在开发难度方面也比较适中。两者结合在一起,如果能充分发挥各自的优势,那么对整个工程而言,可以在很大程度上提高工作效率、减少工作量。Windows编程是一种新的编程方式,在程序的消息响应、资源的调度、程序的调试、运行,都与原先的DOS系统的程序开发存在差异。DOS程序是只能够单个线程管理、线程内与前后线程是顺序关系,程序所占用的资源只有在程序结束时才会释放,对于I/O完全由程序本身控制。Windows支持多线程管理、分时响应、消息循环机制。在程序运行时,系统资源仍然能够被其他进程所调度,实现资源共享、其输入和输出必须通过Windows的输入/输出功能实现。基于以上原因,本软件整个编程过程采

17、用C与C+综合进行编程。整体远程监控系统模块图如下图1.2所示:图1.2系统模块第三章 客户端详细设计与实现本单元主要介绍客户端程序界面及其各个功能模块的设计。第一节 客户端功能及模块简介一、客户端功能简介本模块所具有的功能为:输入启动服务器程序计算机的IP地址并与其连接;能够远程关机/重新启动计算机;远程监视被控电脑,实现实时监控目的;能够与被控电脑间进行消息传递,及时沟通交流。二、客户端模块划分根据题目设计要求,客户端由六个模块组成,分别是:主程序模块、连接服务器模块、屏幕监视模块、聊天模块、远程控制模块以及指令传输模块。各个功能部分结构将在下面进行概述:主程序模块:该部分主要负责接收窗口

18、消息以及将不同的消息送至相应的处理函数。提供客户端程序的界面、菜单、按钮和相关对话框的显示与关闭。连接服务器模块:该模块即输入对方IP地址与预设端口号,搜索网络中与输入IP相对应的计算机。如果目标计算机开启服务器程序并建立服务器,则进行连接。屏幕监控模块:该部分用于实时监控被控计算机的屏幕并远程显示。聊天模块:用于在有需要时,及时将消息与命令发送到相关人员计算机中。远程控制模块:能够设定远程关机。指令传输模块:传输鼠标、键盘、栅格等消息。各功能部分结构之间的内部联系如图3.1所示:图3.1模块内部关系第二节 客户端主要应用技术图像处理是整个系统效率的核心,它决定系统响应的快慢以及资源占用的多少

19、,因此该模块的设计是整个软件设计的关键。为解决该问题,本设计采用两个步骤进行,首先利用屏幕分格技术将屏幕划分为多个网格区域,然后进行屏幕图像采集并与之前的图像比较,相同的部分删去,不同的部分留下。然后将留下的网格位图进行压缩,将压缩后的图像进行传输即可。一、屏幕分隔技术在图像传输中,服务器截屏之后并不需要将整个屏幕的内容都发送到客户端,因为截取的图像为DIB格式,全部发送会产生很大的发送数据,屏幕监视过程中会感受到比较明显的延迟。因此采用的办法是将屏幕进行区域划分。屏幕的刷新是以划分后的区域块进行的,只需要将对比后产生不同的屏幕区域发送到客户端。该方法是针对直接传输所采集到BMP格式的位图数据

20、。也可以不采用分格方式。当然,这仅仅是在讨论的范围内。比如可以使用JPEG和JPEG2000等比较成熟的图像压缩技术,将整个屏幕图像进行压缩。以分辨率为1024*768,16位色的屏幕来说,将压缩比设置在1%以下,压缩后的JPEG图像大小在100KB左右。但是屏幕图像的前后具有较高的关联性,利用此特点,在首次发送整个屏幕图像后,其后只需发送变化部分图像,并且采用16或256位色显示屏幕信息同样可以大大减少发送的数据量。获取了屏幕位图后,除了需要按照设置来分隔网格,还需要对位图格式进行转换。以下将介绍本设计所涉及到的位图的有关内容。BMP(Bitmap-File)位图文件是微软操作系统中的一种图

21、形文件格式,现行Windows平台下的图形处理软件均能够对位图文件做出理。在Windows平台中可以说其是所有图像处理的基础。位图文件根据与设备的相关性分为设备属性有关联性位图DDB(device-dependent bitmap)格式与设备属性无关联性位图DIB(device independent bitmap)格式(注:现行系统中仍然存在DDB格式,但选择保存位图格式的图片时,建议使用与设备无关格式存储),目的在于提高可移植性,能够在其他设备中显示。因此才对采集到的位图数据进行无关化处理,并对无关位图的变化部分进行传输。BMP位图默认的后缀是.BMP或者.bmp。位图文件由四部分构成。其

22、所包含的文件以及结构名称和表示符号如下表所示的。表3.1位图文件构成位图文件的组成结构名称符号位图文件头 (bitmap-file header)BITMAPFILEHEADERbmfh位图信息头 (bitmap-info header)BITMAPFILEHEADERBmih彩色表(color table)RGBQUADaColors图像数据阵列字节BYTEaBitmapBits构成分析:位图文件头包含有关于位图的类别、位图所占内存、位图存储地址等信息。位图信息由位图信息头(bitmap-information header)和彩色表(color table)组成,前者用BITMAPINFO

23、RHEADER结构定义,后者用RGBQUAD结构定义。BITMAPINFOHEADER结构体有三个成员变量,分为bitmap size、compression type和color type。存储在彩色表之后的字节块为实际位图部分。在扫描图像时,每一扫描行均是该行所划分每个小区域的16进制数值,位图的每一行所占内存的大小取决于描述该图所需的颜色数以及用最小图形描述的每行长度(即位图宽)。扫描行的存储是从下往上开始的,即从屏幕左下角开始,屏幕右上角作为最后一个存储点。由于在传输过程中的数据是DIB变化区域的图像信息,因此,在获得新的位图后,首先需要对最近两次获得的位图信息头大小进行比较,如果长度

24、相同,放弃处理,否则再进行区域比对,产生出变化的部分,形成新的位图图像,再进行发送。客户端接到新的DIB图像信息后,将收到的数据加到上一个网格图像形成新的图像,显示于视图中。核心代码如下:/服务器端/ 比较区域DIBS之前和之后的变化if (pGdiNode->Gdi.fDIBitmap)dwLen1 = pGdiNode->Gdi.dwLen;dwBitMapHeader1 = pGdiNode->Gdi.dwBitMapHeader;pDIBitmap1 = pGdiNode->Gdi.pDIBitmap;pDIB1 = pGdiNode->Gdi.pDIB;

25、fChange1 = pGdiNode->Gdi.fChange;/ 每次4个字节的比较两副位图,要跳过位图的头部_asmMOV ECX,dwLen1 /将图的长度存入寄存器SUB ECX,dwBitMapHeader1 /跳过位图头部SHR ECX,2 /右移2位相当于缓存长度除以4的商MOV EDX,dwBitMapHeader1 /把位图头存到寄存器MOV ESI,pDIBitmap1 /把pDIBitmap1存到寄存器ADD ESI,EDX /求和存入到寄存器MOV EDI,pDIB1 /把pDIB1存入到寄存器ADD EDI,EDX /求和存入REP CMPSD /ESI与ED

26、I每次4个字节的比较两幅位图JNZ SetFlagRegion1 /不等于0则跳转MOV fChange1,FALSE /把FALSE存入fChange1JMP ExitRegion1 /跳转SetFlagRegion1:MOV fChange1,TRUE /把TRUE存入fChange1ExitRegion1:客户端:/形成新的数据图像pTempDIB = pGdiNode->Gdi.pDIBitmap; /将获得的位图存入临时位图中pDIB = pGdiNode->Gdi.pDIB; _asmMOV ECX,iNewLen /新图长度存入寄存器SHR ECX,2 /右移两位/除

27、4算循环次数MOV EDI,pTempDIB /新图形数据存入ADD EDI,iStartPos /加起始点MOV ESI,pDIB /把pDIB存入寄存器Addition:LODSD /读显存到EAXADD EDI,EAX /图像增量ADD EDI,4 /EDI加4,为下一循环做准备DEC ECX /自减1JNZ Addition /非0跳转网格内的系列数据联系在一起需要链表。整个图像处理流程如下图所示:图3.2图像处理流程二、图像压缩技术网络传输最令人关注的是影响传输质量的网络延迟,而造成延迟的一部分原因在于传输的数据量的大小,因此对于数据信息能够简化处理则尽量进行简化。通过分析,服务器端

28、向客户端发送的必要的数据有:屏幕分辨率大小、屏幕颜色深度、屏幕实际像素点数。其中屏幕实际像素点数即我们所发送的具有大量数据的信息,需要将其压缩。对此,可以选取以下几种可行的编/解码算法。 霍夫曼编码压缩霍夫曼编码是一种编码方式,属于无损压缩编码。Huffman于1952年创作该编码方法,霍夫曼编码所使用的编码针对不同的信息其长度也不同,对于在所描述的信息中,使用短的编码代表使用频率高的信息;使用频率低的信息,使用长的编码进行表示。这样,通过上述法则进行信息描述能够节省较大的内存空间。如:有一个原始数据序列,ABCDAA则编码为A(1),B(10),C(111),D(110),压缩后为11011

29、111011。霍夫曼编码一般会对信息进行两次读取,第一次读取得到所需编码的字节,第二次读取进行编码。实际上该编码构造了一个码树,从最下层开始到最上层结束。 JPEG(联合摄影专家组 Joint Photographic Experts Group)JPEG标准独立于其他压缩标准,它的编码方法无法与其他编码方法进行兼容,在它最常用的模式中,它允许失真,因此通过JPEG恢复产生的图片与原始图像之间具有一定差距,但有其重建后的图像往往在效果上能够有所改善。JPEG的另一个特点是其所具有的高压缩比,压缩后所占内存大小,可以约为原始大小的1%到8090%不等。这种方法在所占空间与质量上均能得到较好的结果

30、,适合多媒体系统。本系统采用的是霍夫曼编码算法。由于编码/解码的效率决定了发送前后所需等待的时间,而该时间与其它部分所耗费的时间相比是很大的一部分,因此这部分代码采用低级汇编语言来实现。第三节 客户端界面及程序设计详解一、客户端主窗口设计与实现客户端的主窗口,负责提供菜单按钮与视图显示,其整体界面如下图3.3所示:本窗口的主要类及类成员和主要函数有以下几部分: CMainWnd 类 CMainWnd类是客户端的主窗口,派生自MainWnd,它负责处理程序的菜单命令。CMainWnd类包括以下主要的成员函数:BOOLOnCreate(HWND hWnd,CREATESTRUCT FAR* lpC

31、reateStruct);/显示界面voidOnPaint(HWND hWnd);/绘制屏幕监控图像voidGetScreen();/得到新的屏幕数据voidOnSize(HWND hWnd,UINT state,int cx,int cy);/设置尺寸 主要函数有BOOL CALLBACK ConfigDlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);/功能选择对话框处理过程BOOL CALLBACK ConfigDlgtimeProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM

32、 lParam);/远程关机对话框处理过程DWORD WINAPI CaptureThreadProc(LPVOID lpParameter);/开启聊天线程二、连接服务器功能设计与实现 本模块用于输入目标服务器IP与端口号并进行搜寻,调用套接字与服务器连接。客户端连接服务器窗口界面如图3.4连接模块所示图3.4连接模块本模块主要使用CServerIP对话框类,其类成员如下:BOOLOnInitDialog(HWND hDlg,HWND hwndFocus, LPARAM lParam);/初始化对话框并显示voidOnCommand(HWND hDlg,int iId,HWND hWndCt

33、l,UINT iCodeNotify);/处理连接,取消等按钮所产生的消息以及获取编辑框中所键入的内容当点击对话框中的确定按钮后,进入Client.c 文件的LoadWinSock函数进行与服务器的连接。连接过程中所使用的主要技术是Socket接口的使用,以下是对其的详细介绍:世纪八十年代的时候,由美国政府的一个研究机构提供资金,提出让加利福尼亚大学分校在开源的PC系统下实现相关的TCP/IP网络协议。在协议开发过程中,技术开发工作者为该协议的通信设计出一个Application Port(API)。该接口就称之为套接字接口。在当前的网络开发环境中,套接字接口是TCP/IP网络通信接口中无论是

34、在使用次数上还是在范围上都占有很大一部分比例的通信接口,也是在因特网上开发维护者认为十分有用的Application Port。实际上,Socket在通信过程中提供了一个信息发送与接收过程的载体。通过预设好的端口,该计算机可以和其他设定好相同Socket端口的计算机通信。当在一台计算机中建立了套接字,那么该套接字就对应有其独立的句柄。计算机会为每个正在使用中的套接字建立相应的连接机制,在整个通信过程中,数据交换都是通过与设的套接口进行交换的。应用程序对信息的发送与接收均是使用所创建的Socket进行的。在应用开发中与使用文件句柄一样,可以对Socket句柄进行读写操作【12】。本设计的套接字的

35、调用:要调用套接字的前提是客户端与服务器以同时开启,客户机首先调用WSASocket()函数建立套接字,建立完成后用bind()函数将套接字地址(包括客户端的IP地址和服务器端口地址)与创建的套接字编号进行绑定,即对所创建的套接字命名。然后调用connect()函数对服务器发出连接请求。连接成功后,双方通过send()与recv()函数进行数据收发。当客户端或服务器中的任一方发出关闭指令后,双方调用关闭套接字函数结束信息的传递。整体调用顺序如图3.5所示图3.5函数顺序所涉及到的函数的详解: WSASocket创建套接字其调用的具体格式为:WSASocket( int af , int typ

36、e , int protocol , LPWSAPROTOCOL_INFO lpProtocolInfo ,GROUP g , DWORD dwFlags )【】;该函数中有6个参数。参数af :对地址的描述方法做出限定。当前只能使用AF_INET描述方法,也就是ARPA Internet地址描述方法。type:新套接口的类型描述,即描述套接字是流式还是数据式套接字。protocol:套接字所使用的特定协议,如果调用者不愿指定协议则定为0。lpProtocollnfo:一个指向PROTOCOL_INFO结构的指针,该结构定义所创建套接口的特性,如果为0,则前三个参数被忽略。g :预留给可能接入

37、的Socket。套接口组的表示符。iFlags:所创建的套接字的属性。根据以上参数的描述,按照自己的要求进行配置。创建成功后返回套接字号。本设计采用如下设置:sClient=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,SOCK_STREAM);if (sClient = INVALID_SOCKET)return 1;/函数调用成功则返回套接字句柄,失败则退出。 绑定地址该部分通过从目标IP设置对话框中获取服务器地址与端口号,并将其赋值给套接字中的server结构体。本设计采用如下设置:server.sin_family = AF_INET;

38、server.sin_port = htons(port);server.sin_addr.s_addr = inet_addr(szIP); connect()-套接字的连接其调用的具体格式为:int connect (int sockfd , struct sockaddr * serv_addr , int addrlen );该函数共有3个参数:sockfd ,serv_addr ,addrlen。参数sockfd:所创建的socket句柄。参数serv_addr:指向socket地址结构体的指针,该结构体拥有的变量为目的端口和IP地址。参数addrlen:结构体地址所占的内存大小,可

39、以通过sizeof(struct sockaddr)获得。调用成功则返回0。本设计采用如下设置:if (connect(sClient,(struct sockaddr *)&server,sizeof(server) = SOCKET_ERROR)memset(szString,'0',sizeof(szString);sprintf(szString,"Connect() failed: %d",WSAGetLastError();MessageBox(NULL,szString,"Client Socket Error",M

40、B_OK);return 1; Write()、read()写、读套接字函数的功能是对套接字中的内存地址进行内容的读写。自定义的函数为以下形式:int write(int fd , char *buffer , int length);int read(int fd,char *buffer , int length);三、指令传输功能设计与实现指令传输功能用于发送鼠标、键盘、网格分块等消息指令。其主要通过send()和recv()两个函数进行指令的发送与接收。因为指令传输是与图片传输可能同时进行,需要对两者之间做一个区分,故本设计采用如下设置:int SendCommand(HWND hWn

41、d,int iParm,char *szWMMessage)intiSent;if (iParm = 0)UpdateRegionalScreen(hWnd,sClient,FALSE);/更新屏幕信息else if (iParm = 1)iSent = Send(sClient,szWMMessage);/发送指令消息return 0; recv()与send()函数具有相同的三个参数,具体如下: 参数sockfd:已创建的socket句柄。 参数buf:映射到存储接收区或所发送数据区的地址指针,该长度由第三个参数决定。 参数flags:指定传输监控方式。当send()与recv()函数调用

42、成功,会返回发送或接收字节数。四、屏幕监控功能设计与实现客户端的主界面创建成功后,其客户区就用来显示服务器端用户使用状态的屏幕信息,具有实时性的特点。在实现远程监控的过程中,监控端在了解被控用户当前的使用状态时,可以采用以下两种方法。其一是通过将对方的操作行为记录成文本文档,然后通过套接字将其发送至监控端并存储;其二是截取被监控端电脑屏幕信息,形成位图文件,然后将其发送至控制端,控制端通过刷位图进行显示,实现远程监控的目的。第二种方法相对于第一种方法,更加直观、明了,因此采用第二种方法进行该功能的设计。监控窗口如下图3.6所示:图3.6监控窗口主要函数有:void InitGrids();/初

43、始化屏幕网格void GetResolution();/获取屏幕宽度、高度等信息void UpdateRegionalScreen(HWND hWnd,SOCKET sClient,BOOL fFirstTime);/更新屏幕信息并进行显示void CMainWnd:OnPaint(HWND hWnd);/绘制窗口BitBlt(hDC,0,0,iScreenWidth,iScreenHeight,m_hMemDC,iHScrollPos,-iVScrollPos,SRCCOPY);/位图显示Gdi.iGridX = iLoop;Gdi.iWidth1 = iLoop * iWidthX;Gdi

44、.iWidth2 = iLoop * iWidthX + iWidthX;/设置对角线上水平坐标Gdi.iGridY = iLoop;Gdi.iHeight1 = iLoop * iHeightY;Gdi.iHeight2 = iLoop * iHeightY + iHeightY;/设置对角线上的数值坐标五、聊天功能设计与实现聊天功能使用于及时交流客户端与服务器前用户的想法,或对被控端前用户提出警告或要求。因为聊天与屏幕监视可能同时运行,如果将聊天对话框设计成模态对话框,那将无法响应屏幕监视模块相应消息,会导致程序进入死锁。所以本设计中将聊天对话框设计成非模态对话框,这样聊天模块与屏幕监控模

45、块将共用同一消息队列,不同部分的消息则由IsDialogMessage()函数对其分别投递。聊天模块窗口设计如图3.7所示:图3.7聊天模块本模块的主要函数为:IsDialogMessage(Hdlg,&iMsg)/消息分拣CreateDialog(n_hInst,MAKEINTRESOURCE(IDD_DIALOG1),Hwnd,(DLGPROC)ColortalkDlgProc);/创建非模态对话框SendMessage(Hwnd,WM_Dialog1,0,0);/向主程序发送创建对话框线程消息SendMessage(Hwnd,WM_XIAOCHU1,0,0);/向主程序发送消息结

46、束聊天对话框消息void Onxiaochu()/销毁非模态对话框函数DestroyWindow(Hdlg);/销毁窗口Hdlg=NULL;delete Hdlg;/删除聊天室对话框句柄六、远程控制功能设计与实现客户端远程控制模块拥有两个对话框界面,一个是整体功能对话框界面,另一个是子窗口,响应远程关机功能对话框。其窗口设计如图3.8和3.9所示:图3.8整体功能对话框图3.9远程关机界面远程关机是通过定时器完成的,通过将设定时间与当前时间做减法运算,得到的时间换算成秒,定时对所剩余的时间进行查看,到时即运行shutdown()函数将被控计算机关闭。主要函数有:void CALLBACK Sh

47、owTime(HWND hwnd,UINT message,UINT uTimerID,DWORD dwTime);/远程关机定时器响应函数GetLocalTime(&Time);/获取本地时间NTime=Time.wHour*3600+Time.wMinute*60+Time.wSecond;/将当前时间换算成秒system("shutdown -s -t 30");/倒计时30秒后关机以上即客户端主要代码及窗口的实现。第四章 服务器端功能及模块简介第一节 服务器端简介一、功能简介本部分程序的主要功能有:响应客户端的连接请求并为每一个连接到服务器的用户创建一个独立

48、的线程;响应客户端要求的远程关机指令;将当前电脑的屏幕信息进行截取并送至监控端;能够与监控端进行聊天达到信息交互。二、服务器端功能模块划分本部分的功能模块与客户端划分大体相同:主程序模块、连接模块、指令接收并响应模块、屏幕信息发送模块、聊天模块。以下将描述各模块功能:主程序模块:负责建立服务器的窗口、菜单栏及整体的消息映射。连接模块:负责与请求接入的监控端进行连接,并为每个接入的用户创建独立线程。指令接收并响应模块:该部分用于接收来自监控端的用户指令,如要求更新屏幕信息,响应控制计算机的键盘鼠标的信息以及执行如远程关机的指令。屏幕信息发送模块:该部分模块通过实时对比所截取的屏幕信息,找到变化的

49、部分,将变化的部分形成一张新的位图并压缩发送至监控端。聊天模块:与监控端进行实时的信息交流。整体的模块图如图4.1所示:图4.1整体模块图第二节 服务器主要设计思路 为了满足一对多的设计思路,需要为每一位请求接入者创建一个线程。以下是多线程创建的核心代码:while (TRUE)/ 面对每个接入用户开启一个独立线程Socket1 = accept(Listen,(struct sockaddr *)&client,&iAddrSize);if (Socket1 != INVALID_SOCKET)/ 将每个接入用户的IP地址与窗口句柄进行复制,然后传入所开启的独立线程myStr

50、ucture.Socket = Socket1;myStructure.hWnd = hServerWnd;/找出客户端的IP地址memset(szClientIP,'0',sizeof(szClientIP);sprintf(szClientIP,"%s",inet_ntoa(client.sin_addr);strcpy(szClientIP1,szClientIP);hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&myStructure,0,&dwThreadId);/为每一个客户

51、端创建一个屏幕信息发送及系统响应信息线程if (hThread)/关闭线程句柄CloseHandle(hThread);第三节 服器部分模块设计与实现一、连接模块设计与实现服务器程序在服务器创建完成后,自动进入最小化,当需要时再将其显示。其创建服务器的过程为:系统首先调用socket创建函数创建套接字,然后用绑定函数将套接字地址与所创建的套接字描述符进行绑定。接下来调用listen()函数进行监听,当监听到连接请求时,调用accept()函数与其连接。套接字创建及调用流程如图4.2所示:图4.2服务器端socket流程在上述创建服务器所使用的套接字中,套接字创建函数与绑定函数已经有过阐述。现对

52、listen()函数与accept()函数进行介绍。listen()监听连接该函数用于监听来自网络中的请求接入信号,其函数的具体形式如下:int listen(int sockfd , int backlog ) ;参数sockfd:描述之前所创建的套接字句柄。参数backlog:连接请求队列的长度()一般由2到4。当连接成功返回值为0。失败则返回SOCKETERROR。本设计采用如下设置:listen(Listen,SOMAXCONN);accept()接受连接函数原型为:SOCKET accept(SOCKET socket , sockaddr *address , int *addrl

53、en);参数s:所建立的套接字句柄,用于代表对数据进行传载的描述符。参数address:指向数据缓冲地址的指针,用于映射到套接字所使用的内存地址。该参数的实际格式由套接口创建时所产生的地址确定。Addrlen:数据指针,与第二个参数共同使用,用于映射数据缓冲区所占大小的整数。函数调用成功返回一个套接字句柄,调用失败则返回无效的错误信息。二、指令接收并响应模块设计与实现该模块用于接收响应客户端发送过来的消息指令以及服务器端本身所产生的消息指令。如更细桌面信息、接收键盘、鼠标等指令以及响应相关的远程关机命令。具体设计思路如下代码所述:while(TRUE)CHECK_MSG:/ 是不是"REFRESH&q

温馨提示

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

评论

0/150

提交评论