繁体   English   中英

C# HttpListener 未连接到本地主机

[英]C# HttpListener not connecting to localhost

我想使用HttpListener创建一些服务器,但是每当我使用浏览器选项卡向它发送请求时,该请求需要无限时间才能到达服务器。

  1. 尝试 netsh 授予使用 sockets 的权限。 没用。 netsh http show urlacl output 如下:
    Reserved URL            : http://localhost:12113/
        User: \Everyone
            Listen: Yes
            Delegate: No
            SDDL: D:(A;;GX;;;WD)

    Reserved URL            : http://127.0.0.1:12113/
        User: \Everyone
            Listen: Yes
            Delegate: No
            SDDL: D:(A;;GX;;;WD)

    Reserved URL            : http://+:12113/
        User: \Everyone
            Listen: Yes
            Delegate: No
            SDDL: D:(A;;GX;;;WD)

    Reserved URL            : http://*:12113/
        User: \Everyone
            Listen: Yes
            Delegate: No
            SDDL: D:(A;;GX;;;WD)
  1. 防火墙没有阻止我的端口。 还是行不通。

  2. 有人说以管理员权限运行 VS 可能会起作用。 但它没有。

  3. 如果我尝试连接关闭的服务器(或连接到另一个未侦听的端口),浏览器将返回ERR_CONNECTION_REFUSED 但是当我在服务器打开的情况下这样做时,它永远不会响应。 没有错误,没有成功。

服务器代码如下:

public class Server
{
    public static HttpListener Listener;
    public static int Port = 12113;

    public Server()
    {
        Listener = new HttpListener();
        
        // Yeah, I got so mad I added them all (same as urlacl)
        Listener.Prefixes.Add($"http://localhost:{Port}/");
        Listener.Prefixes.Add($"http://127.0.0.1:{Port}/");
        Listener.Prefixes.Add($"http://+:{Port}/");
        Listener.Prefixes.Add($"http://*:{Port}/");
        
        Listener.Start();

        var listenTask = HandleIncomingConnections();
        listenTask.GetAwaiter().GetResult();

        Listener.Stop();
    }

    public async Task HandleIncomingConnections()
    {
        while (true)
        {
            var context = await Listener.GetContextAsync();

            var request = context.Request;
            var response = context.Response;
            var user = context.User;

            await HandleRequest(request, response, user);
        }
    }
    private async Task HandleRequest(HttpListenerRequest request, HttpListenerResponse response, IPrincipal user)
    {
        // There's a breakpoint right here so that I can inspect what I received
        // and develop the server accordingly, but it is never hit.
    }

    public void Shutdown()
    {
        try
        {
            Listener.Stop();
        }
        catch
        {
            // ignore
        }
    }
}

我究竟做错了什么?

正如Jesse de WitSerg所说,它陷入了僵局。 我让它像这样工作:

public Server()
{
    Listener = new HttpListener();
    Listener.Prefixes.Add($"http://localhost:{Port}/");
    Listener.Prefixes.Add($"http://127.0.0.1:{Port}/");
    Listener.Prefixes.Add($"http://+:{Port}/");
    Listener.Prefixes.Add($"http://*:{Port}/");
    Start();
}

public async void Start()
{
    Listener.Start();
    await HandleIncomingConnections();
    Stop();
}

我整整一个星期一直在挣扎的只是我的错误。 多谢你们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM