基于网络远程控制实验室的开题报告

时间:2024.3.31

单片机课程设计开题报告

----电子类实验室的运动电模拟搭建的网络实现

一.     选题说明

本设计一个虚拟的网络平台远程控制电子线路实验箱,实现电子线路实验的远程操作。工作过程如下:学生首先在客户端以学号登录,进入相应的人机交互界面,选择相应实验电路,然后通过TCP/IP协议将学生输入的相关信息传输到服务器上,再由服务器将其解析转换成控制实验室试验箱上模拟开关的指令传递给处理器,再最后由处理器对试验箱上相应的模拟开关进行操作,完成试验电路的搭制,并可以由外部摄像头采集图像获得试验数据。

本设计成功实现,不仅使得学生做实验不受空间的限制,提高了实验资源利用率,而且避免了频繁的插拔接线甚至误操作对试验箱的损伤,节约了试验成本,同时也方便实验教师对实验室的远程控制,对其他试验箱的改造也有借鉴意义。

二.     设计思想

1. 国内外现状

近年来,随着计算机的普及和互联网技术的成熟,国内外已有少数大学开辟了这样的实验模型。学生可通过互联网登录并访问实验室服务器,完成各种模型的实验。

美国 Tennessee at Chattanooga大学的Jim Henry设计的网上工程实验室提供了一系列远程控制实验,如压力控制、液面控制、温度控制、速度控制实验等。这个远程实验系统是由一台Web服务器和五台客户机构成的,每台客户机上都运行用LabVIEW编写的软件,并与一套实际的实验设备相连,当用户通过Interner访问 Web服务器时,首先需要选择控制参数,然后WEb服务器把这些参数写入文件传送给相应的客户机,客户机收到这些参数后,通过数据采集卡来控制相连的实验设备完成实验,并把实验数据传回给Web服务器!服务器根据这些数据生成实验结果图返回给用户。

新加坡国立大学的虚拟实验室允许用户通过Interner进行远程实验,使用B/S方式实验,可以实现昂贵的实验设备的共享.远程实验室的服务器端使用Lab VIEW虚拟仪器软件实现对实验设备的控制, 服务器与实验设备之间通过 RS-232接口或IEEE188.2GPIB总线进行连接.为了能让用户直观地观察到实验现象, 远程实验室采用视频会议技术向用户反馈视频和音频信息.用户也可以控制摄像头的缩放和视角来获取满意的观察位置.在客户端使用支持Java的Web 浏览器作为统一的用户界面,其中嵌入的 Java appolers可以显示各个虚拟仪器的面板和数据, 并通过Internet与服务器进行通信以传递用户的控制数据和实验结果.到目前为止,这个实验室已经实现了电路、通信和控制领域的五个虚拟实验.

中国科技大学物理系研制了一套基于Internet的扫描探针显微镜(SPM)远程控制系统,该系统分为四部分:客户端、服务器、SPM仪器端、视频监视系统.由于设备复杂、贵重,其中客户端分为两种类型,一类是实验主控操作人员程序端, 用于对设备进行远程操作,采用基于 TCP/IP协议的C/S结构对SPM进行操作运行;另一类是观众客户端,这部分程序是基于HTTP协议和GGI的浏览器,提供给普通用户观看实验过程,服务器和SPM仪器端通过自行设计的DSP控制器组成一套完整的SPM反馈系统,该实验系统在京沪两地试用,获得了良好的实验效果。

大连理工大学机械工程学院研制的远程控制快速成型加工系统,其设备对象是数控加工机床.该系统采用基于Winsock的C/S编程模式,客户端用户输入加工参数及各种命令,网络只需负责将数据量不大的参数传递到加工服务器端,服务器端负责完成STL文件的分层参数设置和分层处理工作, 并在快速成型系统上生成底层数控代码,从而可以实现远程加工及结果显示。从而可以实现远程加工及结果显示。

2.意义

实验是大学理工科教育的一个重要环节,对于培养学生的实际操作能力和解决问题的能力至关重要。传统的实验平台受到场地、时间、仪器数量等诸多因素的限制做不到资源的最优化,而实验电路的远程搭制则能够解决实验仪器数量的不足以及实验场地、课时数的限制,使用户在获得许可的前提下可以在任何时候,从任何地点访问实验室,从而大大提高实验教学的伸缩性和适应性。采用MFC平台设计的远程客户端系统,不仅实现了硬件实验的远程操作, 而且组建灵活, 功能多样, 使用、维护都很方便。实验系统可以全天候在网上开放, 学生做实验不受时间、场地以及次数的限制。这样不仅充分共享了教学资源, 降低教学成本, 而且扩大了教学面, 提高了教学质量。将网络技术与现实事物链接在一起是网络技术的一个很重要的应用,现阶段网络技术已经相当成熟,可以通过网络实现各种数据的相互传输,这就为实现远程控制的可行性提供了条件。将现实中的事物通过一定的处理,然后接入到网络当中实现实验资源的最大优化就变的非常的有意义。

3.具体实施方案

    课题研究的电子线路实验电路搭制的网络实现以FPGA作为核心处理器,可分为远程访问部分、网络传输部分和实时控制部分三大块。系统结构如图1。

系统的工作流程如下:

当学生做实验时先用自己的用户名和密码登陆到客户端,在人机交互界面中选择要做的实验,然后会自动生成实验原理图的各种不同接法,除去固定走线外会提示需要自己连线的部分,并且可以提供很多不同的方案供选择。当学生将这些都选择好了之后点击确定,这些数据将通过网络传输到服务器上,服务器将其解析之后将数据送给核心处理器再由核心处理器来分配处理来完成这些具体的要求。

本课题研究的主要内容包括:

1、Winsock标准网络通信模型的编程。

2、服务器嵌入TCP/IP网络通信协议。

具体实施方案:

网络远程控制实验电路的搭制系统大多使用的是 CS (客户端/服务端)结构,急客户端接收用户输入的信息然后将这些信息经过相应的处理然后通过网络传输到服务器再由服务器控制实验箱做出具体操作。而这其中网络传输数据和服务器识别数据变成了电子线路实验电路搭制的网络实现的关键技术之一,研究人员对此也进行了深入的研究,取得了丰硕的研究成果。目前实现网络传输的方法有:使用 LabVIEW 自带的网页发布功能,直接在 Web 服务器端生成嵌入实验平台的 WWW网页,用户只需使用网页浏览器即可通过 Internet 访问网络虚拟实验室,进行实验。也有通过带有java插件的浏览器向服务器发送指令的方法。就是客户端为任一带java插件的浏览器,通过wab服务器传回的HTML.JSP网页,解释执行内嵌的Applet程序,建立Socket链接,实现参数输入和数据显示。Web服务器负责用户鉴权,发布嵌有Socket客服端的程序网页。Socket服务器负责对设备的数据采样和状态控制,在通信方面它是socket套接口的服务端,负责监听客户端的链接请求,接收参数输入和采样传输。然后再将监听得到的数据进行处理作用到实验箱的物理电路上面。本项目为了实现操作的稳定性和安全性则是通过VC++单独做客户端其原理和上述基本一致。如图2以STL文件为例,描述了客户端/服务器之间的通信应答过程。

综上所述:本课题是基于C/S模式采用面向连接服务的原理来实现的开放式实验系统

