基於HTTP實現簡易的個人網盤

2021-09-12 16:16:17 字數 1843 閱讀 2885

隨著網際網路的發展,對於檔案的儲存和獲取都可以通過網路來實現,例如通過網盤。使用者可以把網盤看成乙個放在網路上的硬碟或u盤,不管你是在家中、單位或其它任何地方,只要你連線到網際網路,你就可以管理、編輯網盤裡的檔案。不需要隨身攜帶,更不怕丟失。

可以通過網頁檢視當前網盤中的資源,以html頁面的形式展現出來,可以進行差錯處理。

通過網頁將本地檔案上傳至個人網盤。

通過封裝的類來實現特定的功能。

class threadpool:執行緒池類。建立一定數量的執行緒,使用執行緒安全的佇列將建立好的執行緒組織成任務佇列,當任務來時,新增任務進入任務佇列,佇列中的執行緒處理任務。解決執行緒過多會帶來排程開銷,提高程式的效能,同時阻止過多的請求使網盤資源耗盡導致崩潰。

class httptask:http請求處理的任務,任務佇列中的成員。包含客戶端socket,包含任務處理介面。(初始化完新增到任務佇列)

class httpserver:建立乙個tcp服務端,初始化執行緒池,並持續接受新連線,將新的連線組織成乙個執行緒池任務,並新增到執行緒池中。

struct requestinfo:用來接受儲存從http請求頭部中解析出的請求資訊。包含請求方式、協議版本、資源路徑、資源實際路徑、查詢字串、整個頭部的鍵值對。

class httprequest:用於接受並解析客戶端傳送的http請求資料,包含http資料的接受介面、http資料的解析介面以及對外提供能夠獲得處理結果的介面。

class utils:提供一些公用的介面,功能為:分割字串、獲取錯誤碼、轉換格林威治時間、獲取檔案etag,根據檔案字尾獲取檔案型別。

class upload:接受客戶端上傳的檔案資料並解析,在請求的伺服器位置建立檔案,將上傳的檔案內容寫入建立的新檔案中,完成檔案上傳。

http:即超文字傳輸協議,是網際網路上應用最廣泛的網路協議。它是應用層的協議,底層是基於tcp通訊的。http協議的工作過程:客戶通過瀏覽器向伺服器傳送文件請求,瀏覽器將請求的資源回應給瀏覽器,然後關閉連線。即:連線->請求->響應->關閉連線。

http請求頭部:頭部分為首行和頭部(如圖),首行包含請求方法、url、協議版本,頭部包含請求的屬性,通過冒號分隔的鍵值對表示。

http響應頭部:除了首行與請求時不同,響應的頭部包含:協議版本號、狀態碼、狀態碼解釋。

客戶端請求連線,當伺服器連線上客戶端時,將客戶端的socket處理成乙個任務,傳送給執行緒池,執行緒池接收到任務後,喚醒乙個執行緒去執行任務。

當客戶端傳送請求時,執行緒呼叫httprequest的介面來接收http請求的資料,解析請求頭部,獲取請求方法、url、協議版本以及請求的屬性,並將有用的資訊儲存在requeinfo中。

cgi程式工作過程:

基於Seafile打造屬於自己的網盤系統

mkdir p opt seafile installedcd cd opt seafile installed 當前最新版本為7.0.5 wget c tar zxvf seafile server 7.0.5 x86 64.tar.gz c cd.yum install python pytho...

基於TCP協議的簡易FTP雲盤(客戶端)

include include include include include include include include include msg.h intget cmd type char cmd 將命令字串轉換成整數 char getdir char cmd 分離引數 intcmd han...

C實現的 簡易的http伺服器

設定位址復用 ret setsockpot server fd,sol socket,so reuseaddr,on,sizeof on if ret 0 memset server addr,0,sizeof server addr 設定埠,ip,和tcp ip協議族 server addr.si...