毕业设计 毕业论文 计算机科学与技术 计算机远程控制软件的设计与开发

上传人:仙*** 文档编号:29040597 上传时间:2021-09-24 格式:DOC 页数:53 大小:564.50KB
返回 下载 相关 举报
毕业设计 毕业论文 计算机科学与技术 计算机远程控制软件的设计与开发_第1页
第1页 / 共53页
毕业设计 毕业论文 计算机科学与技术 计算机远程控制软件的设计与开发_第2页
第2页 / 共53页
毕业设计 毕业论文 计算机科学与技术 计算机远程控制软件的设计与开发_第3页
第3页 / 共53页
点击查看更多>>
资源描述
xx学院本科生毕业论文 计算机远程控制软件的设计与开发Computer Remote Control Software Design and Development院 系计算机科学与工程学院专 业计算机科学与技术学 生 班 级xx级xx班姓 名xx学 号xx指导教师单位计算机科学与工程学院指导教师姓名xxx指导教师职称讲师计算机远程控制软件的设计与开发计算机科学与技术2009级00班 xxx 摘要随着网络技术的飞速发展,远程控制协助软件越来越受到人们的重视。计算机远程控制技术是计算机系统管理人员在异地通过计算机网络连接目标计算机,由本地计算机对远程计算机进行管理和维护的行为。基于JAVA 与Socket编程技术结合的C/S远程监控系统软件突破了空间的限制,使用者不用亲自到目标地点,直接通过网络就能实现对被控机器的监控,并且有着友好的操作界面。本系统采用Java网络编程和Java图形编程实现。本系统在开发过程中,将计算机网络技术与远程控制理论基础相结合。本远程控制软件包括远程资源管理器、远程监控、远程CMD控制台三大模块,实现了对被控机磁盘文件的上传、下载、删除,实现对鼠标、键盘的模拟以及屏幕截取,实现了远程执行DOS命令,实现了远程关机。本系统从设计最初到具体实现、优化、测试都严格遵循软件工程的思想。 关键词:Java;Socket;C/S;远程控制;屏幕截取;DOS命令。Computer Remote Control Software Design and DevelopmentComputer Science and Technology xxx-xx xxxxSupervisor xxxAbstract With the rapid development of network technology, the remote control to assist software by more and more peoples attention. Computer remote control technology is a computer system management personnel in different through the computer network connection target computer, the local computer to the remote computer management and maintenance of behavior. Based on JAVA and Socket programming technology in combination with C/S remote monitoring system software broke through the limitation of space, users need not personally to the target location, directly through the network can achieve for the controlled machine monitoring, and have a friendly operation interface. This system uses Java network programming and Java graphical programming realization. This system in the development process, the computer network technology and remote control theory foundation combined. The remote control software including remote resource manager, remote monitoring, remote CMD console three modules, realize the accused of machine disk file upload, download, delete, realize the simulation of the mouse, keyboard and screen capture, realized the remote implement DOS command, realized the remote shutdown. This system from design to implementation first, optimization and testing are strictly follow the concept of software engineering. Keywords: Java;Socket; C/S; Remote control; Screen capture; DOS command.目录1 引言11.1 远程控制软件的研究现状和前景21.2 课题研究的目的和意义31.3 课题研究的主要内容32 系统分析32.1 系统功能分析32.2 系统软件模型42.3 系统的开发平台42.3.1 Eclipse介绍42.3.2 Java语言43 主要技术支持53.1 Socket53.2 Socket分类73.3 基本套接字函数调用83.3.1创建套接字93.3.2建立套接字连接93.3.3数据传输93.3.4关闭套接字113.4 C/S结构特点及发展113.5 TCP/IP体系结构123.5.1网络层123.5.2互联层123.5.3 传输层133.5.4应用层133.6 多线程133.7 Java远程控制的基本原理144 C/S模式远程控制系统的设计实现164.1 主要实现功能164.2 Client(监控端)设计164.2.1文件操作client.files174.2.2远程控制台client.cmd214.2.3远程监控client.view234.2.4关机264.2.5退出264.2.6帮助264.3 Server(被控端)设计274.3.1文件操作(server.files)274.3.2 CMD控制台(server.cmd)324.3.3远程监控实现(server.view)334.4软件测试与分析334.4.1软件测试的重要性334.4.2测试实例的研究与选择344.4.3测试环境与测试条件354.4.4系统部分模块测试情况355 总结与展望36致谢37参考文献38xxx学院本科生毕业论文(设计)1 引言现如今,随着网络的快速发展,越来越多的企业都建立了自己的内部网络。面对众多的部门联网计算机,对于人数相对偏少的网络管理员来说,如果每台计算机都需要亲临维护既浪费时间,工作效率也极低,因此他们希望对整个网络上的计算机能实现远程控制操作;也希望能实现远程传输文件操作;同时还能查看实时的计算机运行状态和进行一些相关操作;希望能够传输文件;希望能够防止病毒的蔓延、非法程序的拷贝、杜绝某些用户的越权或非法操作等。因此,对于一个网络管理员来说,一个合适的远程协控制软件是至关重要的。我们熟知的远程控制技术,最早始于DOS时代,当时并没有现在的条件与技术,而且也网络不发达,市场没有更高的要求,所以远程控制技术没有引起许多人的注意。但如今,随着网络的飞速发展,随着人们对电脑的管理及技术支持的需要的不断提高,远程操作及控制技术越来越引起人们的关注。远程控制一般支持下以下网络类型:LAN、WAN、拨号方式、互联网方式。除此之外,实现远程控制的方式还有通过串口、并口、红外端口等通信方式。对于传统的远程控制软件,一般使用NETBEUI、NETBIOS、IPX/SPX、TCP/IP等协议来实现远程控制。随着网络技术的发展,越来越多的远程控制软件提供通过C/S模式以Java语言来开远程控制软件。对于现如今流行的远程控制软件,一般分两个部分:客户端Client,和服务器端Server。实用方法是,先将客户端安装到主控计算机上,将服务端程序安装在被控制电脑上,然后在主控端电脑上执行Client端程序,并且向被控端电脑中的Server端程序发出信号,建立基于TCP协议的远程服务连接,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,Server端响应接收到的命令并执行相应的操作,我们称这种远程控制方式为基于远程服务连接的远程控制。通过远程控制软件,我们可以进行很多方面的远程控制,包括截取目标电脑屏幕图像、窗口以及进程目录;记录并提取远端键盘事件;可以打开、关闭目标电脑的任意目录并实现资源共享;管理远端电脑的文件和文件夹;关闭或者重新启动远端电脑中的操作系统等。 上面主要表述的一般是一对一的基于远程服务的远程控制实现原理,其实,如今最实用的远程控制软件最理想的模式应该是一对多,即一台控制机可以控制多台电脑。这对于如今的意义就好像一个大型的企业,如果控制端能够直接控制全部电脑,即显示全部电脑目录,再进行一些列的操作,如远程桌面协助,远程资源管理器,都将带来极大的方便。一般的远程控制程序的优点在于,方便技术人员进行远程维护或协助,技术人员再也不用亲临到实地操作,只需通过互联网,就可以方便的进行诸如应用程序的上传,部署,或是对远程故障机的协助操作等等,极大的节省了人力物力,大大的提高了工作效率。当然,凡是有利必有弊,随着互联网的普及,远程控制技术也是如今黑客恶意攻击的主要手段,诸如一些木马控制程序等,不仅侵犯了他人的隐私,也严重的违反了国家法律。但是远程控制技术对于人类日常生活也是很重要的,如何利用好这门技术造福人类,这也是我研究这门课题的意义。本软件就是基于此而设计开发的,能实现以下的基本的远程功能: (1) 查看被控制端的文件目录清单,即远程资源管理器;(2) 拷贝被控制端的文件到控制端,同时也能上传文件到被控端,或删除被控端文件;(3) 强迫被控制端重新启动或关机;(4) 直接执行任何可执行命令,打开应用程序;(5) 控制被控制端的屏幕,在本地直接操作被控制端计算机;而且做了一些必要的安全性考虑。1.1 远程控制软件的研究现状和前景在飞速发展的今天,包括涵盖远程办公、远程教育、远程维护、远程协助以及企业管理等都属于远程控制涉及的应用领域。随着应用领域的越来越广泛,使用的价值也不断提高,市场需求也越来越明显。目前比较出名的远程控制软件例如PeerYou,VCN,Oray等都具有高效的信息交互和传输能力,以及实现跨平台的高效远程控制。C/S模式远程控制软件充分利用网络资源,以普通PC机为控制设备,通过面向对象以及模块化的程序设计,有着低成本、高实用性、可靠性和可扩展性的优点。综合以上原因,我决定通过一定的理论知识与实践来尝试学习此类知识,并且使用Java编程语言结合C/S模式实现一款远程控制软件。1.2 课题研究的目的和意义通过学习远程控制软件的相关技术知识来更深刻的理解TCP/IP协议以及Socket编程原理;通过实现代码的编写来达到对Java语言编程能力的锻炼以及增加对程序代码优化的经验。1.3 课题研究的主要内容基于Windows的远程控制软件开发毕业设计的主要任务是要求做出从系统角度出发的基于C/S开发模式与远程控制技术的实用软件。使用Socket网络编程技术及Java程序开发语言。实现基本的远程控制要求,界面简洁友好。采用面向对象开发技术,严格遵循软件工程设计思想。要求:(1) 基于C/S模式架构;(2) 实现截屏、执行远程CMD命令,远程关机等功能;(3) 软件安全、稳定、可靠;(4) 至少能在两台计算机之间进行控制演示;(5) 界面简洁友好。2 系统分析2.1 系统功能分析本远程控制软件由Server(服务器)和Client(客户端)两部分组成,并且需要使用者在服务端与客户端同时运行相应程序来实现,具体步奏如下:第一步,服务器端运行相应程序,使服务器端口处于监听状态,这里本远程控制软件使用了三个端口(30018,30011,30012);启动服务器后,被控端计算机则处于等待连接状态。第二步,运行客户端程序,输入被控端IP,服务端准备响应,然后程序自动连接到指定IP的远程计算机。到目前为止,整个连接步奏则完成,这个程序之间已经建立了基于TCP协议的远程服务连接,进入使用界面后便可进行相应操作。2.2 系统软件模型本系统采用C/S程序开发模式设计,由Server端(服务端)与Client端(客户端)两部分组成,下面是结构图:图 2.1 程序结构图Fig.2.1 The chart of program structure 对客户端的设计,一直遵循面向对象的设计思想,坚持界面友好,易操作;对于服务端的设计则偏于简洁实用,启动后显示界面位于屏幕的右下角,只进行操作的反馈,详尽的设计过程将在接下来介绍。2.3 系统的开发平台2.3.1 Eclipse介绍本软件实用的主要开发工具之一Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。它本身就是使用Java语言开发的,其本身就包含了括Java开发工具(Java Development Kit,JDK),使用Eclipse进行Java程序开发不仅方便管理,而且也能大大提高开发效率。 2.3.2 Java语言早期的Java是使用在家用电器等小型系统的编程语言,被称为Oak。用来解决家用电器的控制和通讯问题,如电视机、电话、闹钟、烤面包机等。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak将要失败的时候,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是现在广为流传使用的Java诞生了。 Java 编程语言的风格非常接近C、C+。Java是一个完全面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的同时舍弃了C+语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(byte code),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 Java 平台是基于 Java 语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿 Java 的 C#语言。3 主要技术支持C/S是当今比较流行与具有发展潜力的技术之一。使用C/S模式设计的客户、服务器应用系统具有系统结构优化、资源利用率高、整体运算速度快的优点,因而得到了广泛的应用。Socket网络编程技术也是当今主要的进程之间的通信方式,它利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。基于C/S模式于Socket网络编程技术,本远程控制程序才能得以实现。3.1 Socket20世纪80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大学Berkeley分校提供资金,让他们在UNIX操作系统下实现TCP/IP协议。在这个项目中,研究人员为TCP/IP网络通信开发了一个应用程序接口(API)。这个API就称为Socket接口。今天,Socket接口是TCP/IP网络最通用的API,也是在Internet上进行应用开发最为通用的API。事实上,Socket(套接字)就是在计算机之间提供了一个通信端口。通过这个端口,一台计算机可以与任何具备套接字的网间计算机进行通信。一个Socke只通信的一端,在这一端上可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程,Socket存在于整个通信域中,与对应的并且在相同域的Socket进行数据交换,即通信。应用程序在网络上传输,接收的信息都通过这个套接口来实现。在应用开发种就像使用文件句柄一样,可以对Socket句柄进行读写操作。开始使用套接字编程之前,首先必须了解什么是网间进程通讯,什么是服务方式,以及C/S软件开发模式。进程间通信的最初概念来源于单机系统。由于每个进程都在自己的地址区域范围内运行,为了保证进程间能相互通信而又不干涉他们自己的工作,操作系统被要求提供相应的设施,如UNIX BSD中的管道(Pipe)、命名管道(Named Pipe)和软中断信号(Signal)、UNIX System V的消息(Message)、共享存储区(Shared Memory)和信号量(Semaphore)等,但都仅限于用在本机进程之间的通信。网间域中的计算机要通信必须解决不同计算机中进程相互通讯的问题。为此,首先要解决的是网间进程标识问题,同一计算机上,不同进程可以用进程号(Process ID)作为唯一标识,但到了网络环境下,不同的计算机中很可能存在拥有相同进程号的进程,比如A计算机存在进程号为101,B计算机也很可能存在进程号名为101的进程。其次,用于网络通讯的协议众多,不同的协议也有自己独有的辨识方式,因此,要实现网间域内计算机通讯还要解决众多协议识别的问题。在网络的分层模型中,各层严格遵循着单向依赖,各层之间分工明确,但又相互协作,他们之间的协作主要体现在各相邻层边缘的应用上。“服务”是描述相邻层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务的提供者,上层是请求服务的用户。服务的表现形式是原语(Primitive),如系统调用或库函数等。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。在国际标准化组织(ISO)的术语中,网络层及其以下各层又称为通信子网,只是实现了点对点之间的通信,没有程序或进程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制、流量控制、数据排序(报文排序)及连接管理等问题。为此提供不同的服务方式:面向连接(虚电路)的服务或无连接的服务。面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立、连接、数据传输及终止连接的过程。在数据传输过程中,各数据分组不携带目的地址,而使用连接号(Connect ID)。本质上,连接是一个通信管道,收发数据顺序一直,内容相同。其中TCP协议就提供面向连接的可靠通信协议。无连接的服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性。提供无连接的数据报服务的常用协议是UDP协议。在TCP/IP网络应用中,两个进程之间的相互通信主要基于C/S模式(Client/Server)。即客户端向服务端发出请求,服务端接收待来自客户端的请求好,调用相应的服务。C/S模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用;其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为两者的数据交换提供同步,这就是基于客户机/服务器式的TCP/IP。3.2 Socket分类TCP/IP的Socket提供下列三种类型套接字。(1) 原始套接字该接口允许对较低层协议,如IP,ICMP的直接访问。它通常用于检验新的协议实现或访问现有服务配置中的新设备(2) TCP流式套接字如果我们需要一个可靠的连接,用来使数据按顺序、无错的发送到目标端,就需要流式套接字。流式套接字提供一种可靠的面向连接地传输方法。数据无重复、无差错,并且按发送端发出数据的顺序进行接收。不管对单个的数据报或者是一整个数据包,流式套接字都提供一种协议的历史传输TCP。除此之外,在数据进行传输时,如果一端的连接断开,则另一端的应用程序会接到通知。流式套接字内设流量控制,避免数据流超限;数据被看成字节流,无长度限制。(3) UDP数据报套接字数据报套接字是提供一种非连接、不可靠的通信方式。在这里的“不可靠”是指发送的数据不能得到保障,也不保障数据按原来发出时的顺序到达目标端。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且顺序混乱。事实上,一份数据可能不止一次被发送。对于基于Java的Socket网络编程的TCP/IP实现,数据报套接字使用用户数据报协议(UDP)。虽然在通常情况下,在同一台计算机上的两个进程或在轻负载的局域网所连接的两台计算机的进程之间进行通信时,可能不会出现数据包丢失或没按照顺序到达及又重复发送的情况,但在编写实用UDP协议进行进程间通信的程序是,应考虑到这些情况,并且能做出应对措施。当然,如果为非常复杂的网络(如Internet)编写通信应用程序,就应该考虑到数据报套接字的不可靠性。如果应用程序不能很好的处理这些问题,很可能导致程序崩溃。尽管如此,数据报套接字在发送数据包或者记录形数据时仍然有用。另外,数据报套接字还提供向多个目的地发送广播数据包的能力。3.3 基本套接字函数调用大多数的数据报套接字应用程序都使用一个规定的事件序列来完成客户应用程序与服务器之间的通信,如下图所示:图 3.1 信息交互Fig.3.1 Information interaction首先服务端与客户端都要创建一个Socket(套接字),然后服务端ServerSocket绑定端口和IP,这样客户端就能使用同一端口表示服务器套接字,然后服务器与客户端建立通信,即Sendto()和Recvfrom()信息交互。下面步奏介绍了套接字使用的步奏。3.3.1创建套接字Java对Socket操作进行了很好的封装,即.ServerSocket类,此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于请求执行某些操作,然后可能向请求者返回结果。在这里我们使用到的构造方法为ServerSocket(int port);该构造方法创建以本机IP为IP地址,以port为端口的套接字,参数port - 端口号;或者为 0,表示使用任何空闲端口。3.3.2建立套接字连接等待连接我们使用了.ServerSocket类的accept()方法,该方法侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。一旦接受到请求,则创建新的套接字与之连接交互信息。3.3.3数据传输有了套接字连接后,我们就可以进行任意的数据传输了。在自定义了Sendto()与Recvfrom()方法后则可进行任意数据传输。Java对传输流进行了很好的封装,这里我们主要用到java.io以及javax.imageio 里面的流操作类:(1) javax.imageio. ImageIO类该类包含一些用来查找 ImageReader 和 ImageWriter 以及执行简单编码和解码的静态便捷方法。主要用于远程图像的传输。read(URL input)方法:返回一个 BufferedImage,作为使用 ImageReader(它是从当前已注册 ImageReader 中自动选择的)解码所提供 URL 的结果。InputStream 是从 URL 中获得的,它被封装在 ImageInputStream 中。write(RenderedImage im, String formatName, ImageOutputStream output)方法:使用支持给定格式的任意 ImageWriter 将一个图像写入 ImageOutputStream。从当前流指针开始将图像写入ImageOutputStream,并覆盖该点之后的现有流数据(如果有)。 此方法在写入操作完成后不会关闭提供的 ImageOutputStream;一个严谨的程序,应该在实用完后对流进行关闭,减轻系统负担。(2) java.io. InputStream类read()方法:从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。(3) java.io. OutputStream类write(int b)方法:将一个 integer(数组长度)写入此流。(4) java.io. File类主要用于文件或目录的操作。File(String pathname)方法:通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,那么结果是空抽象路径名。delete()方法:删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。exists()方法:测试此抽象路径名表示的文件或目录是否存在。isDirectory()方法:测试此抽象路径名表示的文件是否是一个目录。isFile()方法:测试此抽象路径名表示的文件是否是一个标准文件。list()方法:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。mkdirs()方法:创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。listRoots()方法:列出可用的文件系统根。(5) java.lang.Runtime类exec(String command)方法:在单独的进程中执行指定的字符串命令。参数command:一条指定的系统命令。(6) java.awt.Robot类使用该类提供的一系列方法可以模拟鼠标、键盘操作事件以及屏幕截图,达到远程监控的目的。createScreenCapture(Rectangle screenRect)方法:创建包含从屏幕中读取的像素的图像。该图像不包括鼠标光标。mouseMove(int x, int y)方法:将鼠标指针移动到给定屏幕坐标。mouseWheel(int wheelAmt)方法:在配有滚轮的鼠标上旋转滚轮。keyPress(int keycode)方法:按下给定的键。应该使用 keyRelease 方法释放该键。keyRelease(int keycode)方法:释放给定的键。mousePress(int buttons)方法:按下一个或多个鼠标按钮。应该使用 mouseRelease 方法释放鼠标按钮。mouseRelease(int buttons)方法:释放一个或多个鼠标按钮。以上为数据交互使用到的Java类,Java很好的封装了这些操作,使得程序的设计简单又结构性强,更好的体现了Java的面向对象特性。3.3.4关闭套接字在数据交互完成后,都要改关闭不在使用的Socket,本远程控制软件使用了close()方法关闭此套接字。 所有当前阻塞于此套接字上的 I/O 操作中的线程都将抛出SocketException。 套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。 如果此套接字有一个与之关联的通道,则关闭该通道。3.4 C/S结构特点及发展C/S又称Client/Server或客户/服务器模式。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;但两种应用都有着自己的优势,怎么使用取舍取决于对业务的需求。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件, 加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高, 效率低。但是Java的平台无关性可以很好的解决这个问题,实用Java开发的应用程序,不管在什么样的操作系统中都能得到很好的支持。用C/S模式设计本系统的优势在于:(1) 应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和服务器程序。二者可分别称为客户端与服务端。运行服务端的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应服务器,可称为客户电脑,当需要对远程控制端进行操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。(2) 服务端对于业务逻辑进行和很好的封装。对于客户端传来的请求,服务端进行很好的处理,这里我们把处理响应的业务逻辑都封装在服务端里,使得客户端显得非常“瘦小”,是软件实用更加灵活。除此之外,C/S模式设计的软件能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。3.5 TCP/IP体系结构TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、网络互联层和网络层3.5.1网络层TCP/IP模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。3.5.2互联层网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。互联协议将数据包封装成internet数据报,并运行必要的路由算法。这里有四个互联协议:(1) 网际协议IP:负责在主机和网络之间寻址和路由数据包。(2) 地址解析协议ARP:获得同一物理网络中的硬件主机地址。(3) 网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。(4) 互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。3.5.3 传输层传输协议在计算机之间提供通信会话。传输协议的选择根据数据传输方式而定。两个传输协议:(1) 传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。(2) 用户数据报协议UDP:提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,可靠性则由应用层来负责。3.5.4应用层TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。3.6 多线程在一个应用程序中,一些独立运行的程序片断被称作“线程”(Thread),利用它编程的概念就叫作“多线程技术”。多线程技术一个常见的例子就是用户界面。利用线程当用户按下按钮后,方法与主界面流程可以一起往下执行,而不是等待方法执行后才继续往下。在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够同步的处理工作,即工作能同时进行,而不是等待一个方法执行完后再接着执行主进程。对于不同的需求,可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断来实现的。尽管这个方法很有用,但这样的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器来处理,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。如果仅局限于如上的操作,那多线程就太简单了。其实不然,实用多线程必须解决一个重要的问题:资源共享。如果有多个线程同时运行,而且它们都需要使用到这个资源,就会遇到资源共享的问题。例如两个进程不能同时调用同一台打印机打印,必须等一个进程结束运行后另一个进程在进行调用。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源,这就是所谓的进程同步问题。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。使用多线程的好处:(1) 使用线程可以把占据长时间的程序中的任务放到后台去处理,用户界面可以更加吸引人,比如,我在单击了远程控制后,任然能进行资源管理器操作,而不是等远程操作结束后才能进行资源管理器操作。(2) 程序的运行速度可能加快。因为是“同步执行”的,不需要等待,所以可以加快程序的运行速度。(3) 在一些需要阻塞等待操作的程序中,线程是很实用的,如数据传输,等待连接,等待输入等,并不一定要上述方法都执行,主进程才能继续执行,这样带来的方便是非常大的。3.7 Java远程控制的基本原理(1) Socket 、ServerSocketSocket 位于.包中,这是一个对于网络通信来说及其重要的类,无论是那种语言,都会有Socket网络编程的应用方法,存在的差异也仅仅是在表示和组织上有所不同,Socket中文称它为套接字,Java API中可以查看相应的介绍,主要由ServerSocket和Socket之间建立连接。一个ServerSocket构造一对通信套接字方法如下: ServerSocket sr=new ServerSocket(port); Socket sc=new Socket(ip,port); 其中ServerSocket 的accpet()方法十分重要,当一个服务套接字建立之后它会一直阻塞等待一个套接字的请求,直到建立连接。部分计算机网络的书籍对套接字有这样的定义为端口+IP地址;一个套接字是由一个由一个IP地址和一个端口组成的,在网络通信中的底层实现也的确如此,要建立进程之间的通信就必须使用一个未被占用的端口进行等待连接,在连接端口之后才能在该端口上通信,以实现进程间的通信。(2) InputStream 、OutputStream当一个套接字连接成功后就可以获得基于这个套接字的输入、输出流,一切数据的发送和接受都离不开输出、输入流,我们可以通过流封装的方法选择你要输入或者输出的数据类型,通过转换流可以把输入、输出流转换到我们需要的数据传输类型。(3) 认识RPCRPC 是英文远程方法调用的缩写,见名知意,就是在本地计算机上调用远程计算机上的方法或者过程。 既然我们已经能通过Socket进行网间进程通讯,进行数据传输,那么,往更深一层去想,如果是传输命令让计算机做出响应呢?因此,实现这一假设的过程,即为远程控制软件设计的基础思想。在这里Java提供了一个非常好的命令响应的封装类RunTime类,该类提供方法执行诸如CMD控制命令。 Runtime ec=Runtime.getRuntime(); ec.exec(命令); Exec()方法就可以放入你想要运行的命令这样你就可以在机器上运行你的指令了。那么到目前为止,一个基于Java语言开发的远程控制程序的雏形就展现在我们面前了,试想,如果我们能远程调用CMD命令已经相当于无所不能了。以上就是一个简易的Java远程控制的实现,当然本系统的设计要比此步奏复杂许多,但是基本原理相同。4 C/S模式远程控制系统的设计实现4.1 主要实现功能(1) 查看被控制端的文件目录清单;(2) 下载、上传、删除文件;(3) 强迫被控制端重新启动或关机;(4) 直接执行任何可执行命令,打开应用程序;(5) 控制被控制端的屏幕,在本地直接操作被控制端计算机;4.2 Client(监控端)设计Client的界面设计使用的是Java提供的GUI,具体界面如下图图 4.1 客户端Fig.4.1 Client主要包括登录、远程资源管理器、远程控制监视、远程控制台、远程关机、退出以及帮助。主要用于发送相应命令以及处理相应返回信息,具体流程如下图所示:图 4.2 客户端流程Fig.4.2 The client processes4.2.1文件操作client.files文件操作包含客户端的上传文件(SendFile)、下载文件(DownFile),文件一般操作(FileControl)以及初始化被控端磁盘(getIniDrivers)。(1) 初始化被控端磁盘(getIniDrivers)作为资源管理器第一个步骤,首先要初始化磁盘,既获得被控端磁盘驱动情况,具体体现在操作界面右侧的磁盘目录树上,主要实现方法为程序启动之初,接受由Server端发来的磁盘信息,然后解析为磁盘字符数组,再体现到操作界面上。该类主要在初始化的时候调用。主要用到public String getDrivers()方法,该方法接收来自服务器的数据,并转换为字符串数组。然后初始化磁盘数到显示界面,代码如下:for (int i = 0; i countc; i+) pcii = new JPanel();cc.add(pcii);cc1i = new JButton(new ImageIcon(srcclientimgeshd-network.png);cc1i.setPreferredSize(new Dimension(25, 28);cc1i.setRequestFocusEnabled(false); / 设置不需要焦点cc1i.setBorderPainted(false);/ 不绘制边框cc1i.addActionListener(this);pcii.add(cc1i);cc2i = new JLabel(driversi);pcii.add(cc2i);其中driversi就是调用初始化磁盘方法返回的字符数组。(2) 文件一般操作(FileControl)作为资源管理器的重要类,包含了文件操作命令的发向Server端,以及接受Server端返回的操作结果,并且解析为文件数组反馈到操作界面。主要流程为下图所示:等待操作信息(Opera)发送命令接受命令关闭Socket等待操作信息图 4.3 操作流程Fig.4.3 Operation processes该类中包含文件操作的相关方法,比如public String getFiles(String opera)方法,public boolean deleteFile(String opera),public boolean upFile(String opera, String upload)和public boolean downFile(String opera, String download)方法。public String getFiles(String opera)为根据地址获得目录列表的方法,返回字符数组,字符数组包括文件类型,文件名称、文件绝对地址,部分代码如下:InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);String info = ;info = dis.readUTF();is.close();socket.close();if (info != null & info != ) String s = info.trim().split(;);if (s0.equals(tj) files = new Strings.length - 13;for (int i = 0; i = 3) filesi0 = temp0;filesi1 = temp1;filesi2 = temp2; else String t = m.info.getText();m.info.setText(t + n文件信息:port( + port+ )文件读出失败!);return files;该部分代码完成的功能是获取字符串,并根据分好分割成字符数组,每一个字符数组单元再更具逗号再分成二维字符串数组,最后返回这个二维字符数组files,由前台显示出目录。public boolean deleteFile(String opera)方法根据地址删除服务端相应文件,部分代码如下:OutputStream os;os = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(opera);dos.flush();完成功能为将调用该方法的传入的地址参数发送到服务端,服务端完成删除并反馈public boolean upFile(String opera, String upload)方法为上传方法,参数Opera为上传目录地址,upload为客户端上传文件地址,部分代码如下:try if (opera = null | opera = ) socket.close();return false;OutputStream os;os = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(opera);dos.flush(); catch (IOException e1) e1.printStackTrace();new SendFile(socket, upload, this.m).start();其中最为重要的是最后一行new SendFile(socket, upload, this.m).start(),启用了一个新的线程进行传输。public boolean downFile(String opera, String download)方法为下载服务端文件,其中参数opera为下载文件地址,download为保存到本机地址,部分代码如下:try if (opera = null | opera = ) socket.close();return false;OutputStream os;os = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(opera);dos.flush(); catch (IOException
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!