/ant

一个使用 C++ 编写的网络文件传输工具(课程设计)

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Ant

Ant 是一个简单的网络文件传输工具。 项目起始于 2020-2021 (2) 软件工程综合实训的课程设计。

项目背景

2020 年暑假的时候,有次我想把约 800GB 的硬盘备份文件通过网络传输给同学。 因为是放假在家,同时又是跨省跨运营商,我们想了很多办法进行传输。 后来,采用了 HTTP 协议。我在本地架设一个 IIS,开放公网端口让客户端下载,带宽约能跑满,但在约两天的传输后,接收方对文件校验失败。 我们开始对底层协议的可靠性产生疑问,并萌生出自己开发一个支持大文件的网络文件传输工具的想法。

目前,主流的文件传输协议 HTTP, FTP, SMB 等,它们受支持广、功能强大,但在这份需求上,好像也不能完全满足。 ——我们想自己实现一个文件传输工具,我们希望它能支持断点续传、加密传输、校验等特性,如果不能做到创新与创造,那就当造个轮子吧!

选型

本着复习计算机网络的想法,底层协议选用 UDP,自己动手实现部分 TCP 提供的功能。 (当然,这个目标过于宏大,很可能直到项目结束时也无法实现。) 同时,基于历史经验,C++ 网络文件传输中,网络是耗时较长的因素,并考虑到在 C++ 中实现异步的文件读写和网络通信并非朝夕可完成的,根据项目进度,我们采用了同步的方式读写文件和进行网络通信。 项目底层基于 Windows Socket API。 如果后期有时间,会尝试在 C++ 中使用异步方法(这里夸一下 Rust 中的 tokio 库)。

基本流程

我们将接收方称为 Server,将发送方称为 Client。

最小需求

实现一个命令行下的网络文件传输工具,支持进度查看。传输工具使用传输层的 UDP 协议通信,确保文件快速、有序地传送到接收方。

开源协议

(c) 2021 sunnysab, H-RY 采用 GPLv3 授权。