远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统、PC版QQ的远程演示功能等都属于远程屏幕监控系统。监控系统的原理是经过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来的过程。本论文实现的是一个多客户端的远程屏幕监控系统。html
本论文第一部分对系统进行项目分析,包括需求分析、可行性分析、相关技术分析,大体介绍了整个项目须要作的工做以及须要掌握的技术,介绍了Socket通讯原理、截屏原理、Swing树、系统托盘、自定义JPanel实现显示监控图像以及多线程的知识。java
第二部分分别对系统托盘模块、自定义协议模块、获取屏幕截图模块、连续发送与接收图片模块、登陆、退出模块、多客户端处理模块、Swing树模块、自定义JPanel模块进行介绍。我没有直接搬上一大堆的理论知识,而是先简要介绍模块功能,而后按照正常思考的思路去实现项目须要的功能,而且去分析实现这个功能的必要性。遇到问题以后就分析出现这个问题的缘由以及考虑如何去提高效率、减小存储空间等一系列优化问题。而后经过最后的分析给出一个优化后的解决方案,同时我将本身当时思考的错误点也罗列了出来,对多个处理方法都给予了尝试。针对每一个模块都给出了功能的实现详细步骤以及示例代码。数组
第三部分是Web服务器环境配置以及程序使用说明。本项目是远程屏幕监控系统,若是要测试的话,服务器端的程序是须要部署在服务器上的,因此我将本机Web服务器环境配置的方法也讲解一下,另外还有关于本程序代码如何打包等知识都有讲解。服务器
第四部分是我在写项目的过程当中的犯的一些错误以及项目的难点,第五部分是对该系统后续的一些功能的设想,第六部分是个人一些感想,第七部分是项目运行效果的展现。网络
关键字:屏幕监控;Socket;Swing;自定义协议;Web服务器环境配置多线程
项目的初始阶段就是对整个系统进行预估,这有利于咱们对整个系统的理解,屏幕监控系统须要实现的功能有:socket
客户端登陆、退出工具
客户端截屏以及连续发送图像测试
客户端系统托盘功能优化
服务器端连续接收图像以及客户端其余请求
服务器端显示链接用户的用户树
客户端退出后用户树刷新
客户端发送图像后显示在服务器端
需求性分析里提到的功能可否实现呢?咱们在这里进行讨论:
经过构造自定义协议实现,都是经过将这些请求构形成协议从而发送到服务器
截屏功能经过Robot类实现,而后将BufferedImage转化为字节数组输出流,再转化为字节数组,并以协议的方式发送到服务器实现图像的连续发送
使用系统托盘对象SystemTray来实现
能够经过自定义协议工具类提供的解析数据的方法解析出数据,并根据消息类型进行相应的处理
用户树使用JTree实现,DefaultTreeCellRenderer能够设置树的外观,为JTree设置节点选中监听器能够监听节点选中事件
用DefaultTreeModel的reload()方法实现
能够自定义JPanel,经过paint(g)方法绘制图片
网络上的两个程序经过一个双向的通讯链接实现数据的交换,这个链接的一端称为一个socket,java的API提供了对Socket的支持。
网络协议为计算机网络中进行数据交换而创建的规则、标准或约定的集合。为了知足咱们的需求,咱们须要自定义一个协议,并为其提供发送消息、解析消息的功能。
系统托盘是个特殊区域,一般在桌面的底部,项目中涉及到了对系统托盘的一些操做,咱们为客户端提供系统托盘功能,能够方便用户关闭监控。
流是一种抽象概念,它表明了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操做称为提取操做,而向流中添加数据的操做称为插入操做,用来进行输入输出操做的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。咱们主要使用的有DataOutputStream、DataInputSream、ByteArrayoOutputStream等。
参考文档和完整的文档和源码下载地址: