C#实现的HttpListener服务器怎么支持多线程下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#实现的HttpListener服务器怎么支持多线程下载相关的知识,希望对你有一定的参考价值。

现在安卓客户端已经写好,支持多线程下载。求一个服务器端多线程下载的代码。这一块的线程安全有点搞不懂,求指教。

参考技术A C# 实现HTTP协议迷你服务器的两种方法
http://www.csharpwin.com/csharpspace/13462r5089.shtml
参考下上面的代码看看是否能解决你的问题。追问

服务器搭建很简单,你没看我的需求,我需要的是多线程下载。不过还是很谢谢

使用 C# HttpListener 时无法设置 MIME 类型

【中文标题】使用 C# HttpListener 时无法设置 MIME 类型【英文标题】:Can't set MIME types when using C# HttpListener 【发布时间】:2020-11-26 03:27:17 【问题描述】:

我创建了一个 C# HttpListener()。

在请求处理程序中,我执行必要的操作,然后在响应对象上设置标头和 MIME 类型。但是,浏览器报告 MIME 类型始终为空。

private void HandleWebRequest(HttpListenerContext context)

    string path = context.Request.Url.LocalPath.ToLowerInvariant();
    HttpListenerResponse response = context.Response;
    HttpListenerRequest request = context.Request;
        
    try
    
        // Respond to requests here. For ex:
        byte[] displayImage = HtmlHelper.GetTextResource(path.Substring(20));
        response.ContentLength64 = displayImage.Length;
        response.OutputStream.Write(displayImage, 0, displayImage.Length);
    
    finally
    
        SetResponseHeaders(path, response);
        response.Close();
    


private void SetResponseHeaders(path, response)

    ...
    response.ContentType = MediaTypeNames.Text.Plain;
    response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
    response.AddHeader("Access-Control-Allow-Methods", "GET,POST");
    response.AddHeader("Access-Control-Allow-Origin", "*");

【问题讨论】:

【参考方案1】:

问题是我在设置 Response.Close(); 时在末尾添加了标头和 MIME 类型;

解决方法是在开头设置标题

private void HandleWebRequest(HttpListenerContext context)

    string path = context.Request.Url.LocalPath.ToLowerInvariant();
    HttpListenerResponse response = context.Response;
    HttpListenerRequest request = context.Request;

    // Set headers here
    SetResponseHeaders(path, response);
        
    try
    
        // Respond to requests here. For ex:
        byte[] displayImage = HtmlHelper.GetTextResource(path.Substring(20));
        response.ContentLength64 = displayImage.Length;
        response.OutputStream.Write(displayImage, 0, displayImage.Length);
    
    finally
    
        response.Close();
    

【讨论】:

以上是关于C#实现的HttpListener服务器怎么支持多线程下载的主要内容,如果未能解决你的问题,请参考以下文章

支持 HTTPS 的 Httplistener

使用 C# HttpListener 提供大文件

使用 C# HttpListener 处理多个请求

C# HttpListener 和 Windows 防火墙

C# 中 HttpListener 和 Griffin.WebServer 的替代方案

C# HttpListener Prefixes 不接受 `ws` 阻止 JS WebSocket 连接