簡體   English   中英

C#HttpListener部分內容

[英]C# HttpListener Partial Content

我正在編寫類似於HFS的應用程序,這是一個具有HTML/CSS/JS自定義主題的HTTP File Server ,並且我希望能夠分多個部分提供文件服務,因為大多數下載管理器都通過多個連接到服務器連接並下載文件為8件,該功能最終提高了下載速度,並使下載具有恢復和暫停的功能。

據我所知, HTTP's Partial Content使這一切成為可能,我環顧了整個網絡,但是找不到任何在我使用HttpListener來提供網頁和文件的代碼中實現該代碼的好例子。

我見過某處有人建議改用TcpListener但由於我的整個應用程序都在HttpListener ,因此還沒有真正找到任何使用TcpListener切換部分內容的好例子。

Web服務器是多線程的,通過不同的連接同時處理許多請求沒有任何問題。 但是,每當我使用IDM下載大文件時,它都會通過單個連接提供內容,而IDM顯示服務器無法提供"206"HTTP Partial Content

這是我當前用於提供文件的代碼:

context.Response.ContentType = GetMeme(filename);

Stream input = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
context.Response.ContentLength64 = input.Length;

byte[] buffer = new byte[1024 * 16];
int nbytes;
while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0)
context.Response.OutputStream.Write(buffer, 0, nbytes);
input.Close();

context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.OutputStream.Flush();
context.Response.OutputStream.Close();

我試圖從HTTP頭獲取緩沖區偏移量,但由於偏移量,它無法關閉流,並說Cannot close stream until all bytes are written.

還有更好的選擇嗎? 甚至HttpListener都可以正確處理HTTP:206嗎? TcpListener上的部分內容如何工作?

任何有用的鏈接和信息將不勝感激。

免責聲明:這個答案並不假裝是完整的,在這種情況下,有太多事情要討論。 但是作為開始...

您使用的偵聽器與此無關。 您的代碼應注意RANGE HTTP標頭。 提供RANGE ,按照此標頭中的指定讀取並提供文件+發送206。否則,提供整個文件並發送200。

它不是您獲得的緩沖區偏移量,而是文件偏移量。

首先設置響應代碼和其他元數據(標題),並作為最后一步寫入流。

而且,您可能必須完全改變實際提供文件的方式。 例如,在您擁有的FileStream上調用CopyToAsync()。

它不是Meme ,而是MIME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM