毕业设计(论文)基于C#的远程控制管理设计.doc

上传人:仙人指路1688 文档编号:4027591 上传时间:2023-04-01 格式:DOC 页数:43 大小:974KB
返回 下载 相关 举报
毕业设计(论文)基于C#的远程控制管理设计.doc_第1页
第1页 / 共43页
毕业设计(论文)基于C#的远程控制管理设计.doc_第2页
第2页 / 共43页
毕业设计(论文)基于C#的远程控制管理设计.doc_第3页
第3页 / 共43页
毕业设计(论文)基于C#的远程控制管理设计.doc_第4页
第4页 / 共43页
毕业设计(论文)基于C#的远程控制管理设计.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《毕业设计(论文)基于C#的远程控制管理设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于C#的远程控制管理设计.doc(43页珍藏版)》请在三一办公上搜索。

1、学位论文摘要与正文内容提纲:1) 简述背景,提出问题,说明题目的意义与价值。2) 分析研究相关有理论、原理与技术。3) 提出理论方案与技术路线。4) 研究的工作与内容及创新5) 验证结论、性能指标。6) 结果与结论的理论与实际价值。*基于C#的远程控制管理设计摘 要1.xxx本程序是用Microsoft平台下的C#语言实现远程控制。C#是一种简单、现代、面向对象且类型安全的编程语言。本系统中,客户端使用的是C#的窗体应用程序,服务器端用的是服务应用程序。23在程序中,用套接字实现了远程信息交换,它的具体功能主要是文件上传和文件下载。在这之中,用TcpClient和TcpListener来完成远

2、程连接,服务器端打开一个端口监听来自网络中的信息流,客户端使用服务器端的IP和监听的端口号取得与服务器的连接。客户端使用TcpClient的对象来初始化NetWorkStream对象,从而实现对字节流的传送的接收操作;服务器端使用TcpListener的对象来初始化NetWorkStream对象,从而获得与客户端的网络流交换。本程序中客户端通过发送关机命令实现远程关闭服务器电脑;使用服务器的MAC地址实现远程唤醒服务器。客户端向服务器发送16次服务器的MAC地址,便能实现远程服务器的唤醒操作。在程序中使用键盘钩子(HOOK)模拟键盘、鼠标事件模拟鼠标。要实现桌面的远程控制,首先就是获取服务器的

3、屏幕,用类似于传送文件的方式把服务器屏幕图片流传送到客户端显示。在客户端用键盘钩子获取所有按键事件,能够屏蔽系统对键盘的响应(如按下Windows键,开始菜单不会弹出),只把按下的键的健值记录下来传送到服务器端;客户端获取鼠标是用鼠标事件获取,包括左右键的单双击及中键的滚动。服务器端获得客户端传送过来的键盘、鼠标事件后,用API实现模拟按键操作和模拟鼠标点击、滚动操作。从而达到客户端远程控制服务器端的目的。45关键字:套接字、键盘钩子、C/S结构、远程控制C#-Based Design Of The Remote Control and ManagementAbstract:This soft

4、ware use C# under MS platform to achiveve computer remote control.c# is a programming language that is simple,modern,object-oriented and type of security.In this system,client-side use Windows Form application and service-side use Windows Service application to achieve.In the program,Socket is used

5、to complete remote infomation exchange.Its specific function is upload a file or folder and download a file or folder.In Socket,two class TcpClient and TcpListener realize remote connect throw Internet, service-side open a port to listen the information form Internet,and client-side connect with the

6、 service-side by IP and port of server computer.Client-side use class TcpClient to initialize NetWorkStreams object,so that NetWorkStreams object can get send and get byte stream with service computer.Server-side use TcpListener to initialize NetWorkStreams object to complete the same work of Client

7、-side. In the program,client-side send Shut Down command to service-side and server computer close itself.Client-side use the MAC address of server computer to wake up server computer.Client-side send the MAC address 16 times to service-side and then server computer is waked up.In the remote control

8、 part,we use keyboard HOOK to simulate keyboard and use mouse event to simulate mouse operation.In order to achieve remote control,first we should get service-sides screen,and then we can translate it to client-side in the way like download file.When we use HOOK to simuate keyboard and mouse event t

