2017-12-25 14 views
0

Mit dem folgenden Python 3-Code:Http: auf localhost vs 127.0.0.1 "Kann nicht angeforderte Adresse zuweisen"

from http.server import HTTPServer, SimpleHTTPRequestHandler 
s = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler) 

ich die folgende Fehlermeldung erhalten:

Traceback (most recent call last): 
    File "repro.py", line 2, in <module> 
    s = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler) 
    File "/usr/lib/python3.6/socketserver.py", line 453, in __init__ 
    self.server_bind() 
    File "/usr/lib/python3.6/http/server.py", line 136, in server_bind 
    socketserver.TCPServer.server_bind(self) 
    File "/usr/lib/python3.6/socketserver.py", line 467, in server_bind 
    self.socket.bind(self.server_address) 
OSError: [Errno 99] Cannot assign requested address 

Ich habe bemerkt, dass 3 Dinge werden dies verhindern:

  1. WiFi deaktivieren.
  2. Wechsel zu einem anderen WLAN-Netzwerk (von meinem Heimrouter zu meinem Telefon).
  3. Ändern 'localhost' im Code zu '127.0.0.1'.

Also meine Frage ist, was hier schief läuft? Warum schlägt dieser Code fehl, wenn es funktioniert?

P.S. Here is ip a's output when connected to my home router und here's its output when tethering.

+0

Haben Sie einen anderen verfügbaren Port ausprobiert? Port 0 ist ein System oder ein bekannter Port, wie [hier] (https://en.wikipedia.org/wiki/Registered_port) beschrieben. –

+0

Wenn der Wechsel von 'localhost' nach' 127.0.0.1' es behebt, klingt es wie ein DNS-Problem. Was zeigt 'dig localhost'? – Barmar

+0

Ihre 'ip a' Ausgabe fehlt die wichtigen Bits, d. H. Die Schnittstelle' lo'. Bitte fügen Sie diese Informationen hinzu. –

Antwort

0

ich denke, Sie können nicht in 0 Port hören. Ich versuchte in Knoten js und SocketTest. Sie 2 können (und können nicht hören), können aber nicht mit dem Port verbinden. Es bedeutet, dass es beides kann und kann.
kann dieser Link helfen Ihnen
https://unix.stackexchange.com/questions/180492/is-it-possible-to-connect-to-tcp-port-0
https://docs.python.org/2/library/simplehttpserver.html

+0

Ich verstehe nicht, warum diese Antwort abgelehnt wird, es ist die richtige Antwort. Sie können nicht generell auf Port 0 hören. Und wenn Sie nicht Ihren Python-Snippet als root ausführen, können Sie keinen Port unter 1024 binden. Sie sollten also versuchen: s = HTTPServer (('localhost ', 8080), SimpleHTTPRequestHandler) – opentokix

+0

@opentokix Mit '(' localhost ', 0)' wird ein zufälliger, offener, nicht privilegierter Port zugewiesen. –

0

Ich glaube, das Problem war, dass der DNS-Dienst auf meinem Heim-WiFi-Netzwerk wurde nicht für localhost die richtige Information zurück. Ich habe dieses Problem behoben, indem ich die Adresse als 127.0.0.1 fest codierte.

Verwandte Themen