Mój komputer znajduje się za routerem, który przesyła do niego port 80 (jako port 80). Mój problem polega na tym, że HttpListener wydaje się ignorować żądania kierowane do zewnętrznego adresu IP.Dlaczego HttpListener ignoruje żądania zewnętrzne?
Problem nie dotyczy routera; Jeśli utworzyć pusty projekt C# konsoli i dodać tylko następujące wiersze kodu:
System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80);
s.Start();
System.Net.Sockets.TcpClient c = s.AcceptTcpClient();
... i uruchom program [Uwaga: Przy pierwszym uruchomieniu tego programu, użytkownik może mieć do umożliwienia zapory wyjątkiem], będzie ona rozwiązana, jeśli poruszać się
http://localhost/testpath/
w przeglądarce OR gdybym przejdź do
http://externalipaddress/testpath/
w przeglądarce - albo adres pomyślnie próby połączenia z portem 80. Tak, wszystko jest ustawione prawidłowo - to komputer może przyjmować połączeń wewnętrznych i zewnętrznych na porcie 80.
Teraz, gdy tworzę kolejny pusty C# projekt konsoli i dodać tylko następujące wiersze kodu:
System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();
... po pierwsze, otrzymam wyjątek HttpListenerException z informacją, że dostęp jest zabroniony z powodu problemów wymienionych w this question. Następnie uruchomi się poprawnie po zamknięciu Visual Studio i ponownym otwarciu jako Administrator. Program zakończy (prawidłowo), kiedy należy przejść do
http://localhost/testpath/
Jednak moją prośbę po prostu czasy się, czy poruszać się
http://externalipaddress/testpath/
Dlaczego mój zewnętrzny prośba o HttpListener time out? Wynik jest odtwarzalny z numerycznym adresem IP lub nazwą domeny dla "externalipaddress", jak również z wieloma permutacjami podfolderów, ukośników itp., A także z przedrostkami "http: // *: 80/testpath /", "http : // externaldomain: 80/testpath/"i" http: // externalipaddress: 80/testpath/"(bez spacji, dodane do formatowania stackoverflow).
Czy zapytałeś swojego dostawcę usług internetowych, czy blokuje połączenia przychodzące na porcie 80? Jest to rzadkie, ale niektóre tak. Spróbuj również rozwiązać swój zewnętrzny adres IP, tak aby wskazywał na "homeusr51363_516.your_isp.com" lub podobny – rath
Jeśli mój usługodawca internetowy zablokował połączenia przychodzące, w jaki sposób sukces pierwszego kodu (który łączy się z portem 80 za pośrednictwem zewnętrznego adresu IP) będzie wyjaśnione? Jak już wspomniano, próbowałem używać liczbowego adresu IP i rozpoznawalnej nazwy domeny w żądaniach przeglądarki. – Ben