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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P2P共享下载器

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P2P共享下载器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 1、引言
        • 2、項目簡介
        • 3、整體框架介紹
        • 4、客戶端設計
        • 5、服務端設計
        • 6、接口設計
        • 7、項目技術點即改進點
        • 8、源碼

1、引言

不知道大家在大學期間有沒有有沒有為各種各樣的作業所煩惱過(進行給學委,班長拷貝文件、互傳資料等工作)?并不是所做作業的時候(當然也有)而是在叫作業的時候,每門科目不同的作業交給不同的學習委員,發送到不同的郵箱這也是相當麻煩,到這里有沒有一種方法:各科都有一個專門地點,大家向同一個地方提交相同作業,然后由學委統一收取;這樣統一的操作是高效的而且是好管理;在了解到了網絡傳輸、HTTP協議、CPP-httplib,分塊傳輸等技術后,我嘗試開發一個這樣的項目,接下來分享一下這個項目。

2、項目簡介

  • 這個項目實現在一個局域網下進行附近文件共享下載功能的工具
  • [1]能夠進行搜索匹配局域網中運行該工具的主機;并且獲取到局域網在線主機列表
  • [2]能夠獲取指定主機所共享文件信息列表(指定的共享目錄下的文件信息)
  • [3]能夠對指定主機上的指定文件進行多線程分塊下載提高效率

3、整體框架介紹

項目主要分為兩大模塊:客戶端模塊/服務端模塊
客戶端模塊:

  • 查看局域網中有哪些共享主機 – 向網絡中廣播配對請求,得到響應
  • 獲取指定主機的共享文件信息列表 – 向指定主機發送獲取列表請求
  • 從指定主機上面下載文件 --想指定主機發送下載指定文件請求
  • 服務端模塊:

    • 針對客戶端所發起多種的請求,提供相應的服務

    框架圖:

    4、客戶端設計

    • 獲取網卡信息–獲取主機IP + MASK–局域網IP列表
    • 向所有IP發送配對請求 — 得到在線主機列表(將在線主機的IP打印到終端)
    • 選擇一個主機(IP)發送獲取該主機的文件列表請求–獲取到共享的文件列表(將文件列表打印到終端)
    • 從這個主機下載指定的共享文件(創建文件,打開文件,將響應數據寫入文件。關閉文件)

    5、服務端設計

    • 接收到主機請求配對,做出200響應

    • 接收到文件列表請求
      1.檢測獲取指定共享目錄下文件信息(文件名)
      2.將所有文件名組織成HTTP響應正文

    • 接受到指定文件下載請求
      1.通過文件名檢測文件是否存在
      2.檢測文件是否是一個普通文件
      3.打開文件,讀取文件數據作為HTTP響應正文響應發送

    6、接口設計

    客戶端:
    提供客戶端主機配對功能

    void HostPair(const uint32_t ip);//直接向主機發送請求,判斷是否在線---這是一個線程入口函數 bool GetOnlineHost(){1.獲取網卡信息--獲取主機IP,2.創建線程,傳入HostPair,判斷是否在線}

    提供獲取指定主機共享文件列表功能

    bool GetShareList(const uint32_t ip);//獲取指定主機的共享文件列表,打印在終端

    提供下載指定主機上共享文件的文件功能

    bool DownLoadFile(const uint32_t ip,const std::string &filename);

    服務端:
    提供響應主機配對請求功能

    void HostPair();//針對客戶端主機配對請求做出響應

    提供響應獲取共享文件列表功能

    void ShareList();//針對客戶端共享文件列表做出響應---(獲取目錄下文件信息)

    提供響應下載請求功能

    v**加粗樣式**oid DownLoad();//針對客戶端下載請求做出響應---(打開文件讀數據響應給客戶端)

    其他接口:
    windows下獲取網卡信息功能

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

    cpp-httplib搭建http服務器

    httplib::Client cli(buf, P2P_PORT); //實例化httplib客戶端對象 httplib::Server _srv;//實例化httplib服務端

    7、項目技術點即改進點

    技術點: 使用cpp-httplib搭建http服務器、boost庫對文件的操作、多線程、分塊傳輸等;
    改進點:
    斷點續傳: 針對下載過程中異常大致下載終止,下次繼續是從上次斷開處開始下載,而不是從心開始
    網絡穿透: 實現在不同局域網中,兩臺主機之間進行文件共享下載

    8、源碼

    Github:https://github.com/IronChang/P2P-Shared-download

    總結

    以上是生活随笔為你收集整理的P2P共享下载器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。