C# HttpListener 未连接到本地主机

C# HttpListener not connecting to localhost

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

  1. 已尝试通过 netsh 授予使用套接字的权限。没用。 netsh http show urlacl 输出如下:
    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. 如果我尝试连接关闭的服务器(或连接到另一个未监听的端口),浏览器将 return 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 Wit and Serg所说,陷入僵局。我是这样工作的:

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();
}

我整整一个星期都在苦苦挣扎,只是我的错误。谢谢大家。