C 程式設計總結(十二)斷點續傳

2021-09-07 02:14:57 字數 2508 閱讀 4916

range(請求引數)

用於請求頭中,指定第乙個位元組的位置和最後乙個位元組的位置,一般格式:

range:(unit=first byte pos)-[last byte pos] 

例如:range:100-199,取檔案流的100至199之間的位元組。

range:100,取位置為100後的所有位元組。如果range 為正值,伺服器應該開始傳送從指定的 range 引數到 http 實體中資料的末尾之間的資料。

range:-99,取開始的100個位元組。如果range 為負值,伺服器應該開始傳送從 http 實體中資料的開頭到指定的 range 引數之間的資料。

content-range (響應引數)

用於響應頭,指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在伺服器向客戶返回乙個部分響應,它必須描述響應覆蓋的範圍和整個實體長度。

一般格式:   

content-range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
例如:content-range: bytes 1024000-1126399/7421120

http協議:

在c#中使用addrange方法向請求新增指定範圍的位元組範圍標頭

system.net.httpwebrequest
所有的方法:

常用的方法為例:

void addrange(long from, long to);

指定範圍起始、終止位置,來請求該片段的資料。

// 摘要:

// 向請求新增指定範圍的位元組範圍標頭。

//// 引數:

// from:

// 開始傳送資料的位置。

//// to:

// 停止傳送資料的位置。

請求的range引數,我們可以清晰看到起具體值,這就是請求的片段。在這裡可以清晰的看到http協議版本、請求方法、請求位址等資訊

伺服器根據請求的range引數,只返回該片段的資料。我們可以清晰看到content-range的具體值。

注意:返回的statuscode變為了partialcontent,說明是部分資料。

** 含義

200 ok     請求成功返回

206 partial content     部分資料

//更新當前進度

this.currentsize += readtotalsize;

//如果返回的response頭中content-range值為空,說明伺服器不支援range屬性,不支援斷點續傳,返回的是所有資料

if (response.headers["content-range"] == null)}}

}

專案原始碼:

HTTP 斷點續傳

客戶端請求域 range 格式如下例子 第乙個500位元組 位元組偏移量0 499,包括0和499 range bytes 0 499 第二個500位元組 位元組偏移量500 999,包括500和999 range bytes 500 999 最後500位元組 位元組偏移量9500 9999,包括9...

IOS斷點續傳

asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...

linux斷點續傳

在linux伺服器上經常要用scp傳輸大檔案,可能由於網路等原因出現間接性中斷,導致傳輸一半的檔案突然中斷。其實scp是可以續傳的,它需要rsync以及它的ssh協議 舉例如下 rsync p rsh ssh home.tar 192.168.205.34 home home.tar,再輸出密碼後,...