我的電腦位於一個路由器後面,它將端口80轉發給它(作爲端口80)。我的問題是,HttpListener似乎忽略了尋址到外部IP地址的請求。爲什麼HttpListener會忽略外部請求?
問題不在於路由器;如果我創建了一個空白的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();
...並運行該程序[注:第一次此程序運行時,用戶可能必須允許防火牆例外],它會如果我在我的瀏覽器瀏覽到
http://localhost/testpath/
終止或者如果我在我的瀏覽器瀏覽到
http://externalipaddress/testpath/
- 任一地址成功嘗試端口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();
...首先,我將得到一個HttpListenerException,說因爲this question中提到的問題,訪問被拒絕。然後,當我關閉Visual Studio並以管理員身份重新打開它時,它將正常運行。該計劃將終止(正常),當我瀏覽到
http://localhost/testpath/
然而,我的要求只是超時,如果我瀏覽到
http://externalipaddress/testpath/
爲什麼我的外部請求HttpListener超時?結果可以通過數字IP地址或「externalipaddress」的域名以及子文件夾,斜槓等的多種排列以及前綴「http:// *:80/testpath /」,「http :// externaldomain:80/testpath /「和」http:// externalipaddress:80/testpath /「(無空格;爲stackoverflow格式添加)。
您是否問過您的ISP是否阻止端口80上的傳入連接?這是不尋常的,但有一些。也嘗試解析您的外部IP,以便它指向'homeusr51363_516.your_isp.com'或類似的 – rath
如果我的ISP阻止傳入連接,第一個代碼(通過外部IP地址連接到端口80)的成功將如何解釋呢?如上所述,我已經嘗試在瀏覽器請求中使用數字IP地址和可解析的域名。 – Ben