三.     时间安排

20##年4月——20##年11月

四.     设计产品的提交形式

仿真+实物

五.     功能参数


第二篇:利用VC++6.0实现网络远程控制技术


摘 

对于广大电脑爱好者来说远程控制软件并不陌生。远程控制是管理人员在异地通过计算机网络,异地拨号或双方都接入Internet等手段,连接目标计算机,并通过本地计算机对远程计算机进行管理和维护的行为。远程控制既可以作为黑客攻击手段之一,也可以作为远程维护,在家办公等应用领域的支持工具。随着网络技术的进一步发展,网络速度越来越快,远程控制技术支持将逐渐占据技术支持的主流。

本文针对远程控制的概念以及软件的编写问题进行了详尽、深入的分析、研究。本文首先阐述了远程控制的概念、远程控制软件的发展前景以及它与黑客和木马程序区别;其次介绍了远程控制软件实现所必须的网络协议、Socket编程的基本概念和Windows消息系统;最后讲解了利用VC++6.0编写一个完整的远程控制软件,包括客户端程序、被控制端程序的实现过程。

关键字:远程控制、VC++6.0、网络协议、客户端、服务器端

Abstract

Say the long range control software for the large computer fancier not unfamiliar. The long range control is a manager to pass the calculator network in the foreign land, the foreign land stirs the number or both parties to all connect into the Internet to wait the means, link the target calculator, and pass the native calculator to carry on the behavior of management and maintenance to the long range calculator. The long range control since can be one of an attack means, can also be the long range maintenance, at home support tool that transacts to wait the applied realm. Along with the technical further development of network, the network speed is more and more quick, the long range of control the technique support and will occupy the main current of the technique support gradually.

 This text wrote the problem to carry on to the concept of the long range control and the plait of the software detailed, thorough of analysis, research. This text elaborated that the concept, long range of the long range control controls the development foreground of the software first and it with black guest and the wood horse procedure differentiation; Introduced the long range to control the software realization the next in order must of network agreement, the Socket weaves the basic concept of the distance and    News system of Windows; Explained in detail to make use of the VC++6.0 finally the long range that plaits write an integrity controls the software, including the customer to carry the procedure and is control to carry the procedure to carry out the process.

Key word: The long range control, VC++6.0, the network negotiate, the customer carry, the server carry

 
第一章远程控制概述

1.1远程控制的概念

    远程控制软件已经使用很多年了,起初是为了让PC用户在离开办公室的时候能够访问其台式PC硬盘中的信息,甚至可以通过其台式机PC访问企业网络资源。今天,许多企业和增值分销商正在把远程控制能力作为有效的技术支持工具。很多网络管理员都采用这类软件对局域网进行管理或者在家中更新自己网站的内容。这类软件对于出差在外的商务人员用处非常大,这样他们可以随时提取自己家里计算机中的数据和资料。

    对于远程控制软件实际上是一种客户机/服务器程序,服务器 程序安放在被控制的计算机端,客户机安放在控制段。在客户端和服务器端都安装成功之后,客户端在网络上搜索已经安装了服务器的远程计算机;然后,客户端就发指令获得服务器端的连接指令,两台PC建立起连接,就可以通过网络的互联协议TCP/IP进行远程控制。

    远程控制的原理很简单:在本机上直接启动运行的程序,拥有与使用者(客户端)相同的权限。因此如果能够启动服务器端的服务器程序,就可以使用相应的客户端程序直接控制主机了。也就是说客户端就好比一个超级用户,可以直接控制计算机。

1.1.1远程控制的原理

远程控制软件一般分两个部分:一部分是客户端程序(Client),另一部分是服务器端程序(Server),通常在使用前需要将客户端程序安装到主控端的电脑上,将服务器端程序安装到被控端的电脑上。它的控制的过程一般是先在主控端电脑上执行客户端程序,像一个普通的客户一样向被控端电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行。

远程控制软件在两台计算机之间建立起一条数据交换的通道,从而使得控制端可以向服务端发送指令,操纵服务端完成某些特定的工作。此时,控制端只是负责发送指令和显示远程计算机执行程序的结果,而运行程序所需的系统资源均由被控计算机负责。

为了使用的方便,某些远程控制软件使用了Web技术,主控端可通过IE浏览器运行位于服务器端中的主控端程序来实现远程控制。

通过远程控制软件,我们可以进行多种远程操作,如察看被控电脑屏幕、窗口;访问被控电脑的磁盘、文件夹及文件,并可对其进行管理或共享其中的资源;运行或关闭被控电脑中的应用程序;查看被控电脑的进程表,激活、中止程序进程;记录并提取被控电脑的键盘操作;对被控电脑进行关闭、注销或重启等操作;修改被控电脑的Windows注册表;操纵与被控电脑相接的打印机、扫描仪等外部设备;通过被控电脑捕获音频、视频信号等。

1.1.2远程控制的实现

要进行远程控制,首先主控电脑和被控电脑都处在网络中,网络可以是局域网、广域网或Internet,某些软件也可使用直接连接电缆利用电脑COM或LPT口进行远程控制。其次要保证双方使用相同的通信协议,多数情况下远程控制软件使用的是TCP/IP协议互相通信,也有部分软件可使用SPX、NetBIOS协议,但使用这类协议无法在广域网及Internet上实现远程控制。大多数软件都要求远程控制的双方拥有合法的IP地址,并且要知道被控端确切的IP地址,这样就使得要对位于防火墙后的电脑实施远程控制变得几乎不可能,不过目前已经出现能穿透防火墙的远程控制软件。

1.1.3.远程控制的发展前景

远程控制在众多的领域里有着非常广泛的应用,如远程培训与教学、远程办公、对计算机及网络的远程管理与维护、远程监控。

(1)远程培训与教学

远程控制可以用于对远程的用户和员工进行培训,通过远程控制技术操纵对方的计算机,向对方进行操作演示,这样可以节省培训费用提高培训的效率。远程控制技术也大量的使用在教学网络当中,软件方案的多媒体网络就是远程控制技术与多媒体技术结合的产物。

(2)远程办公

远程控制还可让你在任何地点连接自己的工作电脑,使用其中的数据与应用程序,访问网络资源、使用与其连接的打印机等外设。它还可用于公司同事之间互相协同,完成一项共同的工作。

(3)远程管理与维护

对于计算机行业的售后服务人员来说,通过远程控制来为客户提供软件维护、升级、故障排除等服务,无疑可节省大笔的服务经费。对于网络管理人员来说,远程控制可用来管理、维护单位网络中的大量服务器和计算机,可大大提高工作效率。

(4)远程监控

企业的管理者可通过远程控制软件来查看员工的屏幕,以保证员工能够在上班时间集中精力投身于工作,杜绝在上班时间聊天、上网、玩游戏的现象。甚至还可通过记录员工的键盘操作,来防止企业的商业和技术机密被不正当使用。

家长也可通过远程控制对子女的电脑进行监控,防止子女无节制玩游戏或接触不良信息。

1.2远程控制、木马、病毒与黑客程序

