【实战项目】---P2P下载器

1.引言

在校期间经常需要进行给学委,班长拷贝文件、互传资料等工作,如果抛开一些聊天工具,如何进行彼此在线主机文件共享呢?带着种种困惑,了解网络传输以及Socket套接字编程、HTTP协议格式、CPP-httplib、分块传输机制等相关技术之后,开始慢慢摸索,不断试错,于是乎有了这个项目。

2.项目简介

环境:Windows10 VS2013 C/C++

  • 该项目完成了一个在局域网中进行附近文件共享下载功能的工具
  1. 能够进行搜索匹配局域网中运行工具的主机;获取到局域网在线主机列表;
  2. 能够获取指定主机所共享的文件信息列表(指定的共享目录下的文件信息);
  3. 能够对指定主机上的指定文件进行多进程分块下载来提高传输效率。

3.整体框架

在这里插入图片描述
在这里插入图片描述

4.服务端设计

服务器端设计:

功能:设计实现HTTP服务端程序,能够提供浏览器客户端进行文件的下载,获取文件列表

服务端流程

①.搭建HTTP服务器

  • 1.主机配对请求处理功能
  • 2.主机文件列表获取处理功能
  • 3.主机获取数据获取功能

②.提供附近主机配对功能

③.向附近主机提供文件列表

④.向附近主机提供文件下载功能

5.客户端设计

功能:实现基于服务器HTTP的分块传输功能实现多进程文件分块下载功能的下载器,通过分块传输提高传输效率

客户端流程

  • 1.发现局域网附近共享用户,获取局域网中所有的IP地址信息
  • 2.向获取到的IP主机地址发送主机配对请求–获取到配对成功的主机IP地址列表,打印配对成功的主机列表
  • 3.用户选择想要获取哪儿个主机的共享文件
  • 4.向指定的这个主机发送文件列表获取请求 – 获取到主机上的共享文件列表
  • 5.打印所有的文件列表,获取文件头部信息,主要获取文件长度,向指定的主机发送文件数据获取请求
  • 6.若文件过大,则创建多线程进行分块传输下载。

6.主要功能端口

客户端

  1. 提供客户端的主机配对功能
bool GetonlineHost()
  1. 提供客户端的文件列表获取功能
bool GetShareList(const std::string &host_ip)
  1. 提供客户端的文件下载功能(普通下载&&分块传输下载)
//普通下载
bool DownloadFile(const std::string &host_ip, const std::string& filename)
//分块传输下载
bool RangeDownload(const std::string &host_ip, const std::string &filename)

服务端

  1. 提供能够发现匹配局域网附近主机功能
static void HostPair(const httplib::Request &req, httplib::Response &rsp)
  1. 提供能够获取指定主机共享文件列表功能
	//获取共享文件列表,在主机上设置一个共享目录,凡是这个目录下的文件都是要给别人共享的
	static void ShareList(const httplib::Request &req, httplib::Response &rsp)
  1. 提供能够下载指定主机下指定的共享文件功能
static void Download(const httplib::Request &req, httplib::Response &rsp)

其他接口

httplib基本使用
1.实例化客户端对象

httplib::Client cli(buf, P2P_PORT); //实例化httplib客户端对象

2.实例化服务端对象

httplib::Server _srv;

Windows下获取网卡信息

static bool  GetAllAdapter(std::vector<Adapter> *list)

7.httplib的处理流程:

搭建客户端
1.组织HTTP协议格式请求数据
2.搭建TCP客户端
3.发送组织好的HTTP请求数据
4.等待服务端响应,接收服务端数据
5.对响应数据进行解析

搭建服务端
1.搭建一个最简单的TCP服务器
2.等待接收客户端发送的数据
3.按照HTTP协议格式,对数据进行解析(请求方法按URL协议版本进行)
4.根据请求的资源路径以及查询字符串正文,进行业务描述
5.组织HTTP协议格式的响应,返回给客户端(协议版本 状态码 描述)

8.源码

点击查看源码(https://github.com/SJRLL/gongxiangxiazaiqi)

发布了57 篇原创文章 · 获赞 301 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/L19002S/article/details/104942981
P2P