Ben*_*Ben 5 .net c# tcplistener httplistener
我的计算机位于路由器后面,它将端口80转发给它(作为端口80).我的问题是HttpListener似乎忽略了发往外部IP地址的请求.
问题不在于路由器; 如果我创建一个空白的C#控制台项目并只添加以下代码行:
System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80);
s.Start();
System.Net.Sockets.TcpClient c = s.AcceptTcpClient();
Run Code Online (Sandbox Code Playgroud)
...并运行程序[注意:该程序第一次运行时,用户可能必须允许防火墙例外],如果我导航到它将终止
http://localhost/testpath/
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中或如果我导航到
http://externalipaddress/testpath/
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中 - 任一地址成功尝试端口80连接.因此,一切都设置正确 - 这台计算机可以接受端口80上的内部和外部连接.
现在,如果我创建另一个空白的C#控制台项目并仅添加以下代码行:
System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();
Run Code Online (Sandbox Code Playgroud)
......首先,我会得到一个HttpListenerException说的访问,因为中提到的问题,否认了这一问题.然后,当我关闭Visual Studio并以管理员身份重新打开它时,它将正常运行.当我导航到该程序时,程序将终止(正确)
http://localhost/testpath/
Run Code Online (Sandbox Code Playgroud)
但是,如果我导航到我的请求,我的请求就会超时
http://externalipaddress/testpath/
Run Code Online (Sandbox Code Playgroud)
为什么我对HttpListener的外部请求超时? 结果可以使用"externalipaddress"的数字IP地址或域名重现,以及子文件夹,斜杠等的许多排列,以及前缀"http://*:80/testpath /","http: // externaldomain:80/testpath /"和"http:// externalipaddress:80/testpath /"(没有空格;为stackoverflow格式化添加).
事实证明,Windows防火墙正在默默地从localhost外部进入传入端口80请求.当我禁用防火墙时,HttpListener检测到外部请求.当我重新启用防火墙时,HttpListener停止检测外部请求.当我启用名为"BranchCache内容检索(HTTP-In)"的禁用入站规则时,它允许SYSTEM程序(承载执行TCP侦听HttpListener的服务)侦听端口80,HttpListener再次检测到外部请求.
要在Windows 7上找到"入站规则"列表,请单击"开始" - >"控制面板" - >"系统和安全" - >"Windows防火墙" - >"高级设置" - >"入站规则".
| 归档时间: |
|
| 查看次数: |
6016 次 |
| 最近记录: |