《基于Java手机远程协助软件系统设计》11000字_第1页
《基于Java手机远程协助软件系统设计》11000字_第2页
《基于Java手机远程协助软件系统设计》11000字_第3页
《基于Java手机远程协助软件系统设计》11000字_第4页
《基于Java手机远程协助软件系统设计》11000字_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

绪论1.1研究背景安卓系统是由美国Google公司和开放手机联盟领导组织和开发出来的,安卓系统基于Linux内核(不包含GNU组件),且平台是开源的,这就使得开发者可以进入学习。大量移动设备都采用安卓系统,安卓系统应用范围十分广泛,例如大家日常生活经常使用的智能手机、相机、平板、游戏机,这些硬件设备都是使用Android系统。Android的系统架构是以分层架构实现,与其他平台上的操作系统相比,Android系统并没有特殊的地方。Android也是四层结构组成,自上而下对应的是应用程序层、应用程序框架层、系统运行库层和Linux内核层。远程控制是指管理人员通过计算机网络或双方接入网络,通过远程拨号的方式将被控制的电脑连接起来,将被控制电脑的桌面环境提示到自己的计算机上,并进行配置,软件安装,通过本地电脑对远程电脑进行修改和其他工作。远程控制需要网络的支持。本地设备是主控制端或客户端,主要工作是将控制命令的发送出去,接收方是被控制端或服务器端,是处于另一端网络的设备。远"程"并不简单指代远"距离",客户端和服务器端可以处在同一局域网内,也可以是两台设备连接各自的网络后处在不同网段的两台及以上的设备。最初的远程协助的意思是仅仅对处于局域网中设备实现的远程控制。近几年互联网和计算机技术更新换代,远程协助功能日益强大,对于被控端设备,主控端连接成功后就可以启动被控端设备的工具,甚至可以查看被控端设备中的文件资料。1.2研究现状在Android平台上,这里聚集了大量优秀的程序员和科研工作者,同时平台上的源代码和学习资料都是向大众开放,用户可以注册一个账户然后提取自己需要的资料,这一有利条件推动了国内外众多程序员对安卓系统应用软件上的深入开发研究,尤其是以安卓平台为基础的内核特制、应用软件开发、系统框架设计这些方面。远程协助技术在现在已经发展的较为完善了,目前的远程协助的实现主要有四种方法:一是基于C/S(client/server——客户端/服务器架构)架构的web远程协助。传统的两层架构上,C/S架构是鲜明代表,客户端计算机上运行的程序包括用户电脑上运行的一个或多个软件,而服务器端有两种,一种是数据库服务器端,在客户端访问服务器端的数据之前,需要与数据库先连接;另一种是Socket服务器端,服务器端的程序与客户端两者之间进行程序上的会话沟通,需要编译Socket实现两台设备在网络下相互连接。C/S架构是目前远程协助主要架构,客户端在这种架构中起重要作用,这就使得处在客户端的那台设备因为处理的事务过多cpu负荷量过大,客户端要实现业务逻辑、展示用户界面、显示逻辑、事务信息处理,并且要使得在做SQL这一模块和实现存储过程时能够实现数据交互,还需要访问数据库,只有通过这种连接才能使数据保持稳定,满足在现实生活中开发一个项目的需要。还有的方法是基于Java语言的B/S架构的Web远程控制方法。B/S架构的全称:Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,web前端浏览器上不像C/S架构的客户端,它处理的事务很少,承受的压力很小,相比之下,服务器端却堆积了绝大多数的事务逻辑等待系统处理。Browser客户端、WebApp服务器端、DB端组成三层架构。B/S架构的系统只要设备上装有Web浏览器就可以实现需要的功能。B/S架构中,各种架构负责不同的系统运行实现,逻辑信息经过系统处理通过web前端浏览器显示,为了避免客户端的逻辑事务堆积在同一处处理造成负荷压力大的问题,这一部分由webapp处理。第三种实现方式是基于目前已有的C/S架构和B/S架构的基于GPRS和Internet网络。这种方法充分利用两者的显著特点,建成的是可以实现远程分布式控制系统。最后一种是以单片机为微控制核心实现了IPv4和TD-SCDMA协议的通信,构建了基于TD-SCDMA协议的远程控制方法。截至目前,我国市场上已经有相关成果出现,如向日葵远程控制,teamview软件以及华为公司推出的“亲情关怀”,还有利用蓝牙技术连接的近距离无线通信。亲情关怀需要使用华为账号登录,可通过网络拨打电话或者以发送短信的方式进行实现,远程协助的功能具体体现在“请求帮助”(请求对方远程控制你的手机),“提供帮助”(请求远程控制对方手机)两个核心选项上。另外重要的一点:亲情关怀虽然可以安装在市场上所有Android手机上,但是这一工具只有华为品牌的手机才可以使用此功能。2相关理论及技术背景2.1Java语言Java语言发行时间较晚,它包含C++语言的所有优点,C++语言发行时间早,很多结构负责,令很多程序员在早期学习的时候常常对继承、指针等地方费解,针对这一情况,Java语言进行适当取舍,对c++语言中结构复杂冗余的概念进行优化,因此Java语言对于初学者来说简单易上手,强大的功能使得其在编程开发语言领域占据重要地位。Java语言是静态面向对象的编程语言的典型,他能有效体现面向对象理论,使程序员在进行一些规模较大的开发编程中能够有清晰的逻辑思维。Java语言没有结构不需要指针,数组和串是对象,能自动处理对象间的各种引用关系,从而实现对无用单位的采集工作,这样,程序员无需对存储管理的工作阻碍,能将更多的时间和精力放在产品研发,大大提高工作效率。Java语言特点:简单性、面向对象、分布性、健壮性、安全性、平台独立与可移植性、多线程性、动态性、编译和解释性、高性能等。Java语言被特意设计成适应于不断变化的环境,其应用范围十分广泛,可用于编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序、Android应用等。Java语言运行工作原理:1.Java编程语言2.Java类文件格式3.Java虚拟机4.Java应用程序接口