远程控制软件可以为我们的网络管理工作做很多工作,以保证网络和计算机操作系统的安全。这类程序的监听功能,也是为了保证网络的安全而设计的,但是如果使用不当的话,就会出现很多的问题。为了达到远程控制的目的,就必须将这些软件隐藏起来。例如有的远程控制软件为了不让用户发现而被删除,就采用了一些办法使自己隐藏起来,使远程控制程序本身附着在某些Windows程序上,以增加驻留系统的可靠性。

    然而,正式由于这种功能,才使远程控制软件变得可怕起来,也使远程控制软件、病毒和黑客程序之间的区别变得越来越模糊。

    1. 远程控制与病毒

计算机病毒是能通过某种途径潜伏在计算机存储介质或程序里,当达到某种条件时即被激活的具有对计算机资源进行破坏作用的一种程序或指令集合。计算机病毒一般具有以下几个特点:

    1)破坏性。凡是由软件手段能触及到计算机资源的地方均可能受到计算机病毒的破坏,而计算机病毒也正是利用这种原理进行破坏的。

    2)隐蔽性。病毒程序大多夹在正常程序之中,很难被发现。

    3)潜伏性。病毒入侵后,一般不立即活动,需要等一段时间,条件成熟后才起作用。

    4)传染性。通过修改别的程序,并把自身的拷贝包括进去,从而达到扩散的目的。

    从计算机病毒的定义和特征中可以看出,远程控制软件与病毒的区别是十分明显的。最基本的区别就在于病毒有很强的传染性,而远程控制软件没有。

    2. 远程控制与黑客

    “黑客”一词来源于英语单词hack,本指“手法巧妙,技术高明的恶作剧”。

今天,在最新和最普遍的意义上来说,“黑客”意味着那些偷偷地、未经许可就进入别人计算机系统的计算机犯罪。他们或修改网页搞恶作剧或散步流言进行恐吓;或破坏系统程序,施放病毒使系统陷入瘫痪;或窃取政治、军事与商业机密;或进行电子邮件骚扰;或转移资金帐户,窃取钱财,真所谓作案方式多样,花样翻新,令人防不胜防。

   由此可见,远程控制与黑客的区别是较大的。黑客往往利用操作系统和网络的漏洞进行破坏活动,而远程控制软件的一大任务就是要保护控制端计算机,使之不受非授权用户的访问。

    3. 远程控制与木马

    木马是一种在远程计算机之间建立起连接,使远程计算机能够通过网络控制本地计算机的程序。它的运行遵守TCP/IP协议。由于它像间谍一样潜入用户的电脑,为其他人的攻击打开后门,与战争中的“木马”战术十分相似,因而得名木马程序。

    木马与远程控制软件的最大区别就是木马具有隐蔽性而远程控制软件没有。

    远程控制虽然可以方便地操纵远程计算机,但它也可能会给计算机带来安全方面的隐患。因为一旦远程计算机成为服务端以后,其他人只要知道了这台计算机的 IP 地址,同样也可以通过网络上其他计算机向其发送控制指令,由于控制者拥有几乎完全的控制权,被控计算机中的所有资源都处在不设防状况,有可能导致非常严重的后果。实际上木马程序的原理和远程控制程序是一样的,远程控制一旦被居心不良者钻了空子,它的危害甚至比木马还要严重。

第二章网络及应用协议

    进行远程控制的一个前提条件是有一个控制环境,这个环境就是计算机网络。因此在实现远程控制的具体技术之前必须了解网络的基本知识。这些知识对于编写远程控制软件是不可缺少的,特别是TCP/IP协议,因为TCP/IP协议是整个计算机网络的灵魂。

2.1  计算机网络的基本概念

2.1.1 计算机网络的定义

对于计算机上网络,在不同的阶段或从不同的角度看有着不同的定义,有的把它定义为“以相互共享(硬件、软件和数据)资源的方式而连接起来,且各自具有独立功能的计算机系统的集合”。这个定义着重于应用目的而没有指出计算机网络的结构。有的则从结构上来看待计算机网络,而把它定义为“在网络协议控制下,由两台以上计算机和若干台终端,或数据传输设备连接而成且相互间能进行通信的计算机符合系统”。有的还把计算机网络定义为“利用各种通信手段,如电报、电话和微波通信等,把地理位置上分散的计算机有机地连接在一起,达到相互通信而且共享软件、硬件和数据等资源的系统”。

2.1.2 计算机网络的基本功能

1. 数据通信

计算机联网之后,便可以相互传递数据和进行通信。现在随着Internet在世界各地的普及,传统的传媒已经受到了很大的冲击,特别对于邮电、报纸、新闻及电视等行业的影响更深刻。随着宽带网络技术不断成熟,这些行业通过计算机网络将会提供速度更快,质量更优和价格更低廉的服务。

2. 资源共享

这是计算机网络的主要用途。计算机在广大的地域范围内联网后,网络中各计算机的资源原则上都可以共享,可以突破地域范围的限制。共享的资源主要有:硬件、软件、及各种类型的信息。

3. 提高系统的可靠性

计算机网络一般都采用分布式控制方式,如果有单个部件或少数计算机失效,但由于相同的资源可分布在不同地点的计算机上,所以可以通过不同的路由来访问这些资源,从而不影响用户对同类资源的访问。

4. 促进分布式数据处理和分布式数据库的发展

分布式结构使得在获得数据和需要进行数据处理的地方都可以设置计算机,把数据处理的功能分散到各个计算机上。因此利用网络环境可实现分布处理和建立性能优良,可靠性高的分布式数据系统。

2.1.3 计算机网络体系结构

对于计算机终端或其他数据处理设备间的数据交换,必须考虑完成下列任务:

1)信源系统要激活直接数据通道或同志通信网络所期望的信宿系统的地址;

2)信源系统必须确认信宿系统已准备好接收数据;

3)在文件传输过程中必须确认信宿系统文件管理程序已准备接收并存储这个文件;

4)如果两台机器的文件格式不兼容,其中的某台机器必须惊醒格式转换工作。

这表明,在两个计算机系统之间必须存在更高级别的合作。在计算机之间进行以协议为目的的数据交换一般称为“计算机网络通信”。同样,当两台以上计算机经由通信网络互相连接,这个计算机工作站的集合也称之为“计算机网络”。由于对终端用户或计算机用户来说两者都具有相同的协作层次,因而这些通信的实体往往被称之为终端。

协议是为了在不同系统中的实体间进行通信而使用的。这里,实体和系统两词都是泛指的。一般来说实体能够发送或接收信息,而系统可以包容一个或多个实体,而且在物理上是实际存在的物件。

为了两个试题能够实现通信,它们必须使用相同的语言。交流什么信息,如何交换,何时通信,这在参与通信的实体间必须达成相互都能接受的安排。这些安排就是规程或协议。协议往往被制定成一系列规则,用来管制两个实体间的数据交换。协议中的关键因素包括:

1)语法,包括数据格式和信号电平等;

2)语议,包括协调用的控制信息和差错管理;

3)规则,包括时间控制,速率匹配和定时。

在介绍了协议之后,再引入协议体系结构的概念。我们已经知道,在计算机之间通信,需要更高层次的协作。如果不再把它从逻辑上看成一件任务,而是将其划分成几件事来做,则可以把文件传输这样的任务分成3件事来做。通信模块要保证激活和使参与通信的两个计算机系统处于准备好状态,并跟踪数据的交换且保证送达。这些任务被剥离出来,放到了另一个分立的网络访问模块中。这样倘若使用网络更替时,所影响的只是网络访问模块。不用一个模块来完成通信任务,,而用一个构造好的模块集合来完成不同的通信功能,这就是协议体系结构的思想。

