多中继智能文件传输工具

智能、安全、高效的多中继架构文件传输解决方案

🚀 简单介绍

本工具是一个基于 Netty 框架开发的高性能文件传输系统,采用多中继智能选择架构,支持文件和文件夹的安全传输。通过广播发现技术实现零配置的局域网直连,支持配置文件和环境变量管理多个自定义中继,并提供默认公网中继作为兜底方案。

🎯 核心特性

  • 多中继智能架构:发送端连接所有中继,接收端智能选择最佳路径
  • 配置文件支持:~/.croc/relay-config.properties 管理多个中继
  • 优先级选择:本地中继 → 外部配置中继 → 默认公网中继
  • 端到端加密:AES-256 加密 + 自定义密码支持

🛠️ 技术亮点

  • 全局连接管理:防止多发送器冲突,确保传输稳定
  • UDP广播发现:3秒内自动发现局域网服务
  • 健康检测机制:自动检测中继状态和故障转移
  • 完整性校验:MD5 文件完整性验证

⚡ 快速使用

📦 一键安装便捷命令(推荐)

通过安装脚本,在系统中添加 sendreceive 全局命令:

🪟 Windows 安装

安装步骤:

  1. 下载安装脚本
  2. 双击 install-send-receive-windows.bat
  3. 安装完成后,CMD窗口任意位置运行 send 和 receive

🐧 Ubuntu 安装

安装步骤:

  1. 下载安装脚本
  2. chmod +x install-send-receive-ubuntu.sh
  3. dos2unix install-send-receive-ubuntu.sh
  4. ./install-send-receive-ubuntu.sh
  5. 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,失败时自动切换到下一个
  • 配置文件持久化:中继配置保存在文件中,一次配置持续使用

🔀 传输流程

简化的用户体验:

  1. 发送端:send file.txt → 启动并连接所有中继 → 显示配对码
  2. 接收端:receive 配对码 → 智能选择最佳中继 → 开始传输
  3. 传输:接收端选择中继后,发送端对应的发送器处理传输,其他连接自动关闭
  4. 完成:传输完成后自动断开连接,显示统计信息

🔒 安全传输机制

  • 端到端加密:所有数据传输使用 AES-256 加密
  • 自定义密码:支持用户自定义加密密码
  • 完整性校验:MD5 验证确保文件完整性
  • 会话隔离:每次传输使用唯一配对码

🙏 致谢

本项目受到 croc 项目的启发。croc 是一个由 Go 语言开发的优秀文件传输工具。

我们使用 Java + Netty 重新实现了核心功能,并针对企业环境增加了更多特性:智能中继路由、增强加密选项、便捷命令安装等。