9、o simulate to mouse,local system will not response,such as when we press the system key,the start menu will not open.We get local keyboard and mouse event and send it to service-side,then analyze the command and simulate them in server computer.Key Words:Socket、Keyboard HOOK、C/S、Remote Control目录第一章

10、前言11.1 课题背景11.2 课题意义11.3 研究内容11.4 论文结构2第二章 相关技术介绍42.1 .NET 框架42.2 C# 编程语言52.3 套接字(Socket接口)6第三章 系统分析与系统设计73.1 系统分析73.1.1 系统功能介绍73.1.2 系统流程图73.1.2 子模块流程图83.1.2.1 远程开关机83.1.2.2 文件的传送93.1.2.3 文件下载113.1.2.4 远程控制113.2 系统设计123.2.1 客户端设计123.2.1.1 登录窗体设计123.2.1.2 主界面设计123.2.1.3下载文件界面133.2.2 服务器端设计13第四章 客户端具

11、体实现154.1 用户登录154.1.1 实现登录154.1.2 为其它类提供登录接口164.2 主界面实现164.2.1 开关机实现164.2.1.1 远程唤醒164.2.1.2 远程关机174.2.2 远程控制174.2.3 发送文件194.2.3.1 传送单个文件194.2.3.2 对服务器传送文件夹214.2.4 下载文件224.2.4.1 下载单个文件224.2.4.2 下载文件夹23第五章 服务器端具体实现255.1 远程控制255.2 传送文件265.2.1 传送单个文件265.2.2 传送文件夹265.3 下载文件275.3.1 下载单个文件275.3.2 下载文件夹28第六章

12、 系统测试296.1 登录测试296.2 开关机测试296.2.1 远程关机测试296.2.2 远程唤醒测试306.3 远程控制测试306.4传送文件测试316.4.1 传送单个文件316.4.2 传单文件夹326.5 下载文件测试326.5.1下载单个文件326.5.2 下载文件夹33结论35致谢36参考文献37第1章 前 言1.1 课题背景C#出现十年来,许多C、C+以及VB程序员转投它的门下,这不仅是因为C#是一个致力于敏捷开发和快速应用程序开发的工具。在如今计算机硬件快速发展,速度已经不再是瓶颈的情况下,开发效率是人们追求的唯一目标。而C#就是顺应时代而产生的,它是一种简单、方便和快捷

13、的编程语言。与此同时,网络的飞速发展给人们带来了极大的方便。如今人们的日常生活越来越离不开网络,也越来越依赖网络。在目前,对于网络信息的传输,人们主要使用套接字编程来实现,C#中也可使用套接字编程。它通过编码的流在网络上传输信息,人们获得流之后又把它解码出来获得需要的信息。本课题就是在这样的环境之下应运而生的,它实现了信息在网络上的传输,客户端实时的控制服务器。1.2 课题意义本课题旨在方便人们的学习和工作,它能在客户端能过网络控制服务器,实现信息的实时交换,而服务器又不需要由人控制。在日常生活中,人们可以使用它在不同的办公地点来实现文件的传输,这可以节约时间在往返工作地点的路上。同时,如果需

14、要多台电脑进行同一项任务时,可以通过本地控制方便控制。扩展开来,本系统增加可以增加连接服务器数量,这样就可以对多台电脑实时的监控,这在管理上有一定的作用。1.3 研究内容为了实现本系统,论文做了以下几方面的研究。 1TCP/IP网络协议。本程序中通过TcpListener和TcpClient实现客户端和服务器的连接。2魔术包工具(Magic Packet)。魔术包是AMD公司开发的,它的多播(BroadCast)功能通过发送16MAC地址给“睡着”的电脑,网卡通过报警功能实现计算机的唤醒。3屏幕抓取技术。在实现远程控制的过程中,要实现实时的控制服务器,就需要抓取系统当前屏幕的图片。4键盘钩子。

15、也是在远程控制当中,客户端使用键盘钩子获得本地键盘的按键键值,同时可以对不同的按键进行相应的操作,并且阻止按键传向下一个应用程序。5Windows API。同样在远程控制的过程中,服务器端用API中的“user32.dll”实现鼠标和键盘的模拟操作。6套接字(Socket)。套接字是本系统实现的基础,在程序中,使用Socket编程实现数据在网络中传输。1.4 论文结构本毕业设计报告内容可以分为六个部分,分别是系统及相关技术介绍(第1、2、3章)、系统的实现(第4、5章)和系统的测试(第六章)。各章的主要内容安排如下。第1章:前言。介绍了本课题的来源、目的、意义,论文研究的内容和各章的安排。第2

