我正在使用此示例代码来侦听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
但没有任何帮助我。
答案 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和默认端口进行连接。