远程屏幕监控系统

远程屏幕监控系统

近期整理代码的时候,发现大二的时候(目前大三)做的几个课程设计还不错,所以把这部分的代码以及设计文档都开源出来,以供后者参考学习使用。

完整代码以及本文的word都在放在了Github上,你可以下载或使用它:远程屏幕监控系统项目地址,如果喜欢的话,就去点个Star

摘要

远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统、PC版QQ的远程演示功能等都属于远程屏幕监控系统。监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来的过程。本论文实现的是一个多客户端的远程屏幕监控系统。
本论文第一部分对系统进行项目分析,包括需求分析、可行性分析、相关技术分析,大致介绍了整个项目需要做的工作以及需要掌握的技术,介绍了Socket通信原理、截屏原理、Swing树、系统托盘、自定义JPanel实现显示监控图像以及多线程的知识。
第二部分分别对系统托盘模块、自定义协议模块、获取屏幕截图模块、连续发送与接收图片模块、登录、退出模块、多客户端处理模块、Swing树模块、自定义JPanel模块进行介绍。我没有直接搬上一大堆的理论知识,而是先简要介绍模块功能,然后按照正常思考的思路去实现项目需要的功能,并且去分析实现这个功能的必要性。遇到问题之后就分析出现这个问题的原因以及考虑如何去提升效率、减少存储空间等一系列优化问题。然后通过最后的分析给出一个优化后的解决方案,同时我将自己当时思考的错误点也罗列了出来,对多个处理方法都给予了尝试。针对每个模块都给出了功能的实现详细步骤以及示例代码。
第三部分是Web服务器环境配置以及程序使用说明。本项目是远程屏幕监控系统,如果要测试的话,服务器端的程序是需要部署在服务器上的,所以我将本机Web服务器环境配置的方法也讲解一下,另外还有关于本程序代码如何打包等知识都有讲解。
第四部分是我在写项目的过程中的犯的一些错误以及项目的难点,第五部分是对该系统后续的一些功能的设想,第六部分是我的一些感想,第七部分是项目运行效果的展示。

关键字:屏幕监控;Socket;Swing;自定义协议;Web服务器环境配置

项目分析

1.1需求性分析
项目的初始阶段就是对整个系统进行预估,这有利于我们对整个系统的理解,屏幕监控系统需要实现的功能有:
a.客户端登录、退出
b.客户端截屏以及连续发送图像
c.客户端系统托盘功能
d.服务器端连续接收图像以及客户端其他请求
e.服务器端显示连接用户的用户树
f.客户端退出后用户树刷新
g.客户端发送图像后显示在服务器端

1.2可行性分析
需求性分析里提到的功能能否实现呢?我们在这里进行讨论:
a.通过构造自定义协议实现,都是通过将这些请求构造成协议从而发送到服务器
b.截屏功能通过Robot类实现,然后将BufferedImage转化为字节数组输出流,再转化为字节数组,并以协议的方式发送到服务器实现图像的连续发送。
c.使用系统托盘对象SystemTray来实现。
d.可以通过自定义协议工具类提供的解析数据的方法解析出数据,并根据消息类型进行相应的处理。
e.用户树使用JTree实现,DefaultTreeCellRenderer可以设置树的外观,为JTree设置节点选中监听器可以监听节点选中事件
f. 用DefaultTreeModel的reload()方法实现
g.可以自定义JPanel,通过paint(g)方法绘制图片

1.3技术点分析
Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,java的API提供了对Socket的支持。

自定义网络协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。为了满足我们的需求,我们需要自定义一个协议,并为其提供发送消息、解析消息的功能。

系统托盘
系统托盘是个特殊区域,通常在桌面的底部,项目中涉及到了对系统托盘的一些操作,我们为客户端提供系统托盘功能,可以方便用户关闭监控。

IO流
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作,用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。我们主要使用的有DataOutputStream、DataInputSream、ByteArrayoOutputStream等。
屏幕截图
使用Robot类实现屏幕截取以及事件回放操作。

AWT与SWING
抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具;以抽象窗口工具包为基础使跨平台应用程序可以使用任何可插拔的外观风格。该项目主要是用到了窗口以及树控件、树的刷新、树的节点外观、节点选择事件处理等技术。

自定义JPanel
JPanel代表一个面板,通过实现一个继承自JPanel的DrawPanel,重写其paint(g)方法实现将图像画到视图上,如果不断修改绘制的图片,在速度达到的情况下可以实现屏幕监控画面显示的功能。

多线程
多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

功能实现

2.1系统托盘模块
2.1.1系统托盘是个什么东西?
系统托盘是个特殊区域,通常在桌面的底部,在那里,用户可以随时访问正在运行中的那些程序。在微软的Windows里,系统托盘常指任务栏的状态区域;在每个系统里,托盘是所有正运行在桌面环境里的应用程序共享的区域。

2.1.2有必要实现系统托盘吗?
回答是肯定的,当前的大部分软件都会提供一个系统托盘让用户更加方便的操作,QQ的系统托盘左键可以打开QQ窗口,右键可以选择退出账号、注销账号、更改状态等一系列操作客户端是负责将屏幕截图发到服务器以及执行一些收到的指令,也需要与服务器端做一些交互,比如:登录、发消息、退出等操作,如果把这些处理操作放到系统托盘里可以增大用户粘性,使用户可以更方便使用系统。

2.1.3怎么实现系统托盘?
JAVA的API提供了一系列关于系统托盘的类与方法,为软件添加系统托盘功能的步骤如下:
a.我们先把图片放到src同级目录下
b.首先获取图片的Image
c.根据Image创建托盘图标TrayIcon
d.创建系统托盘对象SystemTray
e.创建弹出菜单PopupMenu,并为其添加MenuItem以及为MenuItem添加点击事件
f.为托盘图标TrayIcon添加弹出菜单PopupMenu
g.为系统托盘SystemTray添加托盘图标

2.1.4实现系

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值