2.1.4 OSI体系结构

开放式系统互联模型(OSI)是作为计算机通信体系结构的模型由国际标准化组织制订并构架的开发协议标准。

OSI模型是由应用层、表示层、会话层、传输层、数据链路层和物理层7个层次构成,其意图是为每层次上的功能都由若干个协议来实现。OSI是设计者试图用这个模型并在这个模型的框架内开发协议以最终代替类似TCP/IP的协议及模型,并取得计算机通信方面的主导地位。机关在OSI的框架内开发了很多游泳的协议,但全面的7层模型并没有真正流行起来,而TCP/IP体系结构在实现的网络世界中仍占据着支配地位。

OSI模型各层次的功能如下所述。

物理层:保证无特定结构的位流在物理介质上的传输;规范物理介质访问的机械、电气、功能和过程特性。

数据链路:为穿越物理链路的信息提供可靠的传输手段,为数据块发送提供必要的同步、差错控制和流量控制。

网络层:为更高层次提供独立于数据传输和交换技术的系统连接,并负责建立、维持和结束连接。

传输层:提供可靠和透明的端点间的数据传输,并提供端点间的错误校正和流量控制。

会话层:为应用程序间和通信提供控制结构,包括建立、管理及终止连接(任务)。

表示层:提供应用进程在数据表示(语法)差异上的独立性。

应用层:提供给用户对OSI环境的访问和分布式信息服务。

各层之间的通信如图2-1所示:

图2-1

2.2 TCP/IP协议分析

    TCP/IP起源于20世纪60年代末,是美国政府资助的一个分组交换网络研究项目,现在已经发展成为计算机之间最常用的网络协议。它是一个真正的开放系统,因为协议组件的定义及多种实现可以不用花钱或话很少的钱就可以公开的得到。它以成为被称做“全球互联网”的基础。

    TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:

    1.链路层:他有时也称做数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理针对电缆(或其他任何传输媒介)的物理接口细节。

    2.网络层:它有时也称做互连网络层,处理分组在网络中的活动,例如分组的路由选择。在TCP/IP协议组件中,网络协议包括IP协议、ICMP协议以及IGMP协议。

    3.传输层:它主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议组件中,有两个互不相同的传输协议:TCP和UDP。

    TCP为两台主机提供可靠的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块再交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

    另一方面,UDP为应用层提供一种非常简单的服务。它只是把称做数据报的分组从一台主机发送到另一台主机,但并不保证该数据报一定达到另一端。任何必须的可靠性必须由应用层来提供。

    4.应用层:应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:

    1)Telnet远程登录。

    2)FTP文件传输协议。

    3)SMTP用电子邮件的简单邮件传输协议。

    4)SNMP简单网络管理协议。

    TCP/IP协议与OSI其层模型的对照如图2-2所示:

图2-2

第三章远程控制的实现基础

在远程控制软件当中,对于控制端进行的数据通信所使用的主要技术就是网络编程技术和系统编程技术。

3.1 Socket编程的基本概念

在开始使用套接字编程之前,首先必须建立以下概念。

1. 网间进程通信

进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX  BSD中的管道(pipe)、命名管道(named pipe)和软中断信号(signal),UNIX system V的消息(message)、共享存储区(shared memory)和信号量(semaphore)等,但都仅限于用在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用进程号(process ID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。

其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。

为了解决上述问题,TCP/IP协议引入了下列几个概念。

1)端口。

网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。为此,TCP/IP协议提出了协议端口(protocol port,简称端口)的概念,用于标识通信的进程。

类似于文件描述符,每个端口都拥有一个叫端口号(port number)的整数型标识符,用于区别不同端口。应用程序可以使用编号从1到655535的任何一个端口好,并将其分配给端口。通常分成以下几个范围段:

端口 0,1~255,保留给特定的服务,如FTP、远程网及FINGER等服务。

端口 256~1023,保留给别的一般服务,如Routing function(路由函数)。

端口 1024~4999,可以被任意的客户端端口使用,客户端套接字通常会使用这个范围段的端口。

端口 5000~655535,为用户定义的服务器端口使用。如果一个客户需要事先知道服务器的端口,那么服务器套接字就应该使用这个范围的端口值。

2)地址。

网络通信中通信的两个进程分别在不同的机器上。在互连网络中,两台机器可能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此需要三级寻址:

1. 某一主机可与多个网络相连,必须指定一特定网络地址;

2. 网络上每一台主机应有其唯一的地址;

3. 每一主机上的每一进程应有在该主机上的唯一标识符。

通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。

4)网络字节顺序。

不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低价先存),有的存高位字节(高价先存)。为保证数据的正确性,在网络协议中须指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高价先存格式,它们均含在协议头文件中。

5)连接。

两个进程间的通信链路称为连接。连接在内部表现为一些缓冲区和一组协议机制,在外部表现出比无连接高的可靠性。

6)半相关。

综上所述,网络中用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。

7)全相关。

一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:

          (协议,本地地址,本地端口号,远地地址,远地端口号)

       这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

2 .服务方式

在网络分层结构中,各层之间是严格单向依赖的,各层次的分工和协作集中体现在相邻层之间的界面上。“服务”是描述相邻层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。

在OSI的术语中,网络层及其以下各层又称为通信子网,只提供点到点通信,没有程序或进程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式:面向连接(虚电路)或无连接的服务。

面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connect ID)。本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。TCP协议提供面向连接的虚电路。

无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性。UDP协议提供无连接的数据报服务。

1)顺序。

在网络传输中,两个连续报文在端-端通信中可能经过不同路径,这样到达目的地时的顺序可能会与发送时不同。“顺序”是指接收数据顺序与发送数据顺序相同。TCP协议提供这项服务。

2)差错控制

保证应用程序接收的数据无差错的一种机制。检查差错的方法一般是采用检验“检查和(Checksum)”的方法。而保证传送无差错的方法是双方采用确认应答技术。TCP协议提供这项服务。

3)流控制

在数据传输过程中控制数据传输速率的一种机制,以保证数据不被丢失。TCP协议提供这项服务。

4)字节流

字节流方式指的是仅把传输中的报文看作是一个字节序列,不提供数据流的任何边界。TCP协议提供字节流服务。

5)全双工/半双工

端—端间数据同时以两个方向/一个方向传送。

6)缓存/带外数据

在字节流服务中,由于没有报文边界,用户进程在某一时刻可以读或写任意数量的字节。为保证传输正确或采用有流控制的协议时,都要进行缓存。但对某些特殊的需求,如交互式应用程序,又会要求取消这种缓存。

3. 客户/服务器模式

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少 的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。

4 . 套接字类型

TCP/IP的socket提供下列三种类型套接字。

1)流式套接字(SOCK_STREAM)

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。

2)数据报式套接字(SOCK_DGRAM)

数据报套接字提供一种不可靠、非连接的数据报(packet)通信方式数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。络文件系统(NFS)使用数据报式套接字。。

3)原始式套接字(SOCK_RAW)

该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。

