1. 用户需求
你是否有过这样的情况——和舍友等分享文件时,可能双方传的文件过多/过少,并非自己全部要使用的,最主要的是分享者要去选择相关文件传输,太过于麻烦。于是产生了皮卡丘下载器项目,该项目根据网络传输、HTTP协议、TCP协议、分块传输机制、boost库、文件相关操作等技术完成,可以实现任意两台主机间共享文件的下载。
2. 项目介绍
皮卡丘下载器是一个文件共享下载器:
- 搜索局域网中运行该工具的主机,获取在线主机列表,查看共享主机,进行主机配对;
- 查看指定主机的共享文件列表;
- 在共享文件下下载指定的文件。
3. 设计流程
3.1 框架图
3.2 流程图
3.3 客户端
- 对服务器进行请求,在指定的共享主机下,进行指定文件目录下的文件共享下载:
- 获取局域网中所有的IP地址信息;
- 向获取到的IP主机地址发送主机配对请求(获取在线主机列表);
- 显示在线的主机列表(用户选择具体主机);
- 用户选择指定的主机发送文件列表获取请求(获取到主机上的共享文件列表);
- 显示所有的文件列表,用户选择共享文件;
- 向指定的主机发送文件数据获取请求(下载文件);
【接口】
//获取在线主机
bool GetOnlineHost()
//获取文件列表
bool GetShareList(const std::string &host_ip)
//文件下载
//直接下载文件 - 文件较小
bool DownloadFile(const std::string &host_ip, const std::string& filename)
//分块下载文件 - 文件较大
bool RangeDownload(const std::string &host_ip, const std::string &name)
3.4 服务端
- 实现一个http服务端程序,为客服端进行各种响应:
- 搭建一个http服务器;
- 提供主机配对功能;
- 提供文件列表功能;
- 提供下载功能文件功能。
【接口】
//主机配对
static void HostPair(const httplib::Request &req, httplib::Response &rsp)
//获取共享文件列表
static void ShareList(const httplib::Request &req, httplib::Response &rsp)
//下载文件
static void Download(const httplib::Request &req, httplib::Response &rsp)