16、章:相关技术介绍。本章介绍了.Net FrameWork、VS平台下的C#语言以及相关网络技术(TCP/IP协议的使用)。第3章:系统分析与系统设计。本章分析了系统各个模块的功能,也给出了系统各个模块的详细设计方案。对服务器和客户端的设计做了分别介绍。第4章:客户端具体实现Windows Form。本系统的客户端是用Windows实体应用程序实现的。在本章中对客户端的各个模块做了详细的介绍,并列出了核心代码。第5章:服务器端具体实现Windows Service。本系统的服务器端是用Windows服务应用程序实现的。服务器端只有一个事件处理模块,本章对它进行了具体讲解,也把它对客户端的每个请求

17、作出的相应响应进行了具体的分析。第6章:系统测试。本章对系统的主要功能进行了相应的测试工作,同时也对比较容易出错的地方进行了测试及说明。第2章 相关技术介绍本软件的开发采用C/S结构。在客户端是Windows Form的应用程序,服务器端是Windows Service的应用程序。客户端和服务器端都是用VS平台下的C#语言实现的。相对于其它开发语言而言,C#简单易学、界面操作方便(类似Visual Basic),同时又能实现C+一样强大的功能。因此选择它作为开发本软件的语言。开发本软件是选用的较新的VS2008,它的功能相当强大,也很好用。相对于VS2005而言,VS2008在做网页方面增加了

18、许多新的功能,如ASP.NET3.5、CTR Add-in Framework 、 Additional Enhancement等。这些新增功能相对于本程序来说影响并不大,因此不做具体介绍。2.1 .NET 框架.NET Framework 是Microsoft为开发应用程序而创建的一个富有革命性的新平台。上面这句话时.NET的定义,定义给我们两点启示。第一:它没有清楚的说明“在Windows操作系统上开发应用程序”。尽管.NET Framework 的 Microsoft 版本运行在 Windows操作系统上,但是.NET Framework也可以运行在其他操作系统上,例如开源的MONO就是

19、一个例子。MONO项目不仅可以运行在Windows系统上,也可以运行在 Linux, FreeBSD, Unix, Mac OS X和Solaris上。第二:.NET Framework 定义并没有限制应用程序的类型。这是因为本来就没有限制。.NET Framework 可以创建Windows 应用程序、Web 应用程序、Web 服务和其他各种类型的应用程序。.NET Framework 的设计方式保证它可以用于各种语言,例如:C#、C+、Visual Basic、Jscript,甚至一些旧的语言,如COBOL。为此,还推出了这些语言的.NET版本。所有这些语言都可以访问.NET Framew

20、ork,他们还可以彼此交互。C#开发人员可以使用Visual Basic程序员编写的代码,反之亦然。.NET Framework主要是为了实现下面的目标:1提供一致的面向对象的编程环境,而无论对象代码是在本地存储和执行还是在本地执行单在Internet上分布、或者是在远程执行。2提供将软件部署和版本控制冲突最小化的代码执行环境。3提供代码(包括由未知的或不完全受信的第三方创建的代码)安全的执行环境。第四:提供可消除脚本环境或解释环境性能的代码执行环境。第五:使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。第六:按照工业标准生成所有

21、通信,以确保基于.NET Framework的代码可与任何其他代码集成。2.2 C# 编程语言C#是用于创建运行在.NET公共语言运行库上应用程序的语言之一,它从C语言和C+语言演化而来,是Microsoft专门为使用.NET平台而创建的,并且考虑了其他语言的许多优点,例如Visual Basic的易用性。C#本身是面向对象的语言,C#还进一步提供了对面向组件(Component Oriented)编程的支持。现代软件设计日益依赖于自包含和自描述功能包形式的软件组件。这种组件的关键在于,它们通过属性(Property)、方法(Method)和事件(Event)来提供编程模型并且还提供了关于组件