3.2  Windows的消息系统 

    Windows程序是基于一种时间驱动的编程模式,这就意味着应用程序所要做的大部分工作是随着Windows消息的变化而进行的。在远程控制软件中将涉及大量的系统消息处理和自定义消息的处理。

3.2.1 消息的种类

    应用程序所要做的每项工作都是基于处理Windows消息的,这些消息以3种最基本的形式出现:常用的Windows消息、控件通知和命令。

1.常用的Windows消息:指以WM_为前缀的那些消息(除WM_COMMAND

),如窗口移动消息WM_MOVE、窗口大小改变消息WM_SIZE,此外,如程序启动或退出、窗口创建和关闭、鼠标键的按下和放开等等。

    2.控件通知消息:由编辑框、列表框等控件或子窗日发给其父窗口

的通知消息,以WM_ COMMAND为消息名,在消息中包含有控件通知代码,

以区分具体的控件通知消息。

    3.命令消息:命令消息也以WM_ COMMAND为消息名,在消息中包含

有命令的标识符(ID),以区分具体的命令。命令消息的来源是如下三种

用户接口对象:

    -菜单:用户选择某菜单项,要产生相应的命令消01.

    -工具栏:用户按下某工具栏按钮产生相应的命令消息。

    -加速键:用户在键盘上按下了定义的加速键也将产生相应命令消息。

    上面所列的三种消息中,标堆Windows消息和控件通知消息必须由窗口类的对象,也就是直接或间接地由CWnd类或其派生类的对象进行处理。相对来说,命令消息的处理对象范围就广得多,不仅窗口类,而且文档类、文档模板类和应用类都可以处理命令消息。

3.2.2 MFC中的消息处理

    MFC为窗口下的消息处理提供了一种框架,使其使用起来比在传统的Windows程序下做控件消息处理语句更为简单。这是由于从CcmdTarge派生的类能够拥有自己的消息映射。MFC用用户类的消息映射来决定怎样处理已给定的消息,使我们能最大限度地利用C++语言的优点,将我们的类进行功能性封装,这样由这些类所创建的其他类就不用再次重复操作。

    MFC为进一步扩展重复使用性,它为大多数Windows应用程序,甚至范围很广的命令提供了默认操作。大多数有默认操作的命令同时也被包含在AppWizard产生的默认菜单中。由AppWizard创建菜单的标准命令消息在AFXRES.H中定义,其他的标准命令也由同样的命名规则,这个规则就是ID_+菜单名+命令名。

3.2.3 创建消息映射

在MFC应用程序中对消息的响应处理采用的是消息映射机制,消息映射机制其实就是一张消息及其处理函数的一一对应表以及分析处理这张表的应用框架内部的一些程序代码。

    凡是从CCmdTarget类派生的类都可以有消息映射,消息映射包括如F两方面内容:

    -在类的定义中(.h文件内)加上一行宏调用:

        DECLARE_MESSAGEsi MAP{)

    通常这行语句写在类定义的最后。

    -在类的实现文件(.cpp文件)中加上消息映射表:

      BEGIN-MESSAGE-MAP(类名,父类名)

           …………

        消息映射人口项

           …………

         END-MESSAGE-MAP()

由MFC AppWizard生成的应用程序中,所有的类都己经包含消息映射。如果用户自己“手工”建立某个类的定义文件和实现文件,既需要该类处理消息,又要亲自加人消息映射。好在Visual C++中另提供了一个工具ClassWizard一一我们可以称其为“类的魔法师”,通过这个魔法师,我们可以“机械化”地“制造”类。除了某些类(如没有基类的类或直接从CObject等类派生的类)外,其他许多类都可以由ClassWizard自动产生。当然,生成的类只是一个“骨骼”,需要用户补充“血肉”。尽管只是一个类的框架,但在其中已经加人了消息映射(不过消息映射人口项有待加入)。

    在类中,消息处理函数都是类的成员函数。要对一个消息进行响应,就要定义该消息的

处理函数。在类中,添加一个消息处理函数包括下面三个内容;

    -在类的定义中,加入该消息处理成员函数的函数原型(函数声明)。

    -在类的消息映射表中加人相应的消息映射入口项。

    -在类的实现中加人该消息处理成员由数的函数体。

    消息处理函数的原型前要以关键字afx_msg打头。

    当用C1assWizard给某个类添加一个消息处理函数时,它会自动加人这三部分内容,只不过它生成的函数体只有一个框架,需要用户加入具体实现代码。

    对于标准Windows消息,在CWnd类中已经预定义了默认的处理函数。这些函数名以On开头,以它响应的Windows WM消息名的后半部分作为函数名的后半部分,比如,OnCreate()函数对应处理的是WM一REATE消息,OnPaint()函数对应处理的是WM_ PAINT消息。这些消息处理函数类似虚函数但不是真正的虚函数,说其类似,是因为它们有类似“重载’的特性,在CWnd的直接或间接派生类中,如果定义了某个标淮Windows消息的消息处理成员函数,则该函数“重载”基类中相应的消息处理函数。在这些预定义的标谁Windows消息处理函数中,有些没有参数,有些则带参数,有些有返回类型(如int等),有些则没有(返回类型为void)。

    对于控件通知消息和命令消息,一般没有默认的消息处理函数,其函数名理论上可以随意,不过最好遵守一些约定,如以On打头。当用Class Wizard加入这两种类型的消息处理函数时,它会提供一个建议的函数名,虽然用户可以更改,但是最好不改。因为Class Wizard是根据控件通知消息的控件通知代码或命令消息的命令标识符来命名的,这样,很容易通过消息处理函数名想到其处理的消急。比如,下面的一个消息处理函数原型:

    afx_msg void OnFileOpen();

    表明该函数是处理命令标识符为ID_FILE_OPEN的命令消息的。而函数原型:

    afx_msg void OnDoubleClickedOK();

    则是当用户在"OK”按钮上双击鼠标左键时要调用的消息处理函数。

    控件通知消息和命令消息的处理函数既没有参数,又没有返回值。

有不少命令通常大多数应用程序都有,如文件菜单下新建、打开、保存等菜单项,编辑菜单下剪切、复制、粘贴等菜单项。对于这些命令的命令标识符,Visual C++中已经预先定义了,用户可以直接使用。究竟预定义了哪些命令标识符呢,你可以查看Afxres.h文件。  

对于某些常用的命令,应用框架还预先定义了消息处理函数。有些消息处理函数的功能已经完善,用户可以直接使用,而有些只提供了不完整的功能,需要用户根据自己的实际需要补充。

第四章 利用VC++6.0开发完整的远程控制软件

4.1 软件的实现的前提和功能

Visual C++的核心是Microsoft基础类库(Microsoft Foundation Class Library,简称MFC),即通常所说的MFC。尽管使用Visual C++进行编程并不一定要使用MFC,使用MFC也不一定就要使用Visual C++,但是在很多情况下,我们提到Visual C++时指的就是MFC,而提到MFC时指的也就是Visual C++。

   MFC相当彻底地封装了Win32软件开发工具包(Software Development Kit,即通常所说的SDK)中的结构、功能,它为编程者提供了一个应用程序框架,这个应用程序框架为编程者完成很多Windows编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等。

