Suneo Wong

尝试一切可能!

[远程桌面控制软件系列之000] 原理解析

Java 0 评 196 度

背景:

这几天居家隔离,想着之前的远程控制软件不太好用,要么收费,要么难用,之前也实现了安卓的远程控制,想着自己写一款适用于PC之间的通用远程桌面控制工具。

语言:

思来想去加上调研和自己熟悉的情况,决定采用Java来实现,具体原因有如下几点:

  • 个人相对于C、C++,本身对Java熟悉一点。
  • 为了之后实现安卓端,可以复用部分代码。
  • Java自带的Robot可以很方便实现远程控制,已经包含屏幕截屏,图片编码,用户事件处理。
  • 可能可以跨平台,关于资源占用,现代的21世纪(0202年)的电脑,应该都用上了SSD和4G+的内存了。
  • 其他...

知识储备

远程控制系统主要分为两个端:被控端、控制端。

  1. 首先,我们看看被控端需要做什么?

    • 通过socket/websocket接收远程控制请求
    • 获取屏幕截屏
    • 对截屏进行编码压缩(JPEG|自定义协议)
    • 通过socket/websocket发送截屏
    • 通过socket/websocket接收控制端的用户事件
    • 执行用户事件
    • 以上步骤循环
  2. 然后,我们看看控制端需要做什么?

    • 通过socket/websocket发送远程控制请求
    • 通过socket/websocket接收截屏
    • 把截屏在本地渲染出来(Java Canvas|Direct3D|OpenGL)
    • 通过socket/websocket发送用户事件
    • 以上步骤循环
算法:图像质量评估