22、的声明信息的属性(Attribute),并且还编入了自己的文档。C#提供的语言构造直接支持这些概念,这使得C#语言自然而然成为创建和使用软件组件的首选。C#具有几个非常优秀的用于构造健壮和持久应用程序的特性,如下所示:1垃圾回收将自动回收不再使用的对象所占用的内存。2异常处理提供了结构化和可扩展的错误检测和恢复方法。3类型安全的语言设计则避免了读取未初始化的变量、数组索引超出边界或执行未经检查的类型强制转换等情形。此外,C#还提供具统一的类型系统,所有C#类型(包括int和string之类的基础数据类型)都继承自一个唯一的基类型:Object。因此,所有类型都共享一组通用的操作,并且任何类型的

23、值都能以一致的方式进行存储、传递和操作。另外,C#同时支持用户定义的引用类型和值类型,既允许对象的动态分析,也允许轻量的内联存储。为了确保C#程序和库能够以兼容的方式逐步演进,C#的设计充分强调了版本控制。许多语言都不太重视这一点,导致采用那些语言编写的程序常常因为其所信赖的库的更新而无法正常工作。C#的设计在某些方面直接考虑到了版本控制的需要,其中包括单独使用的virtual和override修改、方法重载决定规则以及对显式接口成员声明的支持。2.3 套接字(Socket接口)套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请

24、求。 Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因202.120.127.201 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入http:/202.120.127.201,也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开

25、另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入http:/202.120.127.201时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。第3章 系统分析与系统设计3.1 系统分析3.1.1 系统功能介绍本系统旨在完成两台主机之间的通信。客户端能够从服务器上下载文件、上传文件、控制服务器的开关机和对服务器的远程实时控制。打开客户端应用程序之后,用户通过服务器的I

26、P和开放监听的端口号进行登录验证,登录成功,表示能与服务器取得连接,也就能够实现两台主机之间的通信。客户端能够下载的文件主要是存放在服务器默认位置的文件,当需要下载时,客户端会列出服务器中所设置的默认位置的文件列表供用户选择。用户也可以下载其它位置的文件,但是需要自己输入文件所在路径和文件名。用户也可以上传文件,服务器中接收到文件后,会把上传的文件保存在所设置的默认位置。客户端远程控制服务器时,本地电脑的屏幕完成是服务器的屏幕,对键盘鼠标的操作也完成是对远程服务器起作用。由于存在退出远程控制的服务器,因此设定了ESC键作为退出远程控制服务的按键。用户也可以控制服务器的开关机。开机时,用户通过发

27、送服务器的MAC地址,便可实现服务器的唤醒。若要关机,则只需发送关机命令,服务器端根据命令自动完成关机操作。3.1.2 系统流程图图31 系统流程图3.1.2 子模块流程图本系统旨在实现两台电脑之间的通信,这包括远程开关机的实现、文件传送与接收以及远程屏幕实时操作。3.1.2.1 远程开关机对于远程唤醒,是通过电脑的IP地址和MAC地址实现的,每台电脑都有唯一的MAC地址,它是在生产电脑时确定的。它的流程图如图32所示。图32 远程开机流程图远程关机,也是用到IP地址,加上被关闭电脑的用户名和密码来实现。3.1.2.2 文件的传送对于单个文件,我们从本地选择要传送的文件,使用TCP协议与远程计

28、算机实现网络互连。首先向服务器传送一个要发送文件的指令,并且一起把文件名字发送过去。服务器接收到信息后,在默认的位置下根据传送过去的名字创建一个文件。然后从本地读出要传送文件的流,考虑到文件可能会比较大,不能一次性传送给服务器,因此分批传送。文件传送的流程图如图33所示。对于文件夹,是把它中的文件一个一个传送过去,因此传送文件时和上面的一样。传送的时候会有子文件夹,因此在传送时要考虑相对路径的问题。传到服务器时也要根据相对位置创建相应的文件夹。传送文件夹的流程图如图34所示。图33 传送子文件流程图图34 传送文件夹流程图3.1.2.3 文件下载在一个新的Form窗体中实现,先显示默认位置的文

