🚀 简单介绍
本工具是一个基于 Netty 框架开发的高性能文件传输系统,采用多中继智能选择架构,支持文件和文件夹的安全传输。通过广播发现技术实现零配置的局域网直连,支持配置文件和环境变量管理多个自定义中继,并提供默认公网中继作为兜底方案。
🎯 核心特性
- 多中继智能架构:发送端连接所有中继,接收端智能选择最佳路径
- 配置文件支持:~/.croc/relay-config.properties 管理多个中继
- 优先级选择:本地中继 → 外部配置中继 → 默认公网中继
- 端到端加密:AES-256 加密 + 自定义密码支持
🛠️ 技术亮点
- 全局连接管理:防止多发送器冲突,确保传输稳定
- UDP广播发现:3秒内自动发现局域网服务
- 健康检测机制:自动检测中继状态和故障转移
- 完整性校验:MD5 文件完整性验证
⚡ 快速使用
📦 一键安装便捷命令(推荐)
通过安装脚本,在系统中添加 send 和 receive 全局命令:
🪟 Windows 安装
安装步骤:
- 下载安装脚本
- 双击 install-send-receive-windows.bat
- 安装完成后,CMD窗口任意位置运行 send 和 receive
🐧 Ubuntu 安装
安装步骤:
- 下载安装脚本
- chmod +x install-send-receive-ubuntu.sh
- dos2unix install-send-receive-ubuntu.sh
- ./install-send-receive-ubuntu.sh
- SSH窗口任意位置使用 send 和 receive 命令
☕ 独立使用 JAR 文件
如果不想安装全局命令,可以直接下载 JAR 文件使用:
基本使用方法
# 发送文件或文件夹
java -jar croc-cli.jar send <文件路径>
# 接收文件(程序会提示输入配对码)
java -jar croc-cli.jar receive
# 接收文件(直接指定配对码)
java -jar croc-cli.jar receive <配对码>
高级选项
# 使用自定义加密密码
java -jar croc-cli.jar send file.txt --password mySecretPass123
# 接收时指定配对码和密码
java -jar croc-cli.jar receive abc123 --password mySecretPass123
🔧 配置自定义中继服务器
系统默认会创建配置文件 ~/.croc/relay-config.properties,支持配置多个自定义中继:
配置文件示例
# ~/.croc/relay-config.properties
# 配置格式: relay.servers=host1:port1:priority1,host2:port2:priority2
# 优先级: HIGH, MEDIUM, LOW
# 示例配置
relay.servers=my-relay1.example.com:8001:HIGH,my-relay2.example.com:8002:MEDIUM,backup.example.com:8003:LOW
环境变量配置
# 也可以通过环境变量配置
export CROC_RELAY_SERVERS="my-relay.example.com:8001:HIGH,backup.example.com:8002:LOW"
智能选择机制:
- 发送端会连接到所有可用的中继服务器(本地中继 + 配置的中继 + 默认公网中继)
- 接收端按优先级自动选择最佳中继进行连接
- 无需手动指定中继参数,系统会自动处理最佳路径选择
🏗️ 部署自定义中继服务器
启动中继服务器
# 使用默认端口 8001
java -jar croc-relay.jar
# 指定自定义端口
java -jar croc-relay.jar 9001
配置使用自定义中继
简化配置: 部署中继服务器后,只需在配置文件中添加即可自动使用!
# 1. 启动自定义中继服务器
java -jar croc-relay.jar 9001
# 2. 在配置文件中添加中继信息
echo "relay.servers=192.168.1.100:9001:HIGH" >> ~/.croc/relay-config.properties
# 3. 正常使用,系统会自动选择最佳中继
send file.txt
receive abc123
🧠 基本原理
🔄 多中继智能选择架构
系统采用创新的多中继架构,发送端连接所有可用中继,接收端智能选择最佳路径:
📡 发送端多连接流程
1
启动本地中继
发送端启动本地中继服务器,通过 UDP 广播 在局域网内发布服务信息和配对码
2
连接所有可用中继
发送端同时连接到:
- 本地中继:localhost:10000-20000(自动端口)
- 配置的中继:从 ~/.croc/relay-config.properties 读取
- 默认公网中继:relay.daodaovps.com:8001
3
等待接收端选择
发送端在所有中继上注册统一的 sessionId,等待接收端连接任意一个中继
🎯 接收端智能选择流程
1
本地发现(5秒窗口)
接收端启动后监听 UDP 广播 5秒钟,尝试发现局域网内的本地中继服务
2
按优先级尝试外部中继
如果未发现本地中继,按优先级逐个尝试配置文件中的外部中继:
- HIGH 优先级中继 (权重: 800)
- MEDIUM 优先级中继 (权重: 600)
- LOW 优先级中继 (权重: 400)
3
兜底方案
如果所有外部中继都无法连接,使用默认公网中继 relay.daodaovps.com:8001
⚙️ 核心优势
- 自动适配:发送端和接收端自动协商最佳中继,无需手动配置
- 全局连接管理:防止多发送器冲突,确保只有一个发送器处理传输
- 智能故障转移:接收端逐个验证中继的 sessionId,失败时自动切换到下一个
- 配置文件持久化:中继配置保存在文件中,一次配置持续使用
🔀 传输流程
简化的用户体验:
- 发送端:
send file.txt→ 启动并连接所有中继 → 显示配对码 - 接收端:
receive 配对码→ 智能选择最佳中继 → 开始传输 - 传输:接收端选择中继后,发送端对应的发送器处理传输,其他连接自动关闭
- 完成:传输完成后自动断开连接,显示统计信息
🔒 安全传输机制
- 端到端加密:所有数据传输使用 AES-256 加密
- 自定义密码:支持用户自定义加密密码
- 完整性校验:MD5 验证确保文件完整性
- 会话隔离:每次传输使用唯一配对码
🙏 致谢
本项目受到 croc 项目的启发。croc 是一个由 Go 语言开发的优秀文件传输工具。
我们使用 Java + Netty 重新实现了核心功能,并针对企业环境增加了更多特性:智能中继路由、增强加密选项、便捷命令安装等。