P2P-загрузчик
1. Введение
Часто нужно учиться в течение школьного комитета, лидер команды, чтобы скопировать файлы, передать каждую информацию о заданиях и т.д., если вы отложить некоторые инструменты чата, как провести друг с другом в Интернет файлообменный его? Со всей путаница, понимание сетевой передачи и сокета программирования, после соответствующего формата технического протокола HTTP, CPP-HTTPLIB, механизм передачи блока, медленно нащупывает, пробы и ошибки, и, таким образом, с этим проектом.
2. Проект
Окружающая среда : Windows 10 VS2013 C / C ++
- Проект был завершен в течениеРядом загрузки общего доступа к файлам локальной сетиинструмент Функция
- Хост может запустить инструмент поиска, чтобы соответствовать локальной сети, локальной сети, чтобы получить онлайн-список хостов;
- Вы можете получить список информации (файлы в указанной общей папке) файл указует хост совместно;
- Процесс Multi-блок может загрузить указанный файл на указанном хосте, чтобы повысить эффективность передачи.
3. Общая структура
4. Конструкция сервера
Серверная конструкция:
Функция : разработка и реализация программы HTTP - сервер , который предоставляет клиент браузера для загрузки файлов, доступ к списку файлов
Серверный процесс:
①. Сервер Для сборки HTTP
- Обработка запросы сопряжения 1. Хост
- 2. Узел обработки получения списка файлов
- 3. Хост функция сбора данных приобретения
②. При условии , рядом с хост - спариванием
③. Предоставьте список файлов в соседний хост
④. Для обеспечения загрузки файла функции близлежащего хоста
5. Конструкция клиента
Функция : HTTP - сервер для достижения многофункционального процесса передачи блока загрузки файла блок менеджер Функционирует, повысить эффективность передачи блочной передачи
Клиент процесс:
- 1. Откройте близлежащих пользователей локальной сети к акции, получить всю информацию в IP-адрес локальной сети
- 2. Отправить запрос на хост спаривания для получения IP-адреса хоста - получить список IP-адресов для хостов успешного матча, спаривание успешных распечатать список хостов
- 3. Выберите пользователя для совместного использования файлов, где вы хотите, чтобы получить множество
- 4. Получение списка на указанный хост отправляет запрос на файл - получить список общих файлов на хосте
- 5. Вывести список всех файлов, получить информацию о файле заголовка, длина основного сбора документов, запрос на получение к указанному узлу передачи данных файла
- 6. Если файл слишком велик, а затем создать многопоточную загрузку блочную передачи в.
6. Основная функция порта
Клиент :
- Обеспечение клиентов хоста сопряжению
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 &filename)
Сервер :
- Обеспечьте функцию соответствия, чтобы обнаружить поблизости хоста локальной сети
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)
Другие интерфейсы :
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 - адрес выполняется в версии протокола) в
соответствии с запросом ресурса и строку запроса пути текст, описание службы
в ответ на ткань 5. формате протокола HTTP, вернулся к (версии кода состояния описание протокола) клиент
8. Источник
Нажмите, чтобы просмотреть исходный код (https://github.com/SJRLL/gongxiangxiazaiqi)