29、件名称列表,如果需要下载该列表中的文件,直接选择点击下载即可。如果需要下载其它位置的文件,则需要输入该文件的位置,才能完成下载。下载文件夹和文件是完全一样的,而且也是用的同一个Form窗体,只是在初始化的时候稍微改变一下。也要在下载按钮的代码中做一下检测,到底是要下载文件还是文件夹,这只需要一个BOOL变量。下载文件夹和上传文件夹的算法是一样的,因此它们的流程图也一样。这是不再重复给出。3.1.2.4 远程控制主要是能完成类似QQ远程协助的功能。在客户端能够通过键盘鼠标模拟远程电脑敲键盘鼠标的功能,当然也需要把远程电脑的实时界面传递到客户端上。这主要就存在流量过大的问题,在本程序中是用限时的方

30、法传送,一秒钟传送一张图片过来。图35 远程控制流程图3.2 系统设计3.2.1 客户端设计本系统的客户端是Windows Form应用程序,其中由三个窗体组成,分别是登录窗体、主界面和下载文件界面。3.2.1.1 登录窗体设计登录窗体,它上面有两个Label、两个TextBox以及两个Button。Label作为TextBox的说明,两个TextBox分别是服务器的IP号和端口号。Button则是一个登录、一个重置。其中登录键是测试能否连接到服务器的,能够连接就登录,不能连接就会提示用户输入正确的IP和端口号。重置则是让TextBox1,也就是输入IP地址的文本框获得焦点。如果能够连接到服务

31、器就登录系统,然后断开连接,这也是为了节约资源,也因为在其它操作时都有自己的连接,每个模块使用完了之后也会释放连接。3.2.1.2 主界面设计主界面上面就只有一个MenuItem菜单栏,上面的子项目有开关机、远程控制、传送文件和下载文件。开关机包括唤醒和关机;远程控制就一个项目;传送文件包括传送单个文件和传送文件夹;下载文件也包括下载文件和下载文件夹。点击相应的选项会弹出相应的操作界面。远程屏幕控制也是在主界面中完成的。当进入远程控制时,屏幕会切换的全屏状态,以方便观看与使用。在客户端进行相应的操作就如同在服务器端电脑上进行相应的操作。例如打开一个文件夹,运行一个程序等,也就是说能够在本地模拟

32、远程电脑的键盘鼠标操作。但是由于网络传输速度的限制,因此不可能做到太流畅,操作起来也相对费劲。我也曾尝试过用图片相减的方法来减小传送的图片,不过这会有问题,就是相减算法会很大。我做过测试,在我的电脑上要完成1024768大小图片的相关操作,大概需要5秒钟。这样算下来就相当于要5秒钟才能传送一张图片,比起不作相减更加费时间。不过这也是一个问题,虽然在这次毕业设计中没能解决,以后我也会找机会学习例如QQ远程协助的解决方法或者远程桌面的实现方法。我想它们应该是只传送屏幕重绘的那一部分,最主要的是在获得屏幕时就只获得重绘的一部分,这样就会减少很多处理,也会减少很多的网络需要求。远程控制中还涉及到另外一

33、个问题就是模拟键盘和鼠标。模拟键盘要用到钩子。因为在远程控制的时候,要把本地输入的按键还有鼠标点击都发送到服务器去。这对于普通的字母键很容易实现,但是对于例如Shift、Ctrl以及系统键都不能识别。它们会把这些按键在系统上响应,例如按下系统键,开始菜单会弹出来。这显然不是我们愿意看到的。还好WIN API给我们提供了方法来实现。我们要获得这些特殊键,必需要屏蔽系统响应,把它完全当作是对窗体的响应。但是在使用完之后要释放它才行,不然会影响系统正常工作。由于远程控制是全屏操作,我们在文件上传到服务器是由一个类来实现的,从主界面中选择要上传的文件之后会自动连接服务器,这时会弹出一个文件选择对话框,

34、选择你需要传送的文件,传送完之后会自动关闭连接。操作回到主界面。3.2.1.3下载文件界面是由一个ListBox一个Button和一个TextBox组成。ListBox上显示服务器端默认下载位置的文件列表。其中下载文件和下载文件夹都是这一个窗体,只是初始化列表时显示的是文件或文件夹而已。TextBox是由用户输入要下载文件的路径,这是对于列表框的补充。因为设计时,列表框中只能显示服务器固定文件夹下的文件或子文件夹,因此难免用户会忘记把两地都需要的文件放在里面,所以设计一个列表框来让用户输入文件路径。同时也是保护服务器安全的一个措施。因为如果要显示服务器上所有文件,也只需要在TextBox旁边加

