基于JAVA的远程控制系统毕业论文(毕业论文11000字)
基于JAVA的远程控制系统毕业论文(毕业论文11000字)
【摘要】
当今社会的各种数据普遍储存在计算机上,但走在哪里都带着计算机、硬盘等显然太过不便,因此可以通过网络远程使用数据的远程控制软件应运而生。
本文介绍了基于JAVA实现的远程控制系统,叙述了利用JAVA实现远程桌面监控系统的分析、设计和开发的全部过程。首先简单介绍了远程桌面监控系统的应用前景以及面临问题,介绍了系统的总体目标以及用户需求,设计了系统的基本框架和各个模块的功能;然后主要介绍了各个功能模块的具体实现步骤,并对模块中用到的类、构造函数和主要方法做了简单的说明,最后给出了测试方法和结果,对系统的优缺点进行了总结。
本远程控制系统,是利用JAVA语言跨平台的特性以及其优秀的网络编程环境,实现了不同硬件环境和操作系统的计算机之间的远程桌面控制,本系统可以让本地计算机通过网络访问不同的远程计算机,并对其进行操作,对远程主机的监控主要包括:实时监控桌面状态、远程文件传输、控制鼠标、键盘的基本操作。本系统开发工具采用Eclipse SDK 3.7.2。主要涉及的技术有JAVA Socket技术、JAVA Robot技术,JAVA网络编程。
【关键词】
网络监控;远程控制;JAVA Robot; JAVA
Remote Control System Based on Java
Abstract:
Nowadays kinds of data are commonly stored on a computer, while it's definitely too inconvenient to bring computers or hard disks everywhere. So, the remote control system through remotely using the data via Intranet comes out of such conditions.
This article introduced the remote control system based on JAVA. It detailed the whole process of analysis, design and development of the remote control system in local Intranet. Firstly it introduced the application prospect and faced problems of remote control system. Then the article focused on the general goals of the system and needs of users. It also involves the basic framework of the system and the function of each module. Furthermore, this article mainly detailed the achievement steps of each functional module. Meanwhile it simply described the class, constructors and main methods in each module. Finally, testing methods and results are given and the system’s advantages and disadvantages are summarized. [来源:http://www.doc163.com]
The control system has made full use of the advantage that JAVA language can be realized across different platforms. Remote control among different computers which have different hardware and operation systems can be realized. Remote control system can allow local computer to access other different remote computers via local Intranet, and implement operations onto them. The monitor towards remote computers includes many aspects, such as in-time monitoring, modifying system configuration files, control of the mouse and the basic use of keyboard. The main technologies involved in this article are JAVA Socket, JAVA Robot and JAVA network programming.
Keywords:
[Network monitor] [Remote Control] [JAVA Robot] [JAVA]
目 录
摘 要 i
Abstract ii
引 言 1
§1 绪论 2 [资料来源:www.doc163.com]
1.1 研究背景 2
1.2 国内外研究现状 3
1.3 论文的研究内容及结构安排 4
§2需求分析 6
2.1 概述 6
2.2 功能需求 6
2.2.1 主控端 6
2.2.2 被控端 6
2.3 性能需求 6
§3相关技术与原理介绍 8
3.1 JAVA简介 8
3.2 JAVA Robot技术 8
3.3 Java Socket技术 9
3.3.1 Socket通讯的过程 9
3.3.2创建Socket 9
3.4远程控制的原理 11
§4基于JAVA的远程控制系统总体设计 13
4.1系统体系结构设计 13
4.2系统功能设计 14
§5基于JAVA的远程控制系统的实现 15
5.1被控端实现 15
5.1.1创建一个ServerSocket对象监听端口 16
[资料来源:Doc163.com]
5.1.2等待客户端请求 17
5.1.3屏幕控制及传输功能实现 17
5.1.3.1捕获图像 18
5.1.3.2图像压缩及解压缩 19
5.1.3.3图像传输 19
5.1.3.4远程控制功能实现 21
5.1.4建立监听套接字接口 23
5.1.5等待客户端操作并进行响应 23
5.1.6文件共享功能实现 24
5.2主控端实现 24
5.2.1远程连接 25
5.2.2远程桌面 25
5.2.3远程控制 25
5.3本章小结 26
§6系统测试 27
§7结束语 31
7.1总结 31
7.2展望 31
参考文献 32
致谢 32
【引言】
所谓远程控制,是指管理人员在异地通过计算机网络异地拨号或双方都接入Internet等手段,连通控制与被控制的计算机,将被控计算机的桌面环境显示到主控端的计算机上,通过主控端计算机对被主控端计算机进行配置、软件安装程序、修改等工作。
这里的远程不是字面意思的远距离,一般指通过网络控制远端电脑。早期的远程控制往往指在局域网中的远程控制而言,随着互联网的普及和技术革新,现在的远程控制往往指互联网中的远程控制。当操作者使用主控端电脑控制被控端电脑时,就如同坐在被控端电脑的屏幕前一样,可以启动被控端电脑的应用程序,可以使用或窃取被控端电脑的文件资料,甚至可以利用被控端电脑的外部打印设备(打印机)和通信设备(调制解调器或者专线等)来进行打印和访问外网和内网,就像利用遥控器遥控电视的音量、变换频道或者开关电视机一样。不过,有一个概念需要明确,那就是主控端电脑只是将键盘和鼠标的指令传送给远程电脑,同时将被控端电脑的屏幕画面通过通信线路回传过来。也就是说,控制被控端电脑进行操作似乎是在眼前的电脑上进行的,实质是在远程的电脑中实现的,不论打开文件,还是上网浏览、下载等都是存储在远程的被控端电脑中的。
第一部分 绪 论
1.1 研究背景
随着网络的普及人们已经可以足不出户的工作和学习,SOHO越来越受到人们的青睐。通过网络人们可以控制放在面前的计算机,也可以远程控制无法直接触摸到的计算机,缩短了机器与人之间的空间距离,节省了很多精力。远程控制在网络管理,远程协作,远程办公等计算机领域都有着广泛的应用,它克服了由于地域性的差异而带来的操作中的不便性,使得网络的效率得到了更大的发挥。JAVA语言的跨平台特性以及其极为优秀的网络功能,为实现不同硬件环境和操作系统的计算机相互远程桌面管理提供了便利的开发环境。
[资料来源:https://www.doc163.com]
网络的诞生拓展了计算机的应用范围,网络的迅速发展在提高生产效率的同时也改变了人们的工作方式。现在有很多公司、企事业单位都建立了自己的内部网络,对于维护人员来说,希望能够通过网络实时的监控联网计算机的运行情况、希望根据需要通过网络随时改变联网计算机的设置,希望对出现故障的计算机能够通过网络及时排除故障。对于管理人员来说,希望通过网络随时了解员工的工作进展情况和规范员工对计算机的使用以及解决工作中存在的问题。为此,希望编写一个适合于局域网的桌面监控程序以满足上述需求。本系统就在这样的需求环境下孕育而生了。
远程控制技术是指用本地计算机通过网络去控制一台或多台远程主机的技术。当用户使用本地计算机控制远程主机时,就如同坐在远程主机的屏幕前一样,可以启动远程主机的应用程序,可以使用远程主机的文件资料,甚至可以利用远程主机的外部打印设备和通信设备来进行打印和访问互联网。不过,在远程主机中所运行的程序、所打开的文件、所下载的文档都是存储在远程主机中的,尽管这些操作似乎是在眼前的电脑上进行的,但事实上主控端端电脑只是将键盘和鼠标的指令传送给远程主机,同时将被主控端电脑的屏幕画面通过通信线路传过来,从而达到控制与被控制的目的。 [资料来源:Doc163.com]
远程控制系统一般分为客户端程序Client和服务端程序Server两大部分,在使用前需要将客户端程序安装到本地计算机上,将服务端程序安装到远程主机上。它的控制的过程是在本地计算机上执行客户端程序,向远程主机中的服务端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制远程主机中的各种应用程序运行。通过远程控制系统,可以进行很多方面的远程控制,包括获取远程主机屏幕图像;打开、关闭远程主机的任意目录;管理远程主机的文件和文件夹;关闭或者重新启动远程主机中的操作系统;通过远程主机上、下载文件和捕获音频、视频信号等。
远程控制系统也适合一对多模式,可以使用本地计算机控制多个远程主机,管理者可以在本地计算机上同时查看多个员工的工作进展情况,及早发现工作中的差错以便及时改正。特别是对于网络管理员,技术服务人员来说,远程控制提供了一个便捷,高效的手段。
但是所有这些与网络环境有很大的关系。网速过慢是很多网络程序的瓶颈,远程控制也不例外。获取被控端电脑屏幕的过程,实际上就是服务器端传输一副屏幕图片到客服端的过程,这个过程需要传输大量的数据,如何对屏幕图片数据进行压缩?多长时间发送一次屏幕图片数据?是不是每次都需要发送整个屏幕的数据?这些都是远程控制必须面对的问题。
[资料来源:http://doc163.com]
与此同时,网络安全、信息安全也成为人们不得不考虑的热点问题。远程控制系统存在着比较严重的安全隐患。容易受到黑客的攻击和非法入侵。这就需要对软件在设计方面做出安全考虑。
1.2 国内外研究现状
伴随着Internet技术的迅速发展,远程监控技术愈来愈完善。起初远程监控功能用于PC用户在离开办公室的时候能访问台式PC硬盘中的信息,甚至可以通过其台式PC访问企业网络资源。今天,许多企业和增值分销商正在把远程监控功能作为有效的技术支持工具,如网络管理员采用具有该功能的软件对局域网进行管理,出差在外的商务人员可以随时提取公司数据和资料。而远程监控技术最显著的表现是将远程监控技术应用于工业控制方面。如目前,基于因特网的远程控制国内外都有不同程度的研究。相对来说,由于西方国家在信息技术和计算机控制技术的发展上的优势,他们在研究基于因特网的远程控制方面相对早一些,而且有些公司有相关的初级产品问世。国内由于因特网的飞速发展,近几年也开始积极的研究。国内外在基于因特网的远程机器人控制方面的研究相对其它领域要多一些。例如美国伯克立大学研制的是一个通过因特网远程控制的种植花草的工业机器人手臂。用户通过机器人一手臂上的摄像机所传输的图像,对这个花园内进行简单的操作,如种植花草、浇水等。国内的哈尔滨工业大学也在研制基于因特网控制的机器人。这些基于因特网的机器人控制系统普遍都采用了客户/服务器网络模型,现场采用摄像机来监视,并通过网络发出控制命令。当前,由于网络基础设施还不够完善,所以监视图像由于数据量大,其传输时间过长。即使是采用了数据压缩技术,也仍然有很大的数据量需要传输,因而由此产生的远程控制时间延迟也必然很大。此外,这类系统普遍采用瘦客户、肥服务器的网络模型,监控端的控制操作功能过于简单,都只是发一些简单的指令,而不能实 [资料来源:Doc163.com]
现一些复杂的必需的逻辑处理功能。再有这类系统在处理上由于时间延迟影响现场控制系统不稳定时,仍然采用的执行一等待一执行一等待的单步执行流程,现场设备运行效率相当低下。
1.3 论文的研究内容及结构安排
本文重点探讨了基于JAVA的远程控制系统的设计目标和实现过程,介绍了系统的总体结构与设计,还给出了系统的具体实现,并对系统总体实施情况进行了总结,最后对未来发展进行了展望。
总共分为七部分,总体结构为:
第一部分:介绍了本文的研究背景、国内外研究现状、研究目的及意义、研究内容。
第二部分:介绍了本系统的需求分析,分析了系统需要解决的主要问题客户端,服务端的区别。
第三部分:介绍系统涉及到实现的相关技术,包括JAVA软件开发、JAVA Robot技术、Socket技术等。
第四部分:介绍了基于JAVA的远程控制系统的总体设计,包括系统设计思路、系统实现分析、系统功能设计等。
第五部分:介绍了基于JAVA的远程控制系统的系统具体实现,并给出相应功能的截图。
第六部分:对系统进行单机测试与联机测试,包括系统测试截图,最后给予总结。
第七部分:对该系统建设进行总结与展望,包括总结、下一步的工作等。
第二部分 需求分析
2.1 概述
所谓需求分析,我们首先要了解我们需要解决什么问题,这个问题要怎么解决才合理,也就是我们开发应用系统解决什么的问题。客户是上帝,需求分析就是要了解客户的需求,同时也是应用系统需要解决的问题的集合。
2.2 功能需求
2.2.1 主控端
1. 对被控主机的桌面进行实时监视,同时支持屏幕截图及传输;
2. 支持对被控主机进行远程控制,比如修改被主控端的系统配置文件,可以对远程主机进行关机和重新启动的操作,支持对被控主机进行键盘及鼠标的操作等;
3. 支持通过安全的用户名及密码远程登录被控主机;
4. 支持对被控主机的文件资源进行复制、粘贴、共享等操作。
5. 对被控主机系统的运行状态提供简单的提示信息;
2.2.2 被控端
1. 支持开机自动运行服务端程序;
2. 服务程序运行时,可以最小化到系统托盘;
3. 主控端通过远程连接连接到被控端之前需要通过安全的用户和密码进行身份验证;
4. 支持更改系统基本设置; [资料来源:Doc163.com]
5. 对于服务例程操作和系统的运行状态提供简单的提示信息;
2.3 性能需求
1. 实时性。主控端实时监视远程主机的桌面。被控端及时响应主控端的控制请求。
2. 安全性。被控端只能被一台主机控制。连接时需要身份验证。
3. 网络通信量。尽量减少网络上传送的数据量,节省网络资源。
4. 与平台无关性。适用于运行不同桌面操作系统的计算机;
5. 界面友好、操作简单;
第三部分 相关技术与原理介绍
3.1 JAVA简介
Java语言对传统的单机计算模型提出了新的挑战,是一种新的计算概念。首先,它是一种简单、面向对象、不依赖于机器的结构、具有可移植性、高效性、安全性、并且提供了并发的机制、具有很高性能的程序设计语言;其次,它最大限度地利用了网络;此外,Java还提供了丰富的类库,程序设计者可以方便地建立自己的系统。Java语言的设计使其可以适合于一个不断发展的环境:在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行; 可以通过接口来支持多重继承,较之于严格的类继承具有更灵活的方式和扩展性。
[来源:http://Doc163.com]
3.2 JAVA Robot技术
Java.awt.Robot 是一个用来产生本机输入事件的机器人类,通过它Java程序可以实现程序的自动测试、自动演示、或其它的对鼠标和键盘控制的应用。它是实现远程桌面连接的关键功能,可将使编程复杂度大大简化。Robot类提供的实用键盘鼠标控制功能主要列举如下:
BufferedImagecreateScreenCapture(Rectangle screenRect)createScreenCapture方法提供了类似于键盘上的PrintScreen 键的功能,能够将指定矩形区域内的屏幕像素拷贝下来产生一个BufferedImage。将该方法应用在图形程序中,或是用它来实现远端屏幕传输,即可实现远端电脑监控程序等;
void delay(int ms)该方法可将当前的程序(thread)休眠(sleep)若干毫秒(ms)。通常可用来控制程序的延时;
Color getPixelColor(int x,int y)该方法负责获取给定屏幕坐标像素位置的颜色值;void keyPress(int keycode).&.void keyRelease(int keycode)这两个方法用来产生指定键的按键按下与抬起动作,功能上相当于Win32API的Keyb_event 函数,可用于程序的自动演示、测试等;
void mouseMove(int x, int y)该方法将鼠标光标移动到指定的屏幕坐标,可用于程序的自动演示、测试等;
void mousePress(int buttons),void mouseRelease(int buttons), void
mouseWheel(int wheelAmt),这三种方法产生指定鼠标按钮的按下、抬起及滚轮动作,同样可用于程序的自动演示、测试等。
3.3 JAVA Socket技术
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
3.3.1 Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
1、 创建Socket;
2、 打开连接到Socket的输入/出流;
3、 按照一定的协议对Socket进行读/写操作;
[来源:http://www.doc163.com]
4、 关闭Socket.
3.3.2 创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:
Socket(InetAddress address,int port);
Socket(InetAddress address,int port, boolean stream);
Socket(String host,int prot);
Socket(String host,int prot,boolean stream);
Socket(SocketImpl impl)
Socket(String host,int port,InetAddress localAddr,int localPort)
Socket(InetAddress address,int port,InetAddress localAddr,int localPort)
ServerSocket(int port);
ServerSocket(int port,int backlog);
ServerSocket(int port,int backlog,InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端 口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket.count则表示服务端所能支持的最大连接数。例如:
Socket client = new Socket("127.0.0.1",5678);
ServerSocket server = new ServerSocket(5678);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23,所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
图3-3-1 socket连接示意图
3.4 远程控制的原理
远程控制的基本原理是当系统用户连接到网络上,通过远程访问的主控端程序发送主控端身份验证信息和与远程主机连接的要求,远程主机的被控端程序验证主控端身份,如果验证通过,就与主控端建立连接,并向主控端发送验证通过和已建立连接的信息。这时,主控端便可通过主控端程序监控或向远程主机发送要执行的指令,而被控端程序则执行这些指令,并把键盘、鼠标指令和屏幕刷新传给主控端程序,主控端程序通过处理把主机屏幕等信息显示给用户看,使得用户就像亲自在远程主机上操作一样。如果没有通过身份验证,就不与主控端建立连接,用户也就不能远程控制主机了。远程控制软件大都使用C/S 模式。使用前需要将主控端程序安装到主控端计算机上,将被控端程序安装到被控端计算机上。它的控制过程一般是先在主控端上执行主控端程序,像一个普通客户一样向被控端计算机发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端计算机中各种应用程序的运行。这种远程控制方式称为基于远程服务的远程控制。
[来源:http://Doc163.com]
第四部分 基于JAVA的远程控制系统总体设计
4.1系统体系结构设计
远程屏幕监控程序一般分两个部分:一部分是客户端(主控端)程序Client,另一部分是服务器端(被控端)程序Server。在使用前需要将客户端程序安装到主控端计算机上,将服务器端程序安装到被控端计算机上。服务器端主要是监听、执行客户端发来的请求或指示,如键盘按键、鼠标的动作等,同时还要定期发送屏幕位图信息到客户端。而客户端则负责把接收到的屏幕位图信息显示在客户端的窗体上并相应的把客户端的键盘、鼠标动作发送给服务器端应用程序。
经过需求阶段的分析知道,本系统属于典型的C/S结构的系统,由主控端和被控端两个部分构成。该系统中采用了Java提供的几种套接字中的流套接字。因为流套接字依靠TCP协议来保证信息正确到达目的地,一旦IP包在网络传输中丢失或者发生错误,作为接受方的TCP将联系发送方TCP重新发送这个IP包。
[资料来源:Doc163.com]
为了实现远程控制,被控端程序需要不断地把屏幕图像发送到主控端, 并接收来自主控端的鼠标和键盘操作指令,然后按操作指令执行。主控端程序需要不断地接收被控端程序发送的屏幕图像,然后在主控端窗口中显示,并捕捉主控端的鼠标和键盘事件,然后传送到被控端。系统基本框架结构图:
图4-1-1 系统基本框架结构图
4.2 系统功能设计
系统总体设计的目的是要根据系统分析的要求和组织的实际情况来对新系统的总体结构形式和可以利用的资源进行大致设计,它是一种宏观、总体上的设计和规划。
图4-2-1 系统功能示意图
第五部分 基于JAVA的远程控制系统的实现
5.1 被控端实现
被控端程序是远程控制软件的主体。软件的具体功能都是在被主控端实现的,主控端只负责传送要执行的命令和显示返回的结果。而几乎所有的操作控制都是在被控端本地实现的。
由于服务端基本不涉及界面操作,因此,其界面就可以做得相对简单些了。具体界面如下图所示:
图5-1-1 服务端界面
被控端(服务端)实现过程如下:
5.1.1 创建一个ServerSocket对象监听端口
ServerSocket 有多个构造函数,利用ServerSocket(int port)构造函数,将服务器监听连接请求的端口数赋给入口参数port。如果此时出现错误,程序将抛出IOException异常对象;否则将创建ServerSocket 对象并开始准备接收连接请求。
5.1.2 等待客户端请求
建立远程连接接下来服务程序进入无限循环之中。无限循环从调用ServerSocket的accept()方法开始,在调用开始后accept()方法将导致调用线程阻塞,直到接收到来自客户端的连接建立。连接建立后accept()返回一个最近创建的Socket对象,其中绑定了客户程序的IP地址或端口号。
5.1.3 屏幕控制及传输功能实现
5.1.3.1 捕获图像
//获取屏幕图像
Robot类的重要方法有createScreenCapture(Rect-angle screenRect)、mousePress(int buttons)、mouseRe-lease(int buttons)、mouseMove(int x, int y)、mouseWheel(int wheelAmt)、keyPress (int keycode)和keyRelease(int keycode) , 功能分别是捕获屏幕图像、按下鼠标键、松开鼠标键、移动鼠标键、旋转鼠标滚动轮、按下一特定键和松开一特定键。主要通过下面的代码来捕获屏幕截图: [资料来源:http://Doc163.com]
BufferedImage image=robot.createScreenCapture(new Rectangle(toolkit.getScreenSize()));
5.1.3.2 图像压缩及解压缩
屏幕图像是以位图格式获得的, 直接传输会造成比较大的延时, 为了提高远程控制的实时性, 需要对获取的屏幕图像数据进行压缩后再传输, 另外, 不应该使用文件的形式进行屏幕图像传输, 而是应该直接传输内存数据, 这样也会明显地减小延时。
ByteArrayOutputStream out=new ByteArrayOutput-Stream();//建立输出流
//创建JPEGEncodeParam对象(封装了压缩所需必要参数)
JPEGEncodeParam param =JPEGCodec.getDefault-JPEGEncodeParam(image);
param.setQuality(0.5f,false); //设置压缩后清晰度(数值范围0-1之间)
//创建JPEGImageEncoder对象
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out,param);
encoder.encode(image); //图像压缩
byte[] bytes=out.toByteArray(); //生成位数组
output.write(bytes,0,bytes.length); //把位数组写入输出流
output.flush(); //刷新输出流
压缩后的屏幕图像数据的解压缩方法如下: [来源:http://www.doc163.com]
//创建JPEGImageDecoder对象,input为输入流
JPEGImageDecoder decoder =JPEGCodec.createJPEGDecoder(input);
//把JPEG数据流解压缩
BufferedImage image=decoder.decodeAsBufferedImage();
5.1.3.3 图像传输
在选择传输协议时,屏幕图像的压缩比率是一个重要因素。因为UDP 协议的数据包最大长度是64KB,如果屏幕图像的压缩率设置得过小,屏幕图像压缩后的数据量超过了64KB,那么,使用UDP协议就有可能造成其他问题。一般地,屏幕图像的压缩率设置得不宜太大(设置压缩后的清晰度要≥0.5),否则,传到客户端的屏幕图像会不够清晰,那么又因为UDP传输大小的限制,所以,一般可以选择使用TCP协议。
//在PORT端口监听
ServerSocket server=new ServerSocket(PORT);
//接受客户机连接请求
Socket client=server.accept();
//与客户机建立输入输出流
BufferedOutputStream output = new BufferedOut-
putStream(client.getOutputStream(),BUFFER_SIZE);
BufferedReader input = new BufferedReader(new
InputStreamReader(client.getInputStream()));
//进行数据传输
客户端:
//与服务器连接
Socket client= new Socket(server,PORT);
//与服务器建立输入输出流
PrintWriter output = new PrintWriter(client.getOut-putStream(),true);
BufferedInputStream input = new BufferedInput-
Stream(client.getInputStream(),BUFFER_SIZE);
发送服务器端屏幕拷屏图像连接建立后,服务器端程序即开始拷贝屏幕图像,并通过连接发送给客户端。首先利用java的工具集ToolKit中getScreenSize()函数得到当前显示器的尺寸,把它作为入口参数赋给Robot类的函数BufferedImage.createScreenCapture(Rectangle screenRect),实现拷贝当前服务器桌面的功能。获得图像后,如果网络带宽受限,还可利用java提供的JPEGCodec 类对捕捉到得桌面图像进行压缩,压缩过后数据量可成数十倍的降低。但压缩需要大量消耗服务器的主机资源,同时对桌面内容的监控产生滞后,在服务器性能允许的前提下,不推荐使用此压缩功能。
5.1.3.4 远程控制功能实现
对于远程控制功能的实现,主要通过对鼠标及键盘消息进行捕获处理实现,首先由客户端(主控端)进行鼠标及键盘操作,转换为消息指令发送到被主控端,由被主控端对消息指令进行解析并转换为本地键盘或鼠标动作,从而实现对被控端进行控制操作,因此远程控制功能的关键在于鼠标及键盘消息的控制及操作处理。
[资料来源:www.doc163.com]
控制程序需要不断地接收被主控端端程序发送的屏幕图像,然后在客户端窗口中显示,并捕捉客户端在屏幕图像显示窗口中由用户发出的鼠标和键盘指令。对于鼠标指令,可以通过让窗口组件对象把自己作为鼠标和鼠标动作监听器加入来获得,具体如下:
//加入鼠标监听器
this.addMouseListener(new MouseListener(){
public void mousePressed(MouseEvent e){
//向被主控端发送 MOUSE_PRESSED,e.getX(),
e.getY(),e.getButton()
}
public void mouseReleased(MouseEvent e) {
//向被主控端发送 MOUSE_RELEASED,e.getX(),
e.getY(),e.getButton()
}
});
//加入鼠标动作监听器
this.addMouseMotionListener (new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
//向被主控端发送 MOUSE_DRAGGED,e.getX(),e.getY(),
e.getButton()
}
public void mouseMoved(MouseEvent e){
//向被主控端发送 MOUSE_MOVED,e.getX(),e.getY(),
e.getButton()
}
}); [资料来源:http://www.doc163.com]
this.addMouseWheelListener(new MouseWheelListener(){
public void mouseWheelMoved(MouseWheelEvent e)
{
//向被主控端发送 MOUSE_WHEELMOVED,e.getX(),
e.getY(),e.getUnitsToScroll()
}
});
对于键盘发出指令,可以让窗口把自己作为监听器加入来获得,具体如下:
Toolkit.getDefaultToolkit().addAWTEventListener
(new AWTEventListener(){
Public void eventDispatched(AWTEvent event) {
KeyEvent e = (KeyEvent)event;
if(e.getID()= =KeyEvent.KEY_PRESSED) {
//向被主控端发送KEY_PRESSED,e.getKeyCode(),
e.getKeyChar(),e.getKeyLocation()
}
else if(e.getID()==KeyEvent.KEY_RELEASED){
//向被主控端发送KEY_RELEASED,e.getKeyCode(),
e.getKeyChar(),e.getKeyLocation()
}
}
},AWTEvent.KEY_EVENT_MASK);
远程控制中主控端窗体坐标与被主控端屏幕坐标的转换:
被主控端的屏幕坐标与主控端窗体坐标的转换需要通过比例计算,主控端窗体大小是手动设定的(0,0,x,y),因此使用awt包的Toolkit.getDefaultToolkit().getScreenSize()方法得到被主控端屏幕大小即可使用比例计算从而实现坐标转换: [资料来源:http://www.doc163.com]
//得到屏幕的宽width= Toolkit.getDefaultToolkit().getScreenSize().width;
//得到屏幕的高height= Toolkit.getDefaultToolkit().
getScreenSize().height;
//x,y为设定窗口宽,高
private changeToLocalX(int x2){
//按比例转换宽return x2*width/x;
}
private changeToLocalY(int y2){
//按比例转换高return y2*height/y;
}
需要使用时通过调用changeToLocalX(int x2),changeToLocalY(int y2),即可实现主控端窗口坐标对被主控端屏幕坐标的转换。
被主控端程序接收来自主控端的鼠标和键盘操作指令后,可以根据具体指令执行Robot类的相应方法即可实现模拟操作。
5.1.4 建立监听套接字接口
复原客户端操作最后,服务器还需要建立一个监听套接字端口,用来接受客户端传来的控制信息流,并对信息流进行反序列化操作,将其恢复成操作对象实例,根据操作对象中的信息,利用Robot类自动执行传自客户端的操作。
[资料来源:http://www.doc163.com]
5.1.5 等待客户端操作并进行响应
循环步骤5.1.3到步骤5.1.5,从而实现客户端对服务器端的远程控制。
5.1.6 文件共享功能实现
首先通过主控端发送鼠标及键盘的操作命令来控制被控端,实现文件资源的复制、传输、共享。当被控端收到控制命令后可以打开、关闭目标电脑的任意目录并实现资源共享。
5.2 主控端实现
主控端实现过程如下:
图5-2-1 客户端界面
5.2.1 远程连接
用户通过IP地址建立连接,传送至服务器,当服务器验证通过后,返回给客户端一个“ok”信息。用户获准连接后,可选择在客户端显示的窗口尺寸, 并与服务器监听套接字连接,连接被接受后,服务器与客户端的连接流建立。
5.2.2 远程桌面
接收服务器屏幕信息,客户端从服务器端获得其屏幕图像后,利用窗口所包含的java.awt.graphic类的对象,通过drawImage函数将服务桌面显示在客户端窗口上。
5.2.3 远程控制
记录客户端操作事件及位置,发送至服务器端当客户端与服务器段连接上, 并持续、稳定获得服务器桌面图像流的时候,用户可在客户端显示服务器内容的区域内进行操作,这时客户端程序将截获这些操作,利用Java的序列化技术,将这些操作的信息(例如鼠标单击、双击、哪个键、键盘事件,以及光标位置等等)封装为一个实现了java.io.serializable接口的类的对象实例。发送用户操作的信息至服务器端,并获取操作结果将该序列化后的对象实例通过网络数据流传送至服务器端,等待服务器将处理后的图像回传给客户端。
[资料来源:www.doc163.com]
5.3本章小结
本章首先论述了基于JAVA的远程控制系统的设计与实现过程,其中分析并论述了远程登录功能的实现、屏幕截图及传输功能的实现、文件共享功能的实现、远程控制功能的实现。
第六部分 系统测试
图6-1 本机测试——主界面:ip地址使用127.0.0.1实现本地连接测试
图6-2 联机测试——主界面:联机测试等待连接
图6-3 联机测试——连接成功,远程桌面图形:这是在局域网中的连接测试
图6-4 联机测试——选择本地共享文件
图6-5 联机测试——本地文件共享成功
图6-6 联机测试——选择远程文件保存路径
图6-7 联机测试——远程文件保存成功
第七部分 结束语
7.1 总结
通过几个月的学习和研究工作,终于有了结果。在此过程中,我深深体会到要开发本系统并不容易,不仅要有扎实的基本功,而且还需要有缜密的思维结合各方面的知识。每做一步都要明白下一步该怎么做,还要明白这步操作是否会对其它操作产生影响,也就是说要有全局的概念,要具备严密的逻辑思维能力。通过此次的设计,我有如下体会:要设计和实现一个基于JAVA的远程控制系统是一项重大的工程,首先我们应该明确整个系统的流程框架图、各功能模块结构图,对整个系统的流程以及各个部分的功能进行详细的分析以及认真的规划;再次就是进行下一阶段的编码工作,在编码过程中一定要注意代码编写时的合理性,可读性以及易修改性;那么我们就必须具备扎实的编程基础,强调一点是在编码过程中一定要细心,这样将避免许多不必要的麻烦。另外我们还应该注意系统的功能模块可扩展性等方面的问题,以后可以增添模块功能;最后就是系统测试与维护的过程。在不断的测试和使用中会遇到各种各样的问题,我们应该保持平衡的心态出处理这些问题,切忌心浮气躁;这就需要测试者耐心的去解决问题,使系统各方面更加完善;由于时间等条件的限制,在此问题上本系统还有待改进。 [资料来源:www.doc163.com]
7.2展望
本系统在开发之前,虽然搜索了大量的文献以及著述资料并初步阅读了相关的资料,但是由于个人所学知识的有限,加之对于基于JAVA的远程控制系统的业务处理流程了得不够透彻,导致在对本系统进行分析和设计的过程中,可能存在忽视了某些流程上的细节的情况,使得本系统并不完善,需要进一步研究和设计。
此次的开发C/S的远程控制软件并没有发挥出Java的长项,在Web方向上的探索失败非常可惜,因为B/S的便捷性在远程控制方面可能各位具有优势,是大势所趋,因此今后有机会应该向B/S方向努力。
通过此次下面的分析和设计过程,我充分认识到系统的整个研发过程,对于我以后的工作和生活都是有帮助的,本人将继续不断的努力。
参考文献
[1]. 张芳云. Remote Administrator——远程控制软件中的精品[J]. 微电脑世界. 2002.(05)
[2]. Pocket PC“遥控器”——可在Pocket PC上工作的远程控制软件Expertcity GOToMyPC[J]. 微电脑世界. 2003.(19)
[3]. 薛宝赏. 远程控制 新手也能行[J]. 电脑爱好者(普及版). 2009.(12)
[4]. 张岩. 网络安全之远程控制[J]. 网络与信息. 2007.(06) [资料来源:Doc163.com]
[5]. 常永昌. 一种远程控制软件的设计与实现[J]. 计算机应用. 2003.23(3)
[6]. 赵新慧. 利用Java实现远程控制[J]. 微计算机信息. 2006.(9)
[7]. 李满. 远程控制系统的软件的设计[J]. 佳木斯大学学报(自然科学版). 2004.(1)
[8]. 李岩. 远程控制软件能做什么[J]. 中国计算机用户. 1999.(34)
[9]. 朱远喜. 快速且实用的远程控制利器[J]. 软件. 2005.(06)
[10]. 吴凤祥. 用Java实现一个UDP通信模型[J]. 微型电脑应用. 2001.(10)
[11]. 雍俊海. Java程序设计教程[M]. 清华大学出版社,2006
[12]. 王达. 计算机网络远程控制[M]. 清华大学出版社,2003
[资料来源:http://doc163.com]