【问题标题】:C# HttpListener exception: The format of the specified network name is not validC# HttpListener 异常:指定网络名称的格式无效
【发布时间】:2018-11-24 01:15:03
【问题描述】:

我正在使用这个示例代码来监听 HTTP 请求:

// Create a listener.
HttpListener listener = new HttpListener();
// Add the prefixes.
listener.Prefixes.Add("some URI");

listener.Start();
Console.WriteLine("Listening...");

HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;

HttpListenerResponse response = context.Response;

listener.Stop();

但我现在过得很艰难,因为我不知道前缀应该是什么。我已经阅读了这方面的文档,但是无论我尝试在那里输入什么,无论是我的计算机的 URI 还是我希望得到响应的机器的 URI,我总是会得到异常:

指定的网络名称格式无效

我尝试了多种方法,其中之一是我指定了我自己 PC 的 URI,但出现了无法访问这些位置的异常。我研究得越多,我迷失的越多。

HttpListener 的 MSDN 示例中,我看到 URI 应该也有一个端口,但如果它必须是我正在监听的外部机器的 URI,那么我怎么知道端口?

另外,我在防火墙中打开了端口(使用 Windows 工具,而不是指挥官)。我什至关闭了 Windows 防火墙,但没有改变任何东西。

我对网络的了解非常有限,因此我什至不知道我应该问的确切问题。

我尝试了相关帖子的提示,例如:

C# HttpListener The format of the specified network name is not valid

但没有任何帮助。

【问题讨论】:

    标签: c# http network-programming network-protocols httplistener


    【解决方案1】:

    例如使用:

    listener.Prefixes.Add("http://*:9998/");
    listener.Prefixes.Add("https://*:9999/");
    

    如果你使用 * 监听器将绑定到所有接口。您需要以管理员身份运行才能注册。

    现在,如果您在主机上运行该程序,该主机已配置 IP,例如 192.168.178.39

    您应该使用以下方式连接:
    http://192.168.178.39:9998
    https://192.168.178.39:9999

    要使 SSL 工作,您需要使用以下命令:

    netsh http 添加 sslcert ipport=0.0.0.0:9999 certash=Thumbprint appid={GUID}

    在 HttpListener 的 MSDN 示例中,我看到 URI 应该有 也是一个端口,但如果它必须是外部机器的 URI,我就是 监听,那我怎么知道端口呢?

    在这种情况下,您应该使用默认端口 http 80 或 https 443。您将需要在机器上使用本地 IP 作为前缀,NOT 指定外部 IP。

    如果网络具有 NAT,则将防火墙配置为允许端口 443 和 80 上的流量到达所需主机。 现在您可以使用外部 ip 和默认端口进行连接。

    【讨论】:

    • 虽然它没有完全回答我的问题,但与其他帖子一起帮助我理解了它。谢谢:)
    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多