35、上一个Refresh Button,输入文件路径后,传送回服务器,然后把当前文件来下的文件显示出来。只是后退功能不好做,很难像本地计算机打开文件那样方便。3.2.2 服务器端设计在设计阶段,服务器端用的是控制台应用程序,在实际应用时是用的Windows Service应用程序。这是因为在设计阶段会调试程序,有时候程序会遇到问题,我们可以在命令行上显示我们需要的一些信息,从而知道哪里有问题,以进行修改。而如果一开始就用Windows Service应用程序,调试就不那么方便,也不太容易知道问题的所在。在程序调试好了之后,我们就可以把代码移植到Windows Service项目中去,同时还要删除一

36、些在用命令行调试代码时的输出语句。服务器开启之后,会开放一个端口号,一直监听来自网络上的连接。当没有连接时,服务器一直处于等待状态。当客户端连接服务器时,服务器就会进入一个WHILE(TRUE)的循环,在循环中设定很多的条件处理语句,根据客户端传来的不同信息,给予相应的处理。其中一次循环是以一个操作结束的。例如,传送一个文件就是一次循环。这其中也包括小的循环,在服务器端接收文件的时候,由于文件内容可能会比较大,也会用循环接收完文件,这是在条件语句中完成的。在每一次循环完成之后都会关闭NetWorkStream,这是因为一次循环在客户端就是完成一次操作,相应的客户端也会关闭流。等到客户端下一次连

37、接服务器的时候重新再建立连接,也就会重新初始化NetWorkStream,也就再执行下一个WHILE(TRUE)循环。第4章 客户端具体实现4.1 用户登录4.1.1 实现登录本软件实现的用户登录不同于其它系统的登录方式。其它系统登录用的用户名和密码,验证你是否可以登录系统。而本软件是用的IP地址和端口号,它的作用自然不一样,主要是为了检测能否连接到服务器电脑。如果能够连接就会成功登录,如不能连接到服务器,那么就不能登录,也就不能与服务器进行数据交换和控制。登录界面是一个Windows Form窗体,IP地址和端口号的文本框中默认有一台服务器的IP和端口号。用户可以根据需要修改,当点击登录后,

38、如果能够与远程服务器连接,那么就进入系统操作界面。此时,登录后会马上断开和服务器的连接,因为登录界面只是测试能否与服务器取得连接。由于连接到服务器会占用很多的资源,我们才这样做,还有就是传送一个文件会重新连接服务器,传送完一个文件也会断开连接。如果登录不成功,系统会给出相应提示,可以重新输入IP和端口号再次尝试连接。如果要退出系统直接点击关闭按钮。连接的代码如下:public TcpClient ConnectToServer() IP = textBox1.Text.ToString(); PORT = Convert.ToInt32(textBox2.Text); try client.C

39、onnect(IP, PORT); catch(Exception e) MessageBox.Show( 请输入正确的IP和端口号!); textBox1.Focus(); 4.1.2 为其它类提供登录接口在本窗体中,连接服务器的方法是用的公共方法。因此在需要时,其它类中的方法也可以调用它。只是要取得LoginForm的对象。其中主界面是操作的中心,也是控制的中心,在LoginForm的构造方法中有自己对象的参数。它是在主界面的代码里初始化的。因此,主界面保存了它的对象。其它类如果要用到其中连接服务器的方法,就需要在其构造方法中添加LoginForm的形参,在主界面的代码中初始化的时候将Lo

40、ginForm的对象传递过去。这样,其它类中也能使用登录时的IP和端口号。4.2 主界面实现主界面上用MenuStrip实现的菜单栏,上面添加了四个子菜单,子菜单中又有相应的操作。下面是初始化的背景。其中开关机(唤醒和关机)、远程控制和传文件(传送文件和传送文件夹)都直接在主界面实现,只要点击相应的选项就会弹出你需要的选项。下载文件(下载文件和下载文件夹)是另外的操作界面。下面我们分别介绍。4.2.1 开关机实现4.2.1.1 远程唤醒远程唤醒的实现是发一个BroadCast包,包的内容包括以下数据就可以了。0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,6个FF是数据的开始,紧跟

