日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【实战项目】---P2P下载器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P2P下載器

      • 1.引言
      • 2.項(xiàng)目簡(jiǎn)介
      • 3.整體框架
      • 4.服務(wù)端設(shè)計(jì)
      • 5.客戶端設(shè)計(jì)
      • 6.主要功能端口
      • 7.httplib的處理流程:
      • 8.源碼

1.引言

在校期間經(jīng)常需要進(jìn)行給學(xué)委,班長(zhǎng)拷貝文件、互傳資料等工作,如果拋開(kāi)一些聊天工具,如何進(jìn)行彼此在線主機(jī)文件共享呢?帶著種種困惑,了解網(wǎng)絡(luò)傳輸以及Socket套接字編程、HTTP協(xié)議格式、CPP-httplib、分塊傳輸機(jī)制等相關(guān)技術(shù)之后,開(kāi)始慢慢摸索,不斷試錯(cuò),于是乎有了這個(gè)項(xiàng)目。

2.項(xiàng)目簡(jiǎn)介

環(huán)境:Windows10 VS2013 C/C++

  • 該項(xiàng)目完成了一個(gè)在局域網(wǎng)中進(jìn)行附近文件共享下載功能的工具
  • 能夠進(jìn)行搜索匹配局域網(wǎng)中運(yùn)行工具的主機(jī);獲取到局域網(wǎng)在線主機(jī)列表;
  • 能夠獲取指定主機(jī)所共享的文件信息列表(指定的共享目錄下的文件信息);
  • 能夠?qū)χ付ㄖ鳈C(jī)上的指定文件進(jìn)行多進(jìn)程分塊下載來(lái)提高傳輸效率。
  • 3.整體框架


    4.服務(wù)端設(shè)計(jì)

    服務(wù)器端設(shè)計(jì):

    功能:設(shè)計(jì)實(shí)現(xiàn)HTTP服務(wù)端程序,能夠提供瀏覽器客戶端進(jìn)行文件的下載,獲取文件列表

    服務(wù)端流程:

    ①.搭建HTTP服務(wù)器

    • 1.主機(jī)配對(duì)請(qǐng)求處理功能
    • 2.主機(jī)文件列表獲取處理功能
    • 3.主機(jī)獲取數(shù)據(jù)獲取功能

    ②.提供附近主機(jī)配對(duì)功能

    ③.向附近主機(jī)提供文件列表

    ④.向附近主機(jī)提供文件下載功能

    5.客戶端設(shè)計(jì)

    功能:實(shí)現(xiàn)基于服務(wù)器HTTP的分塊傳輸功能實(shí)現(xiàn)多進(jìn)程文件分塊下載功能的下載器,通過(guò)分塊傳輸提高傳輸效率

    客戶端流程:

    • 1.發(fā)現(xiàn)局域網(wǎng)附近共享用戶,獲取局域網(wǎng)中所有的IP地址信息
    • 2.向獲取到的IP主機(jī)地址發(fā)送主機(jī)配對(duì)請(qǐng)求–獲取到配對(duì)成功的主機(jī)IP地址列表,打印配對(duì)成功的主機(jī)列表
    • 3.用戶選擇想要獲取哪兒個(gè)主機(jī)的共享文件
    • 4.向指定的這個(gè)主機(jī)發(fā)送文件列表獲取請(qǐng)求 – 獲取到主機(jī)上的共享文件列表
    • 5.打印所有的文件列表,獲取文件頭部信息,主要獲取文件長(zhǎng)度,向指定的主機(jī)發(fā)送文件數(shù)據(jù)獲取請(qǐng)求
    • 6.若文件過(guò)大,則創(chuàng)建多線程進(jìn)行分塊傳輸下載。

    6.主要功能端口

    客戶端

  • 提供客戶端的主機(jī)配對(duì)功能
  • 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)

    服務(wù)端

  • 提供能夠發(fā)現(xiàn)匹配局域網(wǎng)附近主機(jī)功能
  • static void HostPair(const httplib::Request &req, httplib::Response &rsp)
  • 提供能夠獲取指定主機(jī)共享文件列表功能
  • //獲取共享文件列表,在主機(jī)上設(shè)置一個(gè)共享目錄,凡是這個(gè)目錄下的文件都是要給別人共享的static void ShareList(const httplib::Request &req, httplib::Response &rsp)
  • 提供能夠下載指定主機(jī)下指定的共享文件功能
  • static void Download(const httplib::Request &req, httplib::Response &rsp)

    其他接口

    httplib基本使用:
    1.實(shí)例化客戶端對(duì)象

    httplib::Client cli(buf, P2P_PORT); //實(shí)例化httplib客戶端對(duì)象

    2.實(shí)例化服務(wù)端對(duì)象

    httplib::Server _srv;

    Windows下獲取網(wǎng)卡信息:

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

    7.httplib的處理流程:

    搭建客戶端:
    1.組織HTTP協(xié)議格式請(qǐng)求數(shù)據(jù)
    2.搭建TCP客戶端
    3.發(fā)送組織好的HTTP請(qǐng)求數(shù)據(jù)
    4.等待服務(wù)端響應(yīng),接收服務(wù)端數(shù)據(jù)
    5.對(duì)響應(yīng)數(shù)據(jù)進(jìn)行解析

    搭建服務(wù)端:
    1.搭建一個(gè)最簡(jiǎn)單的TCP服務(wù)器
    2.等待接收客戶端發(fā)送的數(shù)據(jù)
    3.按照HTTP協(xié)議格式,對(duì)數(shù)據(jù)進(jìn)行解析(請(qǐng)求方法按URL協(xié)議版本進(jìn)行)
    4.根據(jù)請(qǐng)求的資源路徑以及查詢字符串正文,進(jìn)行業(yè)務(wù)描述
    5.組織HTTP協(xié)議格式的響應(yīng),返回給客戶端(協(xié)議版本 狀態(tài)碼 描述)

    8.源碼

    點(diǎn)擊查看源碼(https://github.com/SJRLL/gongxiangxiazaiqi)

    總結(jié)

    以上是生活随笔為你收集整理的【实战项目】---P2P下载器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。