C#HttpListener异常:指定网络名称的格式无效

时间:2018-06-14 09:45:44

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

我正在使用此示例代码来侦听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,我总是得到例外:

  

指定网络名称的格式无效

我尝试了很多东西,其中一个就是我指定了自己电脑的URI,并且异常认为这些位置无法访问。我研究的越多,我得到的就越多。

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

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

我对网络的了解非常有限,因此我甚至不知道我应该问的具体问题。

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

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

但没有任何帮助我。

1 个答案:

答案 0 :(得分:1)

例如使用:

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

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

现在,如果您在具有已配置IP的主机上运行此程序,例如192.168.178.39

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

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

netsh http add sslcert ipport = 0.0.0.0:9999 certhash = Thumbprint appid = {GUID}

  

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

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

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