早在1989年,Microsoft的程序员们便开始试图将C++和面向对象的编程概念应用于Windows编程中,以编写出一个可以使Windows编程更加简便的应用程序框架。他们把这个应用程序框架叫做AFX(Application Framework)。AFX的确是经过了精心的规划和编码,而且也提供了对Windows API的高度抽象,建立了全新的面向对象的AFX API,但由于其不兼容现有的Windows API,导致大量的SDK代码无法移植,因而未能获得大多数Windows程序员的接受。不过,在Visual C++和MFC中,很多全局函数、结构和宏的标识符都被加上了AFX的前缀。

Microsoft Visual C++在一个产品中包含了两个完整的Windows应用程序开发系统。我们可以选择只使用Win32 API来开发C语言Windows程序,并且可以使用许多Visual C++工具,包括资源编辑器,来使低级Win32编程变得更加容易。Visual C++也包含了ActiveX模板库(ATL),我们可以用它来为Internet开发ActiveX控件。

4.1.1 软件实现的前提

本软件的开发环境是在微软的VC++6.0的MFC环境下编译而成的。

采用的基于TCP/IP的客户机/服务器模型和面向连接的流式套接字。其通信原理为:服务器端和客户端都必须建立通信套接字,而且服务器端应先进入监听状态,然后客户端套接字发出连接请求,服务器端收到请求后,建立另一个套接字进行通信,原来负责监听的套接字仍进行监听,如果有其它客户发来连接请求,则再建立一个套接字。默认状态下最多可同时接收5个客户的连接请求,并与之建立通信关系。因此本程序的设计流程应当由服务器首先启动,然后在某一时刻启动客户机并使其与服务器建立连接。服务器与客户机开始都必须调用Windows Sockets API函数socket()建立一个套接字sockets,然后服务器方调用bind()将套接字与一个本地网络地址捆扎在一起,再调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长度。在此之后服务器就可以通过调用accept()来接收客户机的连接。

相对于服务器,客户端的工作就显得比较简单了,当客户端打开套接字之后,便可通过调用connect()和服务器建立连接。连接建立之后,客户和服务器之间就可以通过连接发送和接收资料。最后资料传送结束,双方调用closesocket()关闭套接字来结束这次通讯。整个通讯过程的具体流程框图可大致用下面的流程图来表示:

4.1.2 软件实现的功能

该软件主要包括控制端程序的实现、被控制端(服务器端)程序实现。其功能为:

1)查看被控制端的文件目录清单;

2)使被控制端重新启动;

3)使被控制端关机;

4)直接执行任何命令,打开应用程序;

5)控制被控制端的屏幕,在本地直接操作被控制计算机(这是该软件的最重要的功能)

4.2 控制端程序的实现

    控制端程序的实现步骤如下:

    1)新建一个项目,选择“MFC ApWizard(EXE)”,取名为client,选择“基本对话”模式。

    2)按照图4-1的样式在对话框上添加一些控件。

图4-1 设计界面

3)设置编辑框的属性:其中“IP地址”对应编辑框的ID取IDC_ADDRESS;“端口”对应编辑框的ID取IDC_PORT;“要发送的命令”对应编辑框的ID取IDC_EDIT_SEND,选中“Disabled”选项;“信息显示窗口”对应编辑框的ID取IDC_EDIT_READ,设置其属性如图4-2所示。

图4-2 信息显示窗口属性设置

4)设置按钮的属性:“登陆”按钮的ID设为IDC_LOGIN;“注销”按钮的ID设为IDC_LOGOUT,“直接控屏”按钮的ID设为IDC_SCREEN,“发送”按钮的ID设为IDC_SEND;“清空”按钮的ID设为IDC_CLEAR;“退出”按钮的ID设为IDCANCEL。

5)利用ClassWizard为这些控件增加成员变量如图4-3所示。

      

图 4-3 利用ClassWizard为控件增加变量

6)双击登陆“按钮”编写以下的源代码:

//登陆到指定计算机

void CClientDlg::OnLogin()

{

    // TODO: Add your control notification handler code here

    //获得IP地址

    GetDlgItem(IDC_ADDRESS)->GetWindowText(m_csIP);

    CString tempstr;

    short tempshort;

    //获得端口号

    GetDlgItem(IDC_PORT)->GetWindowText(tempstr);

    tempshort = atoi(tempstr);

    m_iPort = htons(tempshort);

    //连接套接字

    OnSocketConnect();

}

其目的就是登陆到指定的服务器端,和服务端通信使用的是面向连接的流式套接字。

7)双击“注销”按钮,编写以下的源代码:

//注销

void CClientDlg::OnLogout()

{

    // TODO: Add your control notification handler code here

    if(m_hSocket!=INVALID_SOCKET)

    {

       closesocket(m_hSocket);

       WSACleanup();

    }

    m_csRead="";

    m_csSend="";

    UpdateData(FALSE);

    GetDlgItem(IDC_LOGIN)->EnableWindow(TRUE);

    GetDlgItem(IDC_LOGOUT)->EnableWindow(FALSE);

    GetDlgItem(IDC_SEND)->EnableWindow(FALSE);

    GetDlgItem(IDC_EDIT_SEND)->EnableWindow(FALSE);

    GetDlgItem(IDC_SCREEN)->EnableWindow(FALSE);

    return;

}

8)双击“发送”然后添加以下源代码:

//发送信息

void CClientDlg::OnSocketSend()

{

    // TODO: Add your control notification handler code here

    UpdateData();

    m_csSend.TrimLeft();

    m_csSend.TrimRight();

    if(!m_csSend.IsEmpty())

    {

       m_csSend=m_csSend+"\n";

       int nCharSend=send(m_hSocket,m_csSend,m_csSend.GetLength(),0);

       if(nCharSend==SOCKET_ERROR)

           MessageBox("发送数据时出错!","远程控制",MB_OK);

    }

    m_csSend="";

    UpdateData(FALSE);

    //使光标位于发送编辑框

    CWnd *pEdit=GetDlgItem(IDC_EDIT_SEND);

    pEdit->SetFocus();

   

    return ;

}

9)双击“直接控屏”由于代码较多这里只列举主要用到的类或函数的声明。

int CClientDlg::OnScreen()

    //该成员函数属于CClientDlg类,主要实现了直接控屏

    ATOM MyRegisterClass(HINSTANCE hInstance)

    //该函数实现了屏幕控制窗口

    BOOL myInitInstance(HINSTANCE hInstance)

    //该函数实现了创建屏幕控制窗口,并初始化套接字

BOOL IniSock(HWND hWnd)

BOOL ConnectSock()

    //套接字的初始化和连接

    void SendMousePoint(HWND hWnd)

    //函数实现了发送鼠标位置

void MouseEvent(int Msg,HWND hWnd)

    //鼠标事件处理函数

    void DibEvent(HWND hWnd)

    //位图事件处理函数

    void SysEvent(int Msg,HWND hWnd)

    //系统事件处理函数

void GetDesktopBit(HWND hWnd)

    //函数实现了获得桌面转换成位图格式

由于上诉函数的定义很多,故关于上诉函数的具体定义请参看程序。这些函数实现了直接屏幕控制,是远程控制软件客户端的核心组成部分。直接屏幕控制很直观的操作对方的计算机,就像在本机上操作一样,使管理员可以很方便的管理对方计算机。

    以上是客户端的主要实现部分,将相应的代码输入编译器VC++6.0中,编译程序生成可执行文件“client.exe”。