图2-1Java工作原理当编辑并运行Java程序时,需同时涉及这四方面。使用文字编辑软件、Eclipse、Idea在Java源文件中定义不同类,通过调用类中的方法访问资源系统,把源文件编译生成二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的JavaAPI调用。如图2-2所示。图2-2Java工作流程2.2Java编程环境Java开发包及Java开发工具是基于JDK(JAVADevelopmentKit),这个开发环境主要是用Java语言编写的,可以用来做Applet小程序和其他软件程序。JDK包含JRE(JavaRuntimeEnvironment)、Java工具以及一些核心类库(JavaAPI)是Java语言的重点。每个Java应用服务器实质上都对应某个JDK版本。另外,JRE是支持Java程序运行的基本环境,而JavaAPI类库中包含的JavaSEAPI子集和Java虚拟机统称为JRE。JRE是Java运行环境,JDK是Java的开发环境。所以在编写运行Java程序时必须搭载JDK,因此在电脑中安装JDK即可正常编写Java程序,也能正常运行。而JDK包含了许多与Java运行不相关的文件,内存空间占用大,所以在运行一般的Java程序只安装JRE而不安装JDK。2.3安卓系统

2.3.1安卓系统结构Android操作系统框架自上而下分为:Android应用层、Android应用架构层、Android系统运行层、Linux内核层,如图2-2所示。图2-3Android操作系统框架安卓系统大多由Linux内核实现一些基本系统功能,如系统占据内存、系统运行进程、系统文件和用户的管理以及进程间的通信等。智能手机现在大多有摄像头、控制屏幕和其他硬件设备。Linux内核层还为这些硬件提供了各种驱动程序。该层提供的接口是硬件抽象层(HAL)。基于这样的规范下,手机厂商可以实现系统迁移,即根据本机器硬件特点做一个与之不同的硬件驱动程序,凭借此接口支持上层。安卓系统库里在系统运行时层存储了大量的系统功能和组件,上层在系统运行过程中可以调用这些功能和组件,安卓的系统运行在一个名为“Dalvik虚拟机”的虚拟机上。应用程序框架层主要表现在安卓系统对移动设备应用程序。它将进程和内存管理的概念隐藏在系统中,并根据不同的应用需求抽象出活动(Activity)、服务(Service)、内容提供商(Contentprovider)和广播意图接收者(Broadcastreceiver)、广播接收器(IntentReceiver)这些组件是应用程序的基本元素,一些基本的通用功能如移动通话、资源分配与管理、窗口切换、软件安装与卸载、手机定位等。该层以Java的形式提供了安卓应用程序开发的框架和接口。应用层是安卓操作系统框架的顶层。软件开发者通过Java语言和底层框架接口,在安卓平台上开发各种特色应用。图2-4安卓系统架构应用2.1.2安卓应用开发1.安卓应用程序结构安卓程序包括五方面:(1)活动(Activity)(2)广播意图接收者(BroadcastIntentReceiver)(3)服务(Server)(4)内容供应商(ContentProvider)(5)广播接收器(IntentReceiver)活动(Activity):应用程序表示层,类似浏览器的一个页面或者是我们手机的一个屏幕展示。当用户要对我们的系统做出一些指令,实现用户与计算机交流,如输入互动信息,需要在Activity中添加view。应用程序和Activity之间是一对多的关系,每个Activity活动时间都有时间限制,通过这些Activity之间的跳转可以实现设备上各个页面信息传输,呈现不同的网页或者手机界面。广播接收器(IntentReceiver):这一结构能够一次性对所有等待处理的对象执行抽象描述。Intentreceiver与上层activity联系,基于这一结构activity和activity才能进行跳转,用户界面切换。(动作)action和(动作)action产生的数据信息(data)是IntentReceiver的基础结构。他包含的IntentFilters是用来描述Intent能够用来处理哪些操作。广播意图接收者(BroadcastIntentReceiver):对外部事件做处理。BroadcastReceiver并不能产生一个有效的用户界面,执行这一操作时,用户并不能看到具体流程。自动启动应用程序来响应某个收到的Intent,这个特点让BroadcastReceiver成为了事件驱动的应用程序的最佳选择。服务(Service):运行在后台的应用程序。Service组件在运行时没有UI,它们可以更新数据源和Activity、触发通知和广播Intent。内容供应商(ContentProvider):每个ContentProvider都自动生成一组标准的接口通过这些接口实现应用程序之间共享数据,应用程序保存或读取ContentProvider的各种数据类型,将自己内部信息分享到外界。对于网络外其他的应用程序来说,数据的存储方式、存储位置并不重要也无需访问,访问数据只需在ContentProvide生成的r接口中访问。但这一操作涉及到权限问题,在实际数据访问中需要提前获取适当的读取权限。Android应用程序开发基于Java语言,对于现在不断更新变换的手机开发系统,开发工具、环境、平台对软件研发者技术要求越来越高,Google公司提供海量技术支持:AndroidSDK应用程序开发工具包、AndroidNDKC/C++应用程序开发工具。Android应用层和应用框架层编译语言都是基于Java语言,系统运行库和内核这两层是用C/C++语言进行编译,这四层框架交互连接是通过JNI接口建立,具体的实现方法是:处于上层的Android应用层和应用框架层通过Java语言程序通过调用底层系统运行库和Linux内核层的函数库实现Android应用程序开发。用户可通过AndroidNDK和JNI接口使用C/C++语言进行Android应用程序的开发。开发者在编译完成一段Android应用程序源码后打包形成独立的“.apk”文件。这个文件非常重要,包含应用程序二进制代码、配置文件、资源文件等,当用户要通过Android平台安装应用程序,“.apk”文件是基础配置。编写的程序没有这一文件,无法生成。2.Android应用程序开发环境Eclipse+ADT+AndroidSDK的开发配置在开发圈上是当前主流的开发工具以及配套组件。Eclipse是开源的,最初主要用Java语言,它核心小,所有功能都以插件的形式附加于Eclipse核心之上,但目前已经有经验丰富的开发者利用插件在这一平台使用其他计算机语言如python和C++。ADT也是其中用来做Android软件开发的工具包,这个工具插件运用于Eclipse中开发Android应用程序,Google推出AndroidSDK工具为Android开发提供开发工具的升级或者变更,向开发者提供了必要的库文件以及其它开发中需具备的工具。如图2-3所示。图2-5Android应用程序结构2.2远程协助原理和技术2.2.1基于C/S结构的远程协助技术C/S结构指客户机和服务器结构,属于软件系统构架,这一结构在客户端和服务器端都需要进行逻辑处理,因此设备对硬件要求高,后台将系统进程按具体需求合理分配到客户端和服务器端,大大降低系统花费在通讯上的成本。目前市场上应用软件系统基本上是C/S结构,客户机,服务器应用程序能进行相同的业务处理,即使应用模块有差异,也可以共享逻辑组件,这就使得系统内部和外部用户都能访问进入刷新的应用系统,将现有应用系统中的逻辑进行扩展。C/S工作模式常用于两台距离较远的设备上,客户端程序的主要工作是产生数据,存放在客户端软件内存中,再通过接口调用产生的数据发送到客户端操作系统,客户端操作系统收到数据再利用指定的协议发送数据。通过网络传输至服务器端;Server程序的工作是在接收客户程序提出的服务请求后,进行相应的处理,再将结果返回给客户程序。这种模式如图2-4所示。图2-6C/S模式工作流程请求客户端服务器请求客户端服务器响应响应早期C/S体系结构由于其结构的不完整性,在某些特殊条件下在Client端和Server端都依靠特定的条件支撑才能实现。C/S结构的基本原则是“功能分布”原则。将计算机进程中的任务划分成若干个不同的子任务,分配至其他的计算机上分工完成。客户端主要任务是对数据进行处理,数据表示和用户接口功能;服务器端主要任务是运行DBMS,对数据库进行查询管理,显示用户操作界面。C/S结构的最大优点是交互性强,客户端设备处理功能强大,大量任务都先在客户端设备处理结束后再次提交到服务器。这一流程极大的好处就是客户端处理问题效率高。具体表现在以下两点:1.方便处理大量数据,响应速度快。C/S体系结构的数据库分为两部分:客户应用程序、数据库服务器程序。在数据库服务器程序运行的设备,也称为应用服务器。当服务器端程序启动后,就保持等待状态直到另一端程序发送连接请求。与之对应的称为客户电脑,客户应用程序在用户自己的电脑上运行时,客户应用程序开始自动寻找服务器程序前需要对数据库中的数据检索,找到相应的服务器端数据信息,向服务器发出连接请求,另一端服务器程序根据系统设定以及工作人员操作作相应指示,返回结果。2.对数据储存管理公开透明。数据库应用中,服务器程序和客户应用程序各自对数据储存管理进行自己的操作,不同的前台应用不能违反的网络协议规定,在服务器程序中集中实现。所有对于工作在前台程序上的最终用户都可以看到工作流程以及内部信息,对于后台运行的程序两者并不影响,只需要运行他们分配到的系统任务。在客户服务器架构的应用中,绝大多数工作量由服务器和网络完成,前台程序也需要一定的规模。在C/S体系下,数据库不能对外开放、也不具备专业性,它是独立的,受指定部门管理。2.2.2基于B/S架构的远程控制技术B/S架构指浏览器/服务器架构模式。随着Internet技术的大力发展,web兴起,基于C/S架构进行变化和改进形成的新的架构称为B/S架构。用户在这种架构下的工作界面是基本上通过万维网浏览器实现,是客户端最主要的应用软件,主要事务逻辑在服务器端(Server)实现,只有相当少量的事务逻辑在前端(Browser)实现,形成三层3-tier结构。C/S架构将系统开发、维护和利用流程简明化,它将系统功能实现的中枢部分发送到服务器上完成,而客户机上只要安装一个浏览器(Browser)通过WebServer同数据库进行数据交流。这种操作模式分布性强,直接放在局域网上,为客户端设备减压,客户端零维护,业务扩展便利,开发简单,共享性强。如图2-5所示。图2-7B/S技术工作流程B/S模型是近几年正在兴起的软件系统构造技术,在浏览器技术的不断发展和完善下实现不依赖繁琐、特定的软件也能实现的开发功能,提高运行效率,降低开发成本。在B/S架构支持下,远程协助变得更加易于操作,不再是只能使用专用客户端就能实现,只要带有浏览器就可以随时随地的进行远程协助,远程控制工具的机动性有效加强。凡事都有利亦有弊,B/S的灵活性,使得其安全保障上有一些欠缺,比C/S架构较薄弱。C/S架构系统具有一定封闭性,适用性窄,用户群固定,只有两层传输,而不是中间有多层架构,界面和操作丰富,客户端操作可以随意排列,满足客户需要,此外客户端程序需要安装才可以使用,安全性得到保障,因此,在实际的远程协助开发中,为了加强信息安全性,远程控制工具一般采用C/S架构实现。3系统分析与设计3.1系统总体结构设计本设计是用C/S架构实现,实现主要方式为:在服务器端和客户端设备上安装另一端设备上的程序。这一操作流程是先开启主控端设备,然后对被控端设备上执行一些命令,使被控端程序收到访问请求,在命令从主控端发出和被控端接收这一流程中,主控端会发送对应的控制命令到被监控端配置的UDP端口,被监控端接收到控制命令后,主动开启自己的TCP端口去对主控端开启的TCP端口发送连接请求,且对被控端发送的对应访问请求做出相应的操作。基于这样的操作流程下实现一个简单的远程协助功能。在这个远程协助服务中,主控端使用各种远程控制功能向被控端发送远程协助命令,能够对被监控端设备中的各种应用程序执行相应的基本操作。如图3-1所示。图3-1终端设备结构采用c/s模式,客户端和服务器端两者各自分配到相应软件功能。在应用程序开发中,这种结构因为结构简单(只有两层)应用与服务两者分离,系统具有极强的灵活性和稳定性。被控端对主控端发送的命令进行处理,并反馈命令处理结果;主控端负责显示处理结果,包括用户登录界面和显示被控端命令处理发送来的结果;在这一操作流程下,两者之间的数据进行交换,两者数据通信模块共同建立起交换通道。通过点到点的直接控制监控,可在线实现远程协助。主控端包含模块:输入信息模块,显示命令处理结果模块,通信模块。输入信息模块主要任务是将用户界面的事件传送到通信模块,通信模块将命令信息发送到被监控端;被监控端执行操作后返回的成功或失败信息交由主控端命令处理结果显示模块根据信息的格式进行显示。被控端包含模块:通信模块,命令处理模块。被控端在监听状态下接收到合法的连接请求,就会进行命令接受,自动打开UDP端口,连接建立成功后,通信模块对接收到的主控端发来的命令信息,命令处理模块对命令信息分析处理做出响应,并将结果反馈到主控端。3.2系统逻辑流程在被控端上安装客户端程序时,安装的客户端程序会自行启动,并开启UDP端口,如果防火墙、电脑管家以及其他杀毒工具阻止这一进程,就尝试开启配置其它UDP端口重复进行之前的操作,如果反复采用这些方法后依旧显示启动失败。可以尝试将开启的UDP套接字传入,然后开启命令接收线程,将自己添加到自启动项,并改名为Explorer.jar。这一方法可以进行命令获取,并处理获取命令。安装服务器程序在主控端时,主控端先启动控制窗口类,这时主控端安装在服务器端的程序会出现一个启动的页面,用户在这个登陆页面窗口处输入被监控端的IP地址。主控端开启一个TCP端口发送一条初始化命令(命令格式:ordername:port;ordername:命令名;port:主控端打开的TCP端口号)到被监控端的IP地址配置的UDP端口。开启TCP端口后主控端进入监听状态,如果连接超时则连接失败,需要重新连接。当连接成功时,主控端程序开始读取被监控端的信息并自动捕捉被监控端的画面信息,主控端可以对被控端上的应用程序进行屏幕监视和执行一些简单的控制操作。当被监控端UDP端口成功启动,主控端设备启动对该端口的侦听工作,一旦收到UDP端口发送来的命令文件,主控端就立刻对命令文件及时抓取分析判断发送来的命令文件是否对主控端有实际的控制作用(命令格式:ordername:port)如果这段命令对主控端没有任何作用,就返回空指令且继续回到监听状态在侦听到命令是抓取分析重复之前的流程。若截取来的命令执行后对主控端有影响,系统就会从主控端中调取对应的命令处理模块,在这段命令操作执行后将处理结果反馈至主控端。主控端收到命令处理结果后打开一个TCP端口,向被监控端的UDP端口发送一条“被控端处理连接信息”的UDP命令(命令格式:screen:TCPPort)。如果该命令长时间没有得到被控端回应,则连接失败,自动断开,弹出连接失败的消息,返回初始登陆界面。得到回应后,被监视端发送连接申请,生成Soket对象,且socket对象中有被监视端提交的图像信息,读取图像信息后被控端的画面信息会出现在主控端的屏幕上,在一定的时间周期内(以秒为单位),再次访问被控端屏幕读取,更新图像信息,以达到被监控端屏幕被持续接收。 主控端向被控端发送UDP命令(格式:control:TCPPort),这一命令主要的功能是获取主控端开启的TCP端口号。被控端输入获取到的主控端开启的TCP端口后,两台终端设备连接成功,被控端可读取主控端事件对象信息,并进行类型判断、重演。连接成功两台设备会执行一系列操作,被控端还需要判断主控端开启的TCP端口是否正常开放,如果端口关闭,主控端和被控端两台设备断开连接,远程协助结束。所以在两台设备远程协助时,需要保证TCP端口在通信中始终是正常开启状态,两台设备连接时,主控端仍能对被控端执行控制命令,被控端依旧可以读取主控端事件信息。4系统实现方法与技术4.1通信模块实现1.Socket编程数据通信模块内的数据通道是由socket编程编译的。Socket编程相对轻松便捷,将网络中底层的通信细节屏蔽;socket(套接字)是应用层和TCP/IP协议族通信的中间软件抽象层,它是一组接口,计算机之间进行通信的一种约定或一种方式实现,通过socket这种约定,一台计算机可以接受其他计算机发送来的数据,也可以发送数据给其他计算机。在发送和接收数据机制时,socket可以为两端设备提供打开、计算和关闭会话的功能。Socket主要支持TCP/IP协议网络通信的基本操作,在本项目中,主要采用C/S架构,client端和server端运行Windows操作平台下,client和server两端之间所有需要执行操作的命令和需要传输的数据信息都可以使用JavaSocket编程实现。2.通信建立socket()函数用来创建一个Socket套接字。两台计算机之间的通信相当于两个套接字通信,因此无论是服务器端还是客户端这两端都需要调用一个独立的套接字,且调用的套接字是不同的。前期的论述中提到在主控端开启一个TCP端口,被监控端检测到开启一个被控端IP地址对应的UDP端口与主控端TCP端口主动连接,为什么不能在被控端执行这一操作呢,因为在被控端直接开启一个TCP端口具有一定的安全隐患,一旦系统检测到被控端TCP端口被打开,防火墙和系统安装的杀毒软件就会强行终止后续行为,这一控制将无法实现。让主控端去和被控端连接这样的监控功能安全隐患小,不受太多权限阻止,确保两台设备的交流可以成功实现,提高运行效率。主控端设备需要创建一个ServerSocket对象,ServerSocket的方法在调用时accept开启监听功能。当访问的是被监控端,返回socket对象,服务器端和客户端进行数据交换。此外,连接必须要在被控端的同意下进行,连接后,客户端与服务器两端设备可以相互发送数据信息到对方的设备上。返回socket对象后,主控端成功建立Readobj对象,在被监控端上实现消息的接收和发送,即Readobj对象建立成功。两者完成远程协助后,调用ServerSocket和socket对象中的close关闭套接字,通信断开。图3-1socket通信原理主控端主要通信代码:publicclassClientextendsThread{ privatestaticSocketsocket=null; privatestaticRobotrobot=null; publicstaticvoidmain(String[]args){ booleanisConn=false; Clientclient=newClient(); do{ isConn=client.doStart(); }while(isConn==false); client.start(); if(socket!=null){ ReadObjreadObj=newReadObj(socket,robot); readObj.start(); } }被监控端主要通信代码:serverSocket=newServerSocket(serverPort); }catch(IOExceptione){ e.printStackTrace();4.2系统屏幕画面传输的实现在远程协助过程中主控端设备需要获取被控端设备GUI(图形界面)界面,在远程协助中,我们在获得屏幕画面时需要不停截取有效画面,将这些截取获得的有效画面集中收录到一个大的图像文件夹中。目前,各大平台下,截取屏幕的软件方式和工具并不少见,比如各大手机商都有自带的截屏录屏工具、HyperCam、Windows操作系统下截屏通过PrintScreen键,将屏幕截取至剪贴板可直接保存为jpg格式的图片。但这些工具软件在运行过程中,工作人员需要集中精力,等候直到预期图片出现进行抓取,这耗费人力且过程繁琐。所以,在我们在对Java应用程序进行操作时,主控端设备想要获取正在运行的被控端的页面信息,需要确认被控端设备上应用程序和各种工具是否在正常运行。在我们研究的这个Java应用程序中,需要设计一个功能可以自行截取有效界面,将被控端设备GUI界面保存到一个集中图像文件夹中,然后通过网络将所有的图像信息发送到主控端设备上。在本段开头提到的市面上已经流行的各大操作系统自带的截图工具和市面上常规的软件与我们研究的Java应用不能有效结合。所以我们在对这项应用程序设计中需要添加一个可以自行抓取屏幕并保存抓取屏幕图像的功能。“截图”这一功能不难实现,是直接运行在“裸机上”最基本的系统软件。其实,截图这一功能在Java应用程序中并不难实现。在JavaJDK1.5.0中提供了一个Robot类。该类用于产生与本地操作系统有关的底层输入、测试应用程序运行或自动控制应用程序运行。构造PicturePanelJavabean类设计出用来抓取屏幕界面的相机publicPicturePanel(UserGUIgui){ this.gui=gui;//抓取全屏 Object[]items={"Backcamera","Frontcamera"}; /*定义主控端被控端抓取屏幕*/ splitPane=newJSplitPane();//更新图像信息 splitPane.setResizeWeight(1.0); GroupLayoutgroupLayout=newGroupLayout(this); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(Alignment.TRAILING) .addGroup(groupLayout.createSequentialGroup() .addContainerGap() .addComponent(splitPane,GroupLayout.DEFAULT_SIZE,501,Short.MAX_VALUE) .addContainerGap()) ); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(Alignment.TRAILING) .addGroup(Alignment.LEADING,groupLayout.createSequentialGroup() .addContainerGap() .addComponent(splitPane,GroupLayout.DEFAULT_SIZE,400,Short.MAX_VALUE) .addContainerGap()) ); panel=newJPanel(); splitPane.setLeftComponent(panel); panel.setBorder(newEtchedBorder(EtchedBorder.LOWERED,null,null)); imgLabel=newJLabel(); panel.add(imgLabel); panel_1=newJPanel(); splitPane.setRightComponent(panel_1); list=newJList(); list.addMouseListener(newMouseAdapter(){被监控端向主控端发送命令传输数据,该功能的实现中构造了类:commandFileSendercommandFileSenderJavaBean代码和说明如下:publicvoidcommandFileSender(Stringimei,shortcommand,byte[]args,Stringdir,Stringname){ intchannel=channelHandlerMap.get(imei).getFreeChannel(); if(!channelHandlerMap.get(imei).registerListener(channel,newFilePacket())) gui.logErrTxt("ERROR:channel"+channel+"isalreadyinuse!"); channelHandlerMap.get(imei).registerHandler(channel,newFileHandler(channel,imei,gui,dir,name)); //gui.saveFileChannel(imei,channel); byte[]nullArgs=newbyte[0]; if(args==null)args=nullArgs; clientMap.get(imei).toMux(command,channel,args); }主控端与被控端连接成功后:while(connected){ try{ //System.out.println(""); //buffer=receiver.read(); buffer=receiver.read(buffer); try{ if(demux.receive(buffer)){ //System.out.println("Restant:"+buffer.remaining()+"Position:"+buffer.position()+"Limit:"+buffer.limit()); pact(); } }catch(Exceptione){ connected=false; /* connected=false; try{ clientSocket.close(); mainGUI.deleteUser(imei); }catch(IOExceptione1){ }*/ server.getGui().logErrTxt("ERROR:

温馨提示

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

评论

0/150

提交评论