【从零开始开发远程桌面连接控制工具】01-项目概述与架构设计
从零开始开发远程桌面连接控制工具 - 项目概述与架构设计
项目维护地址
https://gitee.com/eguid/java-windows-remote-conector
项目开始
我们想要设计一个基于Java开发的Windows远程桌面连接和控制工具,类似于TeamViewer、AnyDesk、ToDesk等远程控制软件。
项目采用纯Java实现,无第三方依赖库,简单可靠,具有以下特点:
- 一体化设计:服务端与客户端集成在一个程序中
- 高清画质可调节:考虑到带宽占用,因此我们采用有损的高压缩比图像传输桌面画面,原画质清晰度可调节,画质越清晰占用传输带宽越大,画质越差占用带宽越少
- 简单易用:界面简洁,操作方便
- 安全可靠:采用令牌验证机制
- 文件传输:支持文件上传功能
技术栈
- 开发语言:Java 8+
- UI框架:Swing + FlatLaf主题
- 网络通信:Socket + ObjectInputStream/ObjectOutputStream
- 图像处理:BufferedImage + ImageIO
- 构建工具:Maven
- 打包工具:Launch4j(生成exe文件)
项目架构
整体架构图
┌─────────────────────────────────────────────────────────────┐
│ Java远程连接器应用 │
├─────────────────────────────────────────────────────────────┤
│ 主程序入口 (App.java) │
│ └── 启动UI界面 (RemoteAssistance.java) │
│ ├── 服务端面板 (ServerPanel.java) │
│ │ ├── 远程控制服务 (RemoteServer.java) │
│ │ └── 文件传输服务 (FileTransferServer.java) │
│ └── 客户端面板 (ClientPanel.java) │
│ ├── 远程桌面显示 (RemoteDesktop.java) │
│ ├── 远程控制客户端 (LocalClient.java) │
│ └── 文件传输客户端 (FileTransferClient.java) │
└─────────────────────────────────────────────────────────────┘
核心模块说明
1. 主程序模块
- App.java:程序入口,设置UI主题,启动主界面
- RemoteAssistance.java:主窗口,包含服务端和客户端两个标签页
2. 服务端模块
- RemoteServer.java:远程控制服务端,处理屏幕捕获和事件转发
- FileTransferServer.java:文件传输服务端,处理文件上传
- ServerPanel.java:服务端UI界面
3. 客户端模块
- LocalClient.java:远程控制客户端,连接服务端并发送事件
- FileTransferClient.java:文件传输客户端,上传文件到服务端
- ClientPanel.java:客户端UI界面
- RemoteDesktop.java:远程桌面显示组件
4. 消息协议模块
- TokenMessage.java:令牌验证消息
- AuthMessage.java:认证结果消息
- ImageMessage.java:图像传输消息
- MouseEventMessage.java:鼠标事件消息
- KeyEventMessage.java:键盘事件消息
- FileUploadMessage.java:文件上传请求消息
- FileUploadResponse.java:文件上传响应消息
- FileUploadResult.java:文件上传结果消息
5. 工具模块
- Utils.java:工具类,包含资源加载、权限检查等方法
- RemoteEventListener.java:远程事件监听接口
项目目录结构
src/main/java/cc/eguid/tools/
├── App.java # 程序入口
├── RemoteServer.java # 远程控制服务端
├── LocalClient.java # 远程控制客户端
├── FileTransferServer.java # 文件传输服务端
├── FileTransferClient.java # 文件传输客户端
├── RemoteEventListener.java # 远程事件监听接口
├── ClientInfo.java # 客户端信息类
├── msg/ # 消息协议包
│ ├── AuthMessage.java # 认证消息
│ ├── TokenMessage.java # 令牌消息
│ ├── ImageMessage.java # 桌面图像消息
│ ├── MouseEventMessage.java # 鼠标事件消息
│ ├── KeyEventMessage.java # 键盘事件消息
│ ├── FileUploadMessage.java # 文件上传消息
│ ├── FileUploadResponse.java # 文件上传响应
│ └── FileUploadResult.java # 文件上传结果
├── ui/ # UI界面包
│ ├── RemoteAssistance.java # 主窗口
│ ├── ServerPanel.java # 服务端面板
│ ├── ClientPanel.java # 客户端面板
│ └── RemoteDesktop.java # 远程桌面组件
└── utils/ # 工具包└── Utils.java # 工具类
核心功能流程
1. 服务端启动流程
2. 客户端连接流程
3. 屏幕捕获与传输流程
关键技术实现
1. 屏幕捕获技术
- 使用
java.awt.Robot类捕获屏幕 - 设置25FPS的捕获频率
- 基于JPEG高压缩比图像数据采集,支持0.1到1之间任意调节压缩比,数字越小压缩比越高,数字越大画质越高。
2. 网络通信技术
- 使用Socket进行TCP通信
- 使用ObjectInputStream/ObjectOutputStream进行对象序列化
- 实现自定义消息协议
3. 事件转发技术
- 捕获客户端的鼠标和键盘事件
- 通过坐标缩放映射到服务端屏幕
- 使用Robot类模拟服务端输入
4. 文件传输技术
- 使用独立端口处理文件传输
- 实现文件上传的安全验证
- 支持大文件的分块传输
安全机制
1. 令牌验证
- 6位数字令牌验证
- 防止未授权连接
- 服务端和客户端使用相同令牌
2. 路径安全
- 文件上传路径验证
- 防止路径遍历攻击
- 磁盘空间检查
3. 连接管理
- 自动清理断开的连接
- 防止资源泄露
- 异常处理机制
开发环境要求
- JDK版本:Java 8或更高版本
- IDE:推荐IntelliJ IDEA或Eclipse
- 构建工具:Maven 3.6+
- 操作系统:Windows(主要支持)
项目特色
- 纯Java实现:无第三方依赖,部署简单
- 一体化设计:服务端和客户端集成,使用方便
- 可调节带宽传输:支持画质调节,从高清画质到高压缩保证速度可任意调节
- 安全可靠:令牌验证和路径安全检查
- 界面美观:使用FlatLaf主题,类似IDEA界面
- 功能完整:支持远程控制和文件传输
下一步学习
接下来我们将深入学习各个模块的具体实现:
- 服务端实现详解
- 客户端实现详解
- UI界面设计详解
- 消息协议设计详解
- 消息协议设计详解
我们将在每个模块中都进行详细的代码解析和实现思路阐述,帮助大家从零开始构建这个项目。
未完待续…