4.3 被控制端程序的实现

    被控制端程序是远程控制软件的主体,以为远程控制软件的具体功能在被控制端实现,控制端只负责传送要执行的命令和显示返回的结果。所有的程序的功能都是在被控制端程序当中实现的,下面我们来具体看一下。

    1)新建一个项目,选择“MFC AppWizard(exe)”,取名为”server,

接下来的下一步选择单个文档,然后当出现以下界面选择Windows Sockets选项。如图4-4。

                        图 4-4

2)修改其中的头文件定义和增加一些变量和函数。其中最重要的是ServerView.h和ServerView.cpp这是软件的核心部分包括了所有功能的实现。ServerView.h中添加以下的代码:

class CServerView : public CScrollView

{  

private:

    // START CUSTOM CODE: Internet Programming

    char m_chMsgBuffer[100];

    SOCKET m_hClientSocket;

    SOCKADDR_IN m_sockClientAddr; // Socket地址结构

    BOOL m_bServerIsOpen;         //服务器socket是否打开

    CServerDoc *m_pDoc;

    CWnd *m_pParentWnd;

    CMenu *m_pParentMenu;

    CString m_csRead; //收到的命令

    long int number;//命令的长度

    CString context;//具体内容

public:

    CServerDoc* GetDocument();

    void MySet();

    void MyDir();

    void MySeeFile();

    void MyCopyFile();

   

    void MyReboot();

    void MyShutdown();

    void MyUnknow();

    void MyShare();

// Operations

public:

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CServerView)

    public:

    virtual void OnDraw(CDC* pDC);  // overridden to draw view

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

}

3)在ServerView.cpp中增加的代码较多,这里只是列举了比较重要的类或函数的声明。

\\初始化套接字时分别修改了以下几个成员函数

CServerView::CServerView()

CServerView::~CServerView()

    void CServerView::OnDraw(CDC* pDC)

    \\下列的为初始化套接字时自己定义的成员函数

    void CServerView::OnInitialUpdate()

    void CServerView::AssertValid() const

    LRESULT CServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)

    \\服务器套接字关闭时的函数

    void CServerView::OnServerClose()

    \\服务器套接字打开时的函数

    void CServerView::OnServerOpen()

    \\客户端套接字读取数据的函数

    LRESULT CServerView::OnClientRead(WPARAM wParam, LPARAM lParam)

    \\客户端套接字关闭和数据读取时的函数

LRESULT CServerView::OnClientClose(WPARAM wParam, LPARAM lParam)

\\发送反馈信息的函数

    LRESULT CServerView::OnServerBroadcast(CString acSendBuff)

    \\直接屏幕控制时的函数定义如下:

    int autorun()

{

         MSG msg;

         //初始化套接字

         if (!InISock())

           return 0;

//连接套接字

         if (!ConnectSock())

           return 0;

//接收数据

         while(true)

      {

         if (!AcceptData())

         {

           WSACleanup();

           exit(1);

       }

if(!GetData())

       {

           if (!InISock())

return 0;

            if (!ConnectSock())

               return 0;

       }

       closesocket(NewSock);   

    }

    return msg.wParam;

}

//客户端读取数据是函数定义如下:

LRESULT CServerView::OnClientRead(WPARAM wParam, LPARAM lParam)

{  

int iBytesRead;

    int iBufferLength;

    int iEnd;

    int iSpaceRemaining;

    char Client_Read[1024];

    if(m_hClientSocket != wParam)

       return 0L;

    iBufferLength = iSpaceRemaining = sizeof(Client_Read);

    iEnd = 0;

    iSpaceRemaining -= iEnd;

    iBytesRea = recv(m_hClientSocket, (LPSTR)(Client_Read+iEnd), iSpaceRemaining, NO_FLAGS);

    iEnd+=iBytesRead;

    Client_Read[iEnd] = '\0';

    if (lstrlen(Client_Read) != 0)

    {

       m_csRead = Client_Read;

       m_csRead.TrimLeft();

       m_csRead.TrimRight();

//然后进行处理,程序主要部分

       number = m_csRead.GetLength();

//列文件目录清单

        if(m_csRead.Mid(0,3) == "dir")

       {

           MyDir();

        }

        //使用屏幕控制

       if(m_csRead == "scr")

       {

           OnServerClose();

           autorun();

       }

       //重新启动计算机

       else if(m_csRead == "reboot")

       {

           MyReboot();

       }

//关闭计算机

       else if(m_csRead == "shutdown")

       {

           MyShutdown();

       }

// 不认识的命令

       else

       {

           MyUnknow();

}

   

    }

    else

       OnServerBroadcast("空命令。");

    return(0L);

}

以上是服务器端部分实现的代码,有些函数的定义请看源程序。全部代码添加后可编译生成可执行文件“server.exe”。

4.4 有关远程控制软件的运行

运行软件的过程说明如下:

1)被控制端启动服务端程序server.exe,假设被控端的IP地址为10.0.0.5。

2)在控制端启动程序client.exe,填写好IP地址(被控制端IP地址)后,点击“登陆”按钮,则开始连接套接字。连接成功后,出现“连接成功”对话框,如图4-5所示:

图4-5

    5)首先在“要发送的命令”编译框中输入“dir d:\”,然后回车或点击“发送”按钮,系统返回被控端D盘根目录下所有文件和目录清单如图4-6所示。

图4-6

6)在“要发送的命令”编译框中输入“reboot”,然后回车或点击“发送”按钮,则被控制端计算机进行重新启动操作。

    7)在“要发送的命令”编译框中输入“shutdown”,然后回车或点击“发送”按钮,则被控制端计算机进行关机操作。

    8)点击“直接控屏按钮,则弹出一个窗口,窗口中显示被控端计算机的屏幕如图4-7所示。此时可以对被控端的计算机进行任何鼠标操作,比如点击“开始菜单”再点击“关闭计算机”,相应的选择就会使对方被控端的计算机执行相应的任务。控制端通过直接控屏就会很直观得操作被控制端的计算机,就像在本地机操作一样,不过只能进行鼠标操作,不能进行键盘操作。

图4-7

4.5软件编写过程中的一些问题和总结

1.该软件具体的实现思路是什么

该软件总体来说的思路是有两个程序组成的,一个客户端;一个服务器端。客户端是执行在控制的PC上,服务器端是执行在被控制的PC上。他们之间是通过面向连接的SOCKET套接字而建立相互通信的。客户端发送执行命令,服务器端执行该命令并将执行结果返回到客户端。

2.有关该软件的命令发送部分是通过什么来实现的

该软件的命令发送部分是在客户端通过在ClientDlg.cpp文件里定义的成员函数OnSocketSend()来实现客户端向服务器端发送命令,服务器端通过在ServerView.cpp文件里通过定义函数OnServerAccept()来接受命令,并通过OnClientRead()成员函数的定义来实现命令的执行和返回结果。

3.关于软件屏幕控制部分的问题

    在编写屏幕控制实现的过程中我被鼠标事件的处理问题困扰了,最后通过以下部分来实现的:

在客户端ClientDlg.cpp文件里定义了鼠标事件处理函数如下:

void MouseEvent(int Msg,HWND hWnd)

{

    int Flag;

    recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);

    if (Flag == US_FLAG)

    {

       //发送鼠标移动消息

       send(ServerSock,(char*)&Msg,sizeof(Msg)+1,MSG_OOB);

       SendMousePoint(hWnd);

    }  

}

该函数的定义具体实现了只要客户端和服务器端的套接字建立好以后,通过管套向服务器发送鼠标事件。服务器端通过定义以下鼠标事件来给予执行

GetMousePoint()

{

   int x,y;

   int lenx,leny;

   POINT point;

  

   lenx = recv(NewSock,(char*)&x,sizeof(x)+1,0);

   leny = recv(NewSock,(char*)&y,sizeof(y)+1,0);

   point.x = x;

   point.y = y;

   return point;

}

用来定义获得鼠标位置,然后在设置光标

void MouseMove(POINT point)

{

   SetCursorPos(point.x,point.y);

}

最后发送桌面控制函数void SendDesktop()来使客户端接收到相应消息。

结束语

本文首先介绍了远程控制的基本概念、原理、应用和实现方法,以及远程控制软件与木马程序、黑客程序的区别。并在此基础上提出了实现远程控制软件所需要的网络及应用协议的支持以及远程控制软件实现的基础,引用并阐述了OSI、TCP/IP、Socket和Windows的系统消息等概念,这些概念是编写远程控制软件是所不可缺少的。

在编写该软件的过程中我大量地翻阅了关于VC++6.0的MFC的编程方面的知识,MFC自动生成的类库可以很方便的继承,只需在此基础上添加或修改自己的代码就可以使程序编译成功,为我编写该程序节省了许多时间和精力。

由于本人技术的原因,本程序只是实现了远程控制方面的一小部分功能,一个真正的远程控制软件的功能不止这些,它还可以隐藏服务端的程序执行、锁定被控端的键盘和鼠标、网络自动测试等功能。这些功能待以后不断的学习等到技术成熟后才能实现。

    在本次毕业设计中我得到了很多收获。首先,原来我对远程控制的概念很模糊一直把它和木马程序混淆,通过本次设计我对远程控制软件的思想有了一个很清晰的概念;其次,通过本次设计使我对VC++6.0的概念有了一个更新的认识,起初对VC++只是觉得就像C++那样只是面向对象的程序设计思想,在设计过程中我才深深体会到VC++的简便性和灵活性。它不像我在学习C++时所下的概念“VC++只不过是微软出的一个C++编译器”,它的强大性已经远远超过了我的想象,利用它可以很方便的对Windows程序进行编写,要想学好VC++的编程我还要不断的努力学习,才能掌握这门语言。  

参考文献

【1】张友生,黄志愉,远程控制编程技术,电子工业出版社,2002;

【2】侯俊杰,深入浅出MFC第2版,华中科技大学出版社,2001;

【3】方敏,网络环境下的编程技巧及实例,西按交通大学出版社,1996;

【4】Stanley B.Lippman,Essential C++,1999;

【5】Andrew S.Tanenbaum著 王小虎 译,计算机网络,清华大学出版社,1998;

【6】马安鹏,Visual C++ 6.0程序设计导学,清华大学出版社,2002

【7】兰芸,Visaul C++ 6.0编程实例精解,北京希望电子出版社,2000;

【8】任泰明,TCP/IP协议与网络编程,西安电子科技大学出版社,2004;

【9】林立志,基于Windows的TCP/IP编程,清华大学出版社,2003;

【10】徐甲同,操作系统教程,西安电子科技大学出版社,1999;

【11】刘斌 王忠,面向对象程序设计VC++6.0,清华大学出版社,2003; 

更多相关推荐:
远程控制实验报告

燕山大学课程设计报告燕山大学课程设计报告远程控制程序学院信息科学与工程学院年级专业07级信息安全学生姓名张强崔国洋提交日期20xx0113燕山大学课程设计报告摘要本次课程设计再WindowsXP平台上以ecli...

第20课远程登录与远程控制实验报告

第20课远程登录与远程控制一实验名称远程登陆与远程控制二实验目标通过Telnet命令实现远程登录并通过远程控制软件实现远程控制目标机三实验的具体操作步骤1远程登录1在命令提示符窗口中键入telnetbbs指令如...

向日葵远程控制实验报告

向日葵远程控制实验报告一注册护照打开客户端点击免费注册即可进入注册护照页面二主控方添加主机1由主控方访问登录护照打开我的控制台产品管理向日葵管理如下图所示点击添加主机2填写主机信息为被控主机设置主机名称和主机描...

VNC远程控制实验报告

网络运营管理实验报告实验项目专业计科班级1学号姓名年月日1实验目的掌握VNC远程控制软件的安装和初始配置使用远程访问以提供快速技术支持并管理计算机与服务器2实验要求1安装使用VNC工具2使用VNC工具实现为您的...

向日葵远程控制实验报告

向日葵远程控制实验报告实验准备两台计算机计算机a计算机b实验要求两台安装向日葵远程控制软件的计算机实验过程1下载安装向日葵2安装成功开始实验注册一个账号密码登录3登录完成后点击我的控制台向日葵管理进行设置4输入...

实验 远程控制

学号班级姓名实验远程控制实验要求与目的掌握通过网络利用远程控制软件来远程控制计算机了解远程控制与木马的区别实验内容一选择并下载远程控制软件二三个或两个同学为一组安装测试该远程控制软件实验结果记录完毕后填写页眉的...

计算机远程监控系统 实验报告

通达学院20xx20xx学年第1学期课程设计实验报告模块名称远程计算机监控系统专业通信工程学生班级70学生学号11007034学生姓名指导教师目录11任务内容412应完成内容4二需求分析421用户需求522可采...

实验1-基于网络的远程仪器控制实验-实验报告-091228

电子科技大学实验报告学生姓名胡武君学号20xx22260139指导教师马敏实验地点清水河校区主楼C211实验时间周二58节一实验室名称二实验项目名称基于网络的远程仪器控制实验三实验学时2学时四实验原理脉冲参数的...

实验报告五 网络后门和远程控制(安徽农业大学)

实验五网络后门和远程控制姓名实验组别学号班级2班同组实验者姓名指导教师章恒日期成绩实验报告要求1利用三种方法在一台操作系统是Windows20xxServer的计算机中种植后门程序1分别写出这三种方法的基本步骤...

H.264远程视频监控实验报告

郑州轻工业学院实验报告H264远程视频监控实验专业班级嵌入式软件专业1102班姓名学号541113430联系方式H264远程视频监控实验报告一项目准备1硬件准备mini2440开发板一套USB摄像头一套2软件准...

实验五 灰鸽子远程控制

实验五灰鸽子远程控制1实验背景灰鸽子远程监控软件分两部分客户端和服务端黑客操纵着客户端利用客户端配置生成出一个服务端程序服务端文件的名字默认为GServerexe然后黑客通过各种渠道传播这个服务端俗称种木马种木...

《铁道信号远程控制》课程设计报告

铁道信号远程控制课程设计报告专业通信工程铁道信号班级姓名学号成绩大连交通大学电气信息学院目录1课程设计的主要内容12课程设计的具体要求121技术要求122报告撰写要求13课程设计的任务分配14原理描述及任务实现...

远程控制实验报告(22篇)