41、着16次MAC地址就可以了。比如MAC地址是11 22 33 44 55 66,那么数据就是0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x11 0x22 0x330x44 0x55 0x66 0x11 0x22 0x330x44 0x55 0x66 0x11 0x22 0x330x44 0x55 0x66.( 0x11 0x22 0x330x44 0x55 0x66重复16次)。这个数据在包的任何位置都可以,或者数据包仅为这个数据。然后网播出去就可以了。实现代码如下:UdpClient client = new UdpClient();string ipString = lo

42、ginForm.GetIP();byte ipBytes = Encoding.ASCII.GetBytes(ipString);IPAddress ip = new IPAddress(ipBytes);client.Connect(ip, 30000);byte packet = new byte17 * 6;for (int i = 0; i 6; i+) packeti = 0xFF;for (int i = 1; i = 16; i+) for (int j = 0; j 6; j+) packeti * 6 + j = macj; /mac 地址就事先确定好的服务器的地址int r

43、esult = client.Send(packet, packet.Length);4.2.1.2 远程关机实现远程关机有方法,其中一种是用WMI控制实现,但是这对于电脑需要进行一些设置。本程序中使用的是别外一种,这种比较简单,直接通过发送关机命令给服务器端,然后服务器端自己关闭自己。服务器端要使用到API中的关机方法,下面给出主要的定义及实现代码。定义API代码如下:DllImport(user32.dll , EntryPoint = ExitWindowsEx )public static extern int ExitWindowsEx(int uFlags, int dwReser

44、ved);4.2.2 远程控制远程控制的目标是实现对服务器电脑的界面进行实时操作。在远程控制时,客户端电脑处于全屏状态,客户端电脑的屏幕显示的就是服务器电脑的屏幕,除了ESC键用作退出远程控制外,其它的一些键盘、鼠标操作如果在服务器进行相应的键盘鼠标操作。对于远程控制,使用的是传送图片方法,将服务器电脑当前桌面的图片传送过来,显示在客户端电脑上。当用户点击相应的位置时,客户端会得到一个相应的坐标值,然后在服务器电脑上用模拟键盘的操作在相应的地方点击鼠标。键盘操作亦是如此。只是需要注意一点,客户端电脑可能和服务器电脑屏幕不是一样大小尺寸,因此在服务器电脑上要做相应的比例变换。在具体实现时,由于网

45、速的原因,不可能达到很流畅的效果。而且如果服务器一味的发送图片过来,客户端不能及时接收到图片,就会造成网络拥堵。在这种情况下,客户端很可能会无法响应。鉴于如此,需要控制服务器的发送速度。这就是由客户端控制的,客户端每隔一秒发送一条命令给服务器,这时服务器才发送一张图片过来。这样就会减小网络的压力,也不会造成客户端不能响应。显示服务器传送过来的图片相对比较简单,这里就不列出代码,下面我们展示一下本地键盘获取的实现。本地键盘获取是用的HOOK实现的。一开始我是准备直接用KeyPress事件来完成,但是测试的时候只有一些普通的键能响应,诸如系统键以及功能键都不能响应。也就不能获得相应的按键值。因此多

46、方查找,知道HOOK可以实现捕获键盘的功能,就使用了它。不过在使用的过程中,又遇到了另外的一个问题,那就是按下系统键时“开始菜单”会弹出来,按下会弹出来,按下Alt+F4时,系统会关闭。这个问题困扰了我好几天,到处找寻解决办法,但是网络上关于C#使用HOOK的文章不多,而且也不完善,因此在这上面用了很多时间。我自己也想通过找答案的这个过程更深入的了解HOOK。最后,在一篇文章中,看到了一句话,我知道这就是我要找的答案。这句话是这样说的“创建一个能够拦截键盘的应用程序的关键是,实现前面两个方法,而放弃第三个。结果是,任何击键都只能传递到这个应用程序中。”而“第三个”就是CallNextHookEX,有了上一句话,就不难理解这个方法完成的是什么任务。这个方法就是将HOOK传递到下一个要捕获键盘功能的进程中去。但是,我们不想要这样的结果,因此不实现它,这样键盘在此时就完全被程序所控制。前面也提到过,要退出键盘,我们用的是ESC键,这是通过按键的事件来实现的。当系统按下ESC时,会产生窗口还原原正常大小,也会退出屏幕控制,而回到主界面的操作。下面给出获取键盘的一些重要代码。DllImport(user32.dll,C

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号