使用springboot实现远程控制
原理:通过Robot截图,压缩成jpg格式,然后通过websocket发送给前端。
前端显示图像,发送鼠标事件,实现对远程电脑的控制。
再某些情况下,可以用来实现远程控制,目前只是一个雏形。
后端核心代码
/**
* 屏幕采集与鼠标控制
* @author qujia
*
*/
@Component
public class ScreenCapture {
Robot robot ;//采集屏幕
Rectangle screenRectangle;//屏幕区域
public BufferedImage doCapture()
{
if(robot==null)this.init();
BufferedImage image = robot.createScreenCapture(screenRectangle); //采集图像
return image;
}
/**
*
* @param x
* @param y
*/
public void click(int x,int y) {
if(robot==null)this.init();
try {
robot.mouseMove(x, y);//移动到目标点
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);//点击
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);//松开
}
catch (Exception e) {
// TODO: handle exception
}
}
//初始化
private void init()
{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕大小
screenRectangle = new Rectangle(screenSize);//采集区域
try {
robot = new Robot();
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
/**
* 采集主线程
* @author qujia
*
**/
@Component
public class CaptureThread {
private static final Logger LOG = LoggerFactory.getLogger(CaptureThread.class);
@Autowired
ScreenCapture screenCapture;//图片采集对象
Thread thread;
boolean isrun;
/**
* 开始采集线程
*/
public void start() {
stop();
ClientService.screenCapture=screenCapture;//存储采集对象
thread=new Thread(task);
thread.start();
isrun=true;
}
/**
* 停止线程
*/
public void stop() {
if(thread!=null) {
thread.interrupt();
}
isrun=false;
}
/**
* 采集主线程
*/
Runnable task=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (isrun) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();//内存文件
BufferedImage img=screenCapture.doCapture();//采集图像
ImageIO.write(img, "jpg", baos);//写入内存文件
ByteBuffer data=ByteBuffer.wrap(baos.toByteArray());//数据准备
ClientService.sendDataALL(data);//发送到页面
Thread.sleep(100);//休息一下
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
};
}
由于springboot默认将headless设置为true,因此启动的时候需要特别设置headless为false
headless意思就是不需要桌面相关功能,这个项目用到了桌面,所以要设置一下
//启动的时候必须吧headless设置为false
SpringApplicationBuilder builder=new SpringApplicationBuilder(ScreenApp.class);
builder.headless(false).run(args);
前端代码,比较简单,创建websocket,然后收图片,发控制数据
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"></meta>
<title>远程桌面显示</title>
<script type="text/javascript">
var ws;
function initWS(){
if ("WebSocket" in window)
{
ws=new WebSocket("ws://服务器地址/client/web");
ws.onmessage = function (evt)
{
const imageUrl = (window.URL || window.webkitURL).createObjectURL(evt.data);//图片地址
img.src=imageUrl;
};
}
else{
alert('浏览器不支持webscoket');
}
}
var img;
window.onload = function(){
img=document.getElementById('img');
img.οnmοusemοve=msmove;
img.οnclick=msclick;
initWS();//初始化webscoket
}
function msclick(e){
console.log(e.clientX,e.clientY);
var x=parseInt(1.0*e.clientX/img.width*img.naturalWidth);
var y=parseInt(1.0*e.clientY/img.height*img.naturalHeight);
console.log(x,y)
var d='{"ac":"ck","x":"'+x+'","y":"'+y+'"}'
ws.send(d);
}
function msmove(e){
//console.log(e);
var d='{"ac":"mv","x":"+x+","y":"+y+"}'
//ws.send(d);
}
</script>
<style>
*{padding:0;margin:0;}
img{ width:100%; height:100%;}
</style>
</head>
<body>
<img id="img" />
</body>
</html>
使用springboot实现远程控制相关推荐
- rabbitmq和springboot实现智能家居远程控制
一.什么是mqtt协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&qu ...
- SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践
作者 | sparrow 来源 | 阿里巴巴云原生公众号 本文来自 Arthas 2021 年 3 月征文投稿,4 月有奖征文参与方式可见文末. 项目最初使用 Arthas 主要有两个目的: 通过 a ...
- SpringBoot部署项目到Docker仓库
SpringBoot部署项目到Docker仓库 1.开启远程控制端口 Centos7开启方式: vim /lib/systemd/system/docker.service 找到ExecStart行 ...
- SpringBoot开源项目(企业信息化基础平台)
JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...
- 如何利用springboot快速搭建一个消息推送系统
最近在完善毕设的路上,由于是设计一个远程控制物联网系统,所以服务端到硬件我选用了MQTT协议.因为MQTT的发布/订阅模式很适合这种场景.接下来就来聊聊遇到的一些问题以及解决思路吧. 毕设技术栈:sp ...
- 基于Springboot+Vue2前后端分离框架的智慧校园系统源码,智慧学校源码+微信小程序+人脸电子班牌
▶ 智慧校园开发环境: 1.使用springboot框架Java+vue2 2.数据库MySQL5.7 3.移动端小程序使用小程序原生语音开发 4.电子班牌固件安卓7.1:使用Java Android ...
- 基于 SpringBoot + Vue 实现的物联网/智能家居系统
简介 物美智能是一套开源的软硬件系统,可用于二次开发和学习,快速搭建自己的物联网/智能家居系统.硬件工程师可以把自己的设备集成到系统:软件工程师可以使用项目中的设备熟悉软硬件交互. 项目架构 服务端使 ...
- 基于springboot+vue+element-ui开发的大型智慧校园电子班牌系统源码
Java智慧校园系统源码 智慧学校源码 小程序+电子班牌 开发环境:Java+springboot+vue+element-ui+mysql 有演示,可正常上手项目+正版授权. 智慧校园云平台实现了智 ...
- java录音机_GitHub - wylGeorge/RuphyRecorder: 基于Java的录音机(使用基于Rest API的页面操作,方便远程控制)...
RuphyRecorder 配置文件src/main/resources/application.properties server.port=8080 download.passwd=123... ...
- Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-应用订阅端(北向应用)
之前实现了使用Springboot+Netty基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端(南向设备),模拟设备发送的数据给到了AIOT平台,那么在第三方应用也需要去 ...
最新文章
- 成人高考报计算机还是学前教育,成人高考读什么专业比较好 三大热门专业
- 昨天在公司加班,上午好像就是弄一个ftp的linux服务问题
- SpringCloud Greenwich(七)集成dubbo先启动消费者(check=false),然后启动提供者无法自动发现注册
- [导入]在C++ Builder3下实现程序自动运行的方法
- Python-100 | 练习题 01 列表推导式
- 开发经验分享_04_快速熟悉程序(思路)
- PTA-7-5 打印杨辉三角 (20分)(C语言)
- 软件测试之手动测试存在的重要原因
- 个人名片+微信名片二维码 VUE
- poj:2455 Secret Milking Machine 秘密挤奶机(二分+最大流)
- 创新实训(11)——推荐系统实现之基于流行度和新鲜度的推荐
- 计算机神经网络sci,神经网络方向sci期刊
- Gradle | Gradle构建之Groovy语言基础
- STM32F4的LED点灯
- 《李焕英》爆火背后,世界正在奖励那些诚实的人
- 基于坐标变换与随机Hough 变换的抛物线运动目标检测算法
- web 前后台数据交互的方式
- 2345浏览器如何显示浏览器推送内容
- ENVI5.3 影像数据辐射定标及大气校正实验处理-多光谱遥感数据
- JVM原理和调优的理解和学习