资源描述
毕业设计(论文)基于JAVA C/S远程监控系统软件的实现论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:基于JAVA C/S远程监控系统软件的实现摘 要近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,其实用性也毋庸质疑。基于JAVA C/S远程监控系统软件突破了空间的限制,使用者不用亲临,在自己的电脑面前就能轻松的实现对被监控端机器的监控。本系统采用Java网络编程和Java图形编程实现。笔者在开发过程中将网络技术与远程监控理论基础相结合,实现了以下功能:能连续获得被监控端机器屏幕变化;实现被监控端硬盘文件的上传、下载;实现对鼠标、键盘的模拟;实现在远程机器上执行任意DOS命令;远程关机、远程重启计算机,方便了用户监视和操作被监控端机器。本系统从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试都严格遵循了软件工程的思想。关键词:远程监控;Java Robot;屏幕截取;Java SocketThe Implementation of the Remote Control System Software Based on Java Technology and the C/S ModeAbstractIn recent years, the continuous development of the Internet technology provides remote control technology with condition for its development. Without any suspicion to its practicability, people pay more and more attention to remote control Technology system software. Remote control technology system software based on Java technology and the c/s mode, breaks the restriction of space. The system adopts network programming and graphic programming with java, and the users controlling the remote computer easily. In the process of research, the author united network programming and remote control theory together, which allows the system to successfully achieve the following functions: continuously obtaining the remote computer screen; uploading and downloading the document from the remote computer and the simulation of mouse and keyboard; controlling the remote machines to execute any DOS commands; turning off and restarting the computer. From the system requirements analyses, general design, coding and the code optimization, function testing, the remote control technology system strictly keeps to the ideas of software engineering.Key words: Remote Control Technology; Java Robot; Screen Capture; Java Socket目 录论文总页数:21页1 引 言11.1 远程监控的背景知识11 2 远程监控软件的原理22 系统需求分析及理论基础32.1 系统需求分析32.1.1 系统功能需求32.1.2 其他需求32.2 系统开发原理及关键技术32.2.1 系统开发原理32.2.2 系统运行概述32.2.3 系统的关键技术32.3 系统的开发平台42.3.1 Eclipse介绍42.3.2 Java语言42.3.3 Jar命令42.4 编程运行环境63 远程监控系统系统设计63.1 系统总体结构设计和分析63.1.1 主控端的主要功能模块73.1.2 被监控端的主要功能模块73.2 程序流程及分析73.2.1 被监控端启动流程73.2.2 主控端启动流程73.2.3 命令接收和处理流程93.2.4 图形监视线程启动流程93.2.5 远程控制流程93.2.6 文件上传流程104 系统主要模块设计和具体功能实现114.1 系统主要模块设计114.1.1 消息输入,命令处理结果显示模块114.1.2 通信模块实现114.1.3 命令处理模块124.2 连续获得被监控端机器屏幕变化功能实现124.2.1 比较几种屏幕截取方法124.2.2 Java“屏幕照相机”的编写原理124.2.3 Java“屏幕照相机”的实现124.2.4 远程屏幕监控的实现134.2.5 屏幕监视功能测试155 系统运行及测试结果155.1 测试方法155.2 测试环境165 3 系统运行实例165.3.1 连续获得被监控端机器屏幕变化功能165.3.2 实现被监控端硬盘文件的上传、下载165.3.3 实现对鼠标、键盘的模拟175.3.4 实现在被监控端机器上执行任意DOS命令185.3.5 远程关机、远程重启计算机18结 论19参考文献19致 谢20声 明211 引 言近年来,随着计算机及网络的应用普及,千千万万的人们在娱乐、通讯、学习、工作等各方面都实现了前所未有的信息化,极大地提高了生活质量与工作效率。然而在这种种便利背后,你关注的人在做什么呢?比如:公司员工。因此,远程监控发挥作用了。这里以公司领导为例,远程监控系统软件方便了公司领导人管理公司员工。在一个企业中,作为公司领导人,一定很担心自己的员工利用上班时间做工作以外的其他事情,也很担心他们泄露公司机密,等等。有了远程监控,这样的担心就很容易解决,你不用亲临监督每个员工,在自己电脑面前就能对他们的一举一动了如指掌。远程监控技术,始于DOS时代,因为当时网络不发达,这门技术没有得到很多重视,但是随着网络的高度发展,电脑的管理及技术支持的需要,远程监控技术越来越引起人们的关注。网络技术的不断发展,也为远程监控技术的发展创造了条件。远程监控软件一般分两个部分:一部分是客户端程序Client,另一部分是服务器端程序Server,多数远程监控软件把被监控端作为服务器,主控端作为客户端。考虑到在监控过程中,如果把主控端作为客户端向被监控端发送TCP连接请求,容易被防火墙或者杀毒软件阻止,监控过程就不能够成功进行。因此,本毕业设计将被监控端设计为客户端,向主控端发连接请求,建立连接后,主控端向被监控端发送远程控制命令,控制被监控端电脑中的各种应用程序运行,被监控端对主控端发送来的命令进行处理,并将命令处理结果返回给主控端。远程监控软件顺应时代发展的需求,它实用、使用简便,是非常不错的软件。1.1 远程监控的背景知识远程监控是在网络上由一台电脑(主控端Remote)远距离去监控另一台电脑(被监控端Host)的技术,这里的远程不是字面意思的远距离,一般指通过网络监控远端电脑,不过,大多数时候我们所说的远程监控往往指在局域网中的远程监控而言。当操作者使用主控端电脑监控被监控端电脑时,就如同坐在被监控端电脑的屏幕前一样,可以启动被监控端电脑的应用程序,可以使用被监控端电脑的文件资料,不过,有一个概念需要明确,那就是主控端电脑只是将键盘和鼠标的指令传送给远程电脑,同时将被监控端电脑的屏幕画面通过通信线路回传过来。也就是说,我们控制被监控端电脑进行操作似乎是在眼前的电脑上进行的,实质是在远程的电脑中实现的,不论打开文件,还是上网浏览、下载等都是存储在远程的被监控端电脑中的。电脑中的远程控制技术,始于DOS时代,只不过当时由于技术上没有什么大的变化,网络不发达,市场没有更高的要求,所以远程控制技术没有引起更多人的注意。但是,随着网络的高度发展,电脑的管理及技术支持的需要,远程操作及控制技术越来越引起人们的关注。远程控制一般支持下面的这些网络方式:LAN、WAN、拨号方式、互联网方式。此外,有的远程控制软件还支持通过串口、并口、红外端口来对远程机进行控制(不过,这里说的远程电脑,只能是有限距离范围内的电脑了)。传统的远程控制软件一般使用NETBEUI、NETBIOS、IPX/SPX、TCP/IP等协议来实现远程控制,不过,随着网络技术的发展,目前很多远程控制软件提供通过Web页面以Java技术来控制远程电脑,这样可以实现不同操作系统下的远程控制,例如数技通科技有限公司在就推出了全球第一套基于中文JAVA的跨平台远程控制软件易控。1 2 远程监控软件的原理远程监控软件一般分两个部分:一部分是客户端程序Client,另一部分是服务器端程序Server,由于本毕业设计的通信模块有别于传统的远程监控软件,在使用前需要将客户端程序安装到被监控端电脑上,将服务器端程序安装到主控端电脑上。它的控制的过程是先在被监控端电脑上执行客户端程序,像一个普通的客户一样向主控端电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,接收主控端发送过来的远程控制命令,并对命令进行处理,最后将命令处理结果返回给主控端,我们称这种远程控制方式为基于远程服务的远程控制。通过远程监控软件,我们可以进行很多方面的远程控制,包括获取目标电脑屏幕图像、窗口及进程列表;记录并提取远端键盘事件(击键序列,即监视远端键盘输入的内容);可以打开、关闭目标电脑的任意目录并实现资源共享;提取拨号网络及普通程序的密码;激活、中止远端程序进程;管理远端电脑的文件和文件夹;关闭或者重新启动远端电脑中的操作系统;修改Windows注册表;通过远端电脑上、下载文件和捕获音频、视频信号等。前面我们所说的是一台电脑对一台电脑的情况,其实,基于远程服务的远程控制最适合的模式是一对多,即利用远程监控软件,我们可以使用一台电脑监控多台电脑,这就使得我们不必为办公室的每一台电脑都安装一个调制解调器,而只需要利用办公室局域网的优势就可以轻松实现远程多点控制了。在进行一台电脑对多台远端电脑进行控制时,我们发现,远程监控软件似乎更像一个局域网的网络管理员,而提供远程控制的远程终端服务就像极了办公室局域网的延伸。这种一对多的连接方式在节省了调制解调器的同时,还使得网络的接入更加安全可靠,网络管理员也更易于管理局域网上的每一台电脑。本文所论述的远程监控系统就是依照这种方式进行的。2 系统需求分析及理论基础2.1 系统需求分析2.1.1 系统功能需求1连续获得被控端机器屏幕变化。2实现被控端硬盘文件的上传、下载。3实现对鼠标、键盘的模拟。4实现在被控端机器上执行任意DOS命令。5远程关机、远程重启计算机。2.1.2 其他需求1系统实用,界面操作简便。2被监控端自动隐藏运行。被监控端将随电脑启动而自动运行,运行时默认无任何可见界面。2.2 系统开发原理及关键技术2.2.1 系统开发原理本系统是利用类java.awt.robot中的屏幕截取和鼠标、键盘自动控制功能,然后加上网络传输功能来完成来完成截屏和远程控制的。2.2.2 系统运行概述1启动被监控端,打开指定的UDP端口号。用于读取命令。2被监控端读取命令(命令格式为ordername:port)ordername为命令名字,port为主控端打开的TCP端口。3接到主控端连接后,被监控端就对当前用户的桌面采用屏幕截取,然后发送给主控端。依被监控端设计的不同,可以设定屏幕截取的时间间隔,时间间隔短一点就可以获得连续屏幕变化了。4主控端在画布上对鼠标、键盘事件进行监听,被监控端重演主控端上的事件5主控端和被监控端读取和发送数据,分别来实现文件上传和下载。6在被监控端实现DOS命令的执行。2.2.3 系统的关键技术系统使用的关键技术就是Java网络编程和Java图形编程。用Java网络编程实现主控端和被监控端的通讯(命令收发、数据传送),用Java图形编程完成主控端控制界面的编写。具体应用如下:1实现主控端(服务器)与被监控端(客户端)之间的通讯。用Java Socket来实现。2用Java采集事件,封装成消息,用于发送。在主控端机器上采集事件(一般只不过是键盘和鼠标的事件),然后封装成消息类传输到被监控端。3在被监控端上重演主控端的动作事件。在被监控端运行client端,接收消息,如果主控端有请求操作的消息,用Robot截下当前屏幕,传给主控端,主控端显示被监控端的屏幕,是一个位图;然后接收在这个位图上的鼠标事件和键盘事件,并把鼠标位置(位图上的坐标换算成对应的屏幕上的坐标)和键值送到被监控端上,在被监控端上重演同样的事件。2.3 系统的开发平台JDK1.5.0,Eclipse3.1,Windows XP Professional2.3.1 Eclipse介绍Eclipse是一种可扩展的开放源代码IDE。2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周期之中。为了帮助集成开发环境 (IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。Eclipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。Eclipse是一个开放源代码的项目,任何人都可以下载Eclipse的源代码,并且在此基础上开发自己的功能插件。同时可以通过开发新的插件扩展现有插件的功能,比如在现有的Java开发环境中加入Tomcat服务器插件。可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是Eclipse的潜力所在。2.3.2 Java语言Java语言是SUN公司于1995年5月推出的新一代面向对象的计算机通用编程语言,是继WWW之后又一引起世界轰动的产品。Java语言的特点是跨平台和强大的网络编程功能。在Java语言诞生之前,Internet已存在,所以Java语言本身就封装了大量进行网络编程的类库,使得网络编程功能强大,同时又简化了网络编程的操作。因此利用Java语言可以开发出功能强大的网络应用程序。2.3.3 Jar命令功能:Java归档工具语法:jar 命令选项 manifest destination input-file input-files jar工具是个java应用程序,可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具,它基于ZIP和ZLIB压缩格式。然而,设计jar的主要目的是便于将java applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class文件、图像和声音)合并成单个归档文件时,可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件,从而进一步提高了下载速度。此外,它允许applet的作者对文件中的各个项进行签名,因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。命令选项:-c:在标准输出上创建新归档或空归档。-t:在标准输出上列出内容表。 -xfile:从标准输入提取所有文件,或只提取指定的文件。如果省略了file,则提取所有文件;否则只提取指定文件。 -f:第二个参数指定要处理的jar文件。在-c(创建)情形中,第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中,第二个参数指定要列出或抽取的jar文件。-v:在标准错误输出设备上生成长格式的输出结果。 -m:包括指定的现有清单文件中的清单信息。用法举例:“jar cmf myManifestFile myJarFile *.class”-0:只储存,不进行 ZIP 压缩。 -M:不创建项目的清单文件。 -u:通过添加文件或更改清单来更新现有的 JAR 文件。例如:“jar -uf foo.jar foo.class”将文件 foo.class 添加到现有的JAR文件foo.jar中,而“jar umf manifest foo.jar”则用manifest中的信息更新foo.jar的清单。 -C:在执行 jar 命令期间更改目录。例如:“jar -uf foo.jar -C classes *”将classes目录内的所有文件加到foo.jar中,但不添加类目录本身。程序示例 1:将当前目录下所有CLASS文件打包成新的JAR文件:jar cf file.jar *.class 2:显示一个JAR文件中的文件列表:jar tf file.jar 3:将当前目录下的所有文件增加到一个已经存在的JAR文件中:jar cvf file.jar * 2.4 编程运行环境硬件环境:CPU: 闪龙2400内存:256M硬盘:80G软件环境:操作系统:Windows XP Professional应用软件:Eclipse3.1 + JDK1.5.0 3 远程监控系统系统设计3.1 系统总体结构设计和分析本系统设计的方案为C/S模式,在主控端电脑上安装服务器端程序,在被监控端电脑上安装客户端程序。该系统的控制过程是先在主控端电脑上执行服务器程序,在命令收发过程中,主控端向被监控端配置的UDP端口发送命令,该命令是一个控制命令,要求被监控端来连接其开启的TCP端口和要求被监控端执行的操作,如果被监控端监听到该UDP命令,主动开启TCP端口向主控端发送连接请求。这样就建立了一个特殊的远程服务,然后通过这个远程服务,主控端使用各种远程控制功能发送远程控制命令,控制被监控端电脑中的各种应用程序运行。系统总体结构如图1:图1 系统总体结构图图3.1把软件功能分解到通信的两个端点上,即客户端和服务器端,采用ClientServer模式。这样能提高设计的灵活性,易于系统的扩展。被监控端接受主控端命令,并处理命令,然后输出命令处理结果;主控端则提供交互界面及命令处理结果显示;数据交换通道的建立由双方的数据通信模块负责。从而实现点到点的直接控制监控,满足实时性要求。3.1.1 主控端的主要功能模块主控端包括的模块有:消息输入,命令处理结果显示模块,通信模块。消息输入模块负责将用户界面的事件传送到通信模块,通信模块将命令信息发送到被监控端;被监控端执行操作后返回的成功或失败信息交由主控端命令处理结果显示模块根据信息的格式进行显示。3.1.2 被监控端的主要功能模块被监控端包括的模块有:通信模块,命令处理模块。被监控端处于侦听状态,一旦接收到合法的连接请求,就开UDP端口,并开启命令接受线程,建立连接后,通过通信模块接收主控端发来的命令信息,经命令处理模块解释后,并将结果返回到主控端。3.2 程序流程及分析3.2.1 被监控端启动流程在被监控端安装客户端程序,程序启动的时候,尝试开启UDP端口,如果防火墙或者杀毒软件阻止,尝试开启配置的其它UDP端口,如果都尝试完毕,启动失败。否则,将开启的UDP套接字传入,然后开启命令接收线程,目的是进行命令获取,并对获取的命令进行处理。然后将自己复制到自启动项,并改名为Explorer.jar. 流程如图2。图2 被监控端启动流程3.2.2 主控端启动流程在主控端安装服务器程序,主控端首先启动其控制窗口类,初始化图形在主控端安装服务器程序,主控端首先启动其控制窗口类,初始化图形显示,然后用户输入被监控端的IP地址。接着主控端开启任意TCP端口,并向该IP配置的UDP端口发送初始化命令(命令格式为ordername:port),ordername为命令名字,port为主控端打开的TCP端口号。主控端对开启的TCP端口进行监听,如果超时,连接失败。否则,主控端读取被监控端的状态对象,接着启动控制模块和屏幕监视模块。流程如图3。图3 主控端启动流程图4 命令接受和处理流程3.2.3 命令接收和处理流程被监控端UDP端口启动成功后,就开始对该UDP端口进行监听,如果监听到有命令,就读取它,并判断命令是否有效,命令以ordername:port为格式,如果无效,返回继续读取命令,否则,调用相应的命令处理模块对命令进行处理,命令处理完后将处理结果返回给主控端。流程如图4。3.2.4 图形监视线程启动流程主控端开启任意TCP端口,向被监控端的UDP端口发送“要求被监控端连接”的UDP命令,命令形式为screen:TCP Port。如果命令超时,命令执行失败,否则,如果被监视端来连接,生成Soket对象,从Soket中读取被监视端发送过来的图形对象,并将图象显示在画布上,每隔一定时间(若干秒),重新读取图象,更新画布显示,从而实现连续获得对方屏幕变化。流程如图5。图5 图形监视线程启动流程3.2.5 远程控制流程被监控端收到主控端的UDP命令:control:TCP Port,获得主控端开放的TCP端口号。成功连接主控端的TCP端口后,并从中读取事件对象,接着对事件对象进行类型判断,如果是键盘事件,就对键盘事件重演;如果是鼠标事件,就对鼠标事件重演。接着判定控制套接是否关闭,如果关闭,控制结束。否则返回继续读取事件。流程如图6。图6 远程控制流程3.2.6 文件上传流程主控端开启任意TCP端口,向被监控端发送文件上传命令,命令格式为:fileup:TCP Port。如果命令超时,文件上传失败,否则,主控端读取文件数据并发送,发送过程中如果I/O错误,文件上传失败,否则,进行文件是否读取完判断,如果读取完,则上传成功,否则,继续读取文件数据。流程如图7。图7 文件上传流程4 系统主要模块设计和具体功能实现4.1 系统主要模块设计4.1.1 消息输入,命令处理结果显示模块主控端消息输入,显示模块的开发采用JAVA图形编程,利用模块化、通用性强的特点,实现远程监控中用户控制界面的编写。4.1.2 通信模块实现1Socket编程数据通信模块中的数据通道建立采用Socket编程。Socket支持TCPIP协议网络通信的基本操作;它屏蔽了网络底层的通信细节,使编程简单;它对通信端点进行了抽象,提供发送和接收数据机制及打开、计算和关闭会话的能力。本项目中,客户端和服务器代表运行在Windows操作平台下,采用Java Socket来编程实现命令和数据信息的传输。2通信建立服务器与客户端开始都必须调用socket()函数产生一个Socket套接字。由于让被监控端开TCP端口,很容易被防火墙和杀毒软件阻止,监控就难以完成。这里,我们在主控端开TCP端口,等待被监控端来主动连接,这样监控功能就能更顺利的开始。主控端首先创建一个ServerSocket对象,然后调用ServerSocket的方法accept实现监听。如果被监控端来访问,accept会返回一个socket对象,利用这个对象就可以很轻松的完成服务器和客户端的数据交换。只有被监控端有请求时才建立连接,建立连接后,客户端与服务器之间便可以双向传输数据。当得到socket对象后,主控端建立ObjectInputStream对象,被监控端建立ObjectOutputStream对象实现消息的接收和发送。完成通信后,调用ServerSocket和socket对象的close关闭套接字,结束通信。主控端主要通信代码:ServerSocket server=NewRadomSocket.openNewPort(); /开启新端口Socket socket=null;server.setSoTimeout(Parameter.TCP_TIME_OUT); /设置超时socket=server.accept(); /开启ObjectInputStream readin=new ObjectInputStream(socket.getInputStream(); /封装流,准备读取一个对象socket.close(); /关闭socket,结束通信被监控端主要通信代码:Socket socket=new Socket(serverip, serverport);ObjectOutputStream send=new ObjectOutputStream(socket.getOutputStream();/封装流send.writeObject(cc); /发送send.close(); /关闭流socket.close(); /关闭套接4.1.3 命令处理模块命令处理模块的实现就是通过函数调用,调用各个命令处理类。在命令处理模块中,被监控端执行以下操作:发送自己的状态信息给主控端;建立图象传送;开启控制命令套接字;文件上传;文件下载;执行DOS命令,获取执行结果和错误流。4.2 连续获得被监控端机器屏幕变化功能实现4.2.1 比较几种屏幕截取方法在Java远程监控过程中,我们要截取软件运行GUI界面,并将其保存到一个或一系列图像文件中。目前,在Windows平台下,有关屏幕截取的工具软件有许多,比如:HyperCam等,当然还可以直接利用Windows操作系统支持的屏幕拷贝Print Screen键,将屏幕拷贝到剪贴板,在保存为图像文件。这些工具软件一定要屏幕截取者,在操作过程中要精力集中并且伺机捕获所需要的软件运行界面。事实上,有时候我们需要Java应用程序,自动对运行的GUI界面进行拍照,比如:一台计算机要获取网络上另一台计算机正在运行的GUI界面,要看看对方计算机上软件运行情况。这就需要在Java应用程序中,自动将运行的GUI界面保存到一个图像文件中,然后通过网络传输到另一台计算机上。而上述HyperCam等工具软件无法与我们的Java应用融合为一体。因此,我们需要在Java应用程序中编写一个屏幕照相机。4.2.2 Java“屏幕照相机”的编写原理屏幕的截取是比较接近操作系统底层的操作,在Windows平台下,该操作似乎成了VC、VB等语言开发的专利。事实上,屏幕的截取在Java应用程序中,及其简单。在Java JDK1.5.0 中提供了一个机器人Robot类。该类用于产生与本地操作系统有关的底层输入、测试应用程序运行或自动控制应用程序运行。Robot类提供了一个方法:.createScreenCapture(.),可以直接将全屏幕或某个屏幕区域的像素拷贝到一个BufferedImage对象中,我们只需要将该对象写入到一个图像文件之中,就完成了屏幕到图像的拷贝过程。4.2.3 Java“屏幕照相机”的实现为了构造一个比较完善的Java屏幕照相机,我们构造了一个ImageProvider JavaBean,其源代码和说明如下:/* 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的拍照 */public class ImageProvider private Robot robot=null; /图象采集类private Rectangle rect=null; /要复制的 屏幕区域/* 构造函数,输入要采集的屏幕的 矩形信息*/public ImageProvider() throws AWTExceptionrect=new Rectangle(Toolkit.getDefaultToolkit().getScreenSize(); /要复制的屏幕区域,这里为全屏robot=new Robot(); /创建Robot对象/* 复制全屏幕,返回BufferedImage对象 */public BufferedImage CopyScreen()BufferedImage image=robot.createScreenCapture(rect); /截取屏幕,生成BufferedImage对象return image;4.2.4 远程屏幕监控的实现实现屏幕监控要完成被监控端发送屏幕截图和主控端接收图片的工作,该功能的实现中构造了两个类:SendImage Thread和GetImageThread,类图分别为图8和图9。图8 SendImage Thread类图SendImage Thread JavaBean 代码和说明如下:/*被监控端将Java屏幕照相机采集到的图片压缩为JPEG文件,发送到主控端*/public class SendImageThread extends Thread。(部分代码略去)public void run() int i=0; OutputStream out=null; JPEGImageEncoder encoder=null; /压缩为JPEGtry out = client.getOutputStream(); /获得TCP套接字流 encoder=JPEGCodec.createJPEGEncoder(out);/将流压缩为JPEG对象流 catch (IOException e1) e1.printStackTrace(); while(true) image=impv.CopyScreen(); /截取屏幕图象 encoder.encode(image) ; /向网络写入JPEG图形对象图9 GetImage Thread类图GetImage Thread JavaBean 代码和说明如下:/*主控端接收JPEG文件,并在画布上显示*/public class GetImageThread extends Thread。(部分代码略去)public void run() BufferedImage image=null;JPEGImageDecoder de=null;InputStream in=null;try socket.setReceiveBufferSize(1024); /设置接收缓冲 socket.setSoTimeout(60000); /设置TCP过期时间 in=socket.getInputStream(); /获取套接字输入流de=JPEGCodec.createJPEGDecoder(in); /将输入流封装为JPEG对象流 catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); int wrongtime=0; while(true) wrongtime+; if(wrongtime=200)break;image=de.decodeAsBufferedImage(); /对JPEG对象解码,还原为BufferedImage图形对象 MainFrame.getInstance().ShowImage(image); /在控制窗口的画布上显示图象 4.2.5 屏幕监视功能测试在系统实现过程中,成功完成了连续获得被监控端机器屏幕变化的功能,下面为测试图片:图10 屏幕监视图片本节详细介绍了远程屏幕监视的功能实现。对于功能需求中的其他功能,这里就不逐一介绍了。对于远程控制功能,如果要实现该功能,首先需要主控端向被监控端发送远程控制命令,被监控端收到命令后,首先返回给主控端一个包含被监控端屏幕分辨率等的状态信息,主控端根据状态信息更新本机所存的被控端状态,并调整画布大小,使其比例符合被监控端屏幕分辨率,这样才可以精确定位。在画布中对事件进行监听,采集事件,封装成消息发送给被监控端,然后在被监控端使用Robot对象控制鼠标对象的位置与动作,实现事件重演。这样就能实现远程控制。5 系统运行及测试结果5.1 测试方法采用自下往上的测试方法,先进行单元测试,再集成测试。5.2 测试环境测试环境为Windows XP,JDK版本为1.5.0。5 3 系统运行实例主控端启动,显示系统操作界面图,如图11:图11 系统主界面5.3.1 连续获得被监控端机器屏幕变化功能该功能在上一章详细介绍了它的实现过程。运行实例见图105.3.2 实现被监控端硬盘文件的上传、下载文件上传和下载功能能够成功运行,运行实例见图如下:1. 文件上传:图12 文件上传对话框图13 上传成功消息框2. 文件下载:图14 文件下载对话框图15 下载成功消息框5.3.3 实现对鼠标、键盘的模拟该功能也正常,主控端能很好的操作对方机器,就像坐在对方机器前一样,浏览对方文件,运行各种应用程序,上网等。运行实例如图16。图16 操作对方机器5.3.4 实现在被监控端机器上执行任意DOS命令该功能成功执行。结果显示如下,这里以执行ipconfig命令和java version为例。图17 执行ipconfig结果图18 执行java version结果5.3.5 远程关机、远程重启计算机该功能也能正常运行。这里就不给出图例了。结 论经过几个月的设计和开发,远程监控系统基本开发完毕。实现了功能需求拟订的功能,各功能能够正常运行:能连续获得被监控端机器的屏幕变化;能对对方机器实现文件上传、下载;能远程控制对方机器;能重启,关闭对方计算机。但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如界面设计不太美观,还有就是TCP方式太消耗资源,这是需要改进的地方。远程监控软件的编写采用成熟的套接字编程,实现了软件面向设备、面向功能量身定制。在开发本系统的过程中,我同时学习了java套接字编程,java I/O流的特点和使用方法以及序列化机制,学习了基本的java图形编程,并查看了许多资料。通过该系统的研制,使得作者对计算机有了一种新的体验:追求实用才是学好计算机的关键。任何一门技术都要以能够解决实际工作中出现的问题为依据和评判优劣的基本依据。同时让我对软件工程有了进一步的理解,在最开始的开发过程中,我急于完成编码,设计不足,在编码过程中程序逻辑搅成一团,剪不断,理还乱。后来干脆推翻,从头开始。我得出结论,在没想好之前,千万不要动手写代码。在系统的研制过程中,我也遇到许多困难,因为以前没有项目经验,起步很难,不过通过各种知识的补充学习,并且查找各种资料,让我慢慢进入状态,并且从中找到很多乐趣。参考文献1 Herbert Schidt.Java 2M.北京:清华大学出版社,2004。2 耿祥义,张跃平.JAVA 2(第二版)M.北京:清华大学出版社,2004。3 Bruce Eckel.JAVA编程思想M.机械工业出版社,2005。4 张海藩.软件工程导论M.北京:清华大学出版社,2004。5 Roger S. Pressmen.软件工程实践者的研究方法M.机械工业出版社,2004。6 潘卉青,田书林,刘科.网络故障测试仪远程监控软件的设计EB.http:/www.e-7 李鲁群.用Java Robot对象实现服务器屏幕远程监视EB.第 28 页,共 21 页致 谢本文是在王海春老师和刁仁宏老师的热情关心和指导下完成的,他们渊博的知识和严谨的治学态度使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他们表示我最衷心的感谢!在论文完成过程中,本人还得到了答辩2小组所有老师和高翔同学的热心帮助,本人向他们表示深深的谢意!最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!作者简介姓 名: 李丹 性别: 女出生年月: 1984年9月 民族: 汉E-mail: lidan606声 明本论文的工作是 2007 年2月至2007年6 月在成都信息工程学院 系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。关于学位论文使用权和研究成果知识产权的说明:本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:(1)学校有权保管并向有关部门递交学位论文的原件与复印件。(2)学校可以采用影印、缩印或其他复制方式保存学位论文。(3)学校可以学术交流为目的复制、赠送和交换学位论文。(4)学校可允许学位论文被查阅或借阅。(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。特此声明! 作者签名: 年 月 日Are you hungry now?No, I am tired and lazy now; if I pursue you I will not catch you, and if I catch you-through your own slowness and clumsiness-I will not kill you, and if I kill you I will not eat you.Nicholas had begun to back away, and at the last; words, realizing that they were a signal, he turned andbegan to run, splashing through the shallow water. Ignacio ran after him, much helped by his longer legs, his hair flying behind his dark young face, his square teeth-each white as a bone and as big as Nicholass thumbnail-showing like spectators who lined the railings of his lips.Dont run, Nicholas, Dr. Island said with the voice of a wave. It only makes him angry that you run. Nicholas did not answer, but cut to his left, up the beach and among the trunks of the palms, sprinting all the way because he had no way of knowing Ignacio was not right behind him, about to grab him by the neck. When he stopped it was in the thick jungle, among the boles of the hardwoods, where he leaned,.; out of breath, the thumping of his own heart the only.sound in an atmosphere silent and unwaked as Earths long, prehuman day. For a time he listened for any sound Ignacio might make searching for him; there was none. He drew a deep breath then and said, Well, thats over, expecting Dr. Island to answer from somewhere; there was only the green hush.The light was still bright and strong and nearly, shadowless, but some interior sense told him the day, was nearly over, and he noticed that such faint shades as he could see stretched long, horizontal distortions of their objects. He felt no hunger, but he had fasted be- fore and knew on which side of hunger he stood; he was not as strong as he had been only a day past, and bythis time next day he would probably be unable to outrun Ignacio. He should, he now realized, have eaten the monkey he had killed; but his stomach revolted at the thought of the raw flesh, and he did not know how he might build a fire, although Ignacio seemed to have done so the night before. Raw fish, even if he were able to catch a fish, would be as bad, or worse, than raw monkey; he remembered his effort to open a coconut-he had failed, but it was surely not impossible. His mind was hazy as to what a coconut might contain, but there had to be an edible core, because they were eaten in books. He decided to make a wide sweep through the jungle that would bring him back to the beach well away from Ignacio; he had several times seen coconuts lying in the sand under the trees.He moved quietly, still a little afraid, trying to think of ways to open the coconut when he found it. He imagined himself standing before a large and raggedly faceted stone, holding the coconut in both hands. He raised it and smashed it down, but when it struck it was no longer a coconut but Mayas head; he heard her nose cartilage break with a distinct, rubbery snap. Her eyes, as blue as the sky above Madhya Pradesh, the sparkling blue sky of the egg, looked up at him, but he could no longer look into them, they retreated f
展开阅读全文