HOWTO · Python
Socket.Gaierror behoben: [Errno 8] Knotenname oder Servname angegeben oder in Python nicht bekannt
In diesem Tutorial lernen Sie, den Fehler nodename oder servname zu beheben, der in Python angegeben oder nicht bekannt ist.
Auf dieser Seite
Das socket-Modul in Python bietet eine Schnittstelle zur Berkeley-Sockets-API. Sockets helfen dabei, zwei Knoten in einem Netzwerk zu verbinden, damit sie miteinander kommunizieren können.
Manchmal erhalten Sie in Python einen Socket-Fehler, wenn Sie mit socket-Modulen arbeiten. In diesem Tutorial lernen Sie, diesen Fehler in Python zu beheben.
Erstellen Sie socket.gaierror: [Errno 8] nodename nor servname provided, or not known in Python neu
Hier werden wir den socket.gaierror neu erstellen und erklären, wie man ihn in Python löst.
Das folgende Skript ist ein Server, der darauf wartet, dass ein Client eine Verbindung zum angegebenen Port herstellt.
import socket
s = socket.socket()
host = "localhost"
port = 1234
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print("Connection received from", addr)
c.send("Thank you for connecting")
c.close()
Die Funktion socket.socket() erstellt ein Socket-Objekt und die Funktion socket.bind() bindet den Socket an die angegebene Adresse.
socket.accept() akzeptiert die Verbindung, wenn sich ein Client verbindet. Wenn die Verbindung erfolgreich ist, gibt es die Ausgabe zurück und schließt die Verbindung.
Unten ist ein Client, der sich mit dem angegebenen Host verbindet.
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host, port))
print(s.recv(1024))
s.close
Führen Sie nun im Hintergrund server.py und als nächstes client.py aus.
python server.py &
python client.py
Ausgang:
Fix socket.gaierror: [Errno 8] nodename nor servname provided, or not known in Python
Die Ausgabe zeigt, dass der Fehler in Zeile 7 aufgetreten ist, wo der Code s.connect((host, port)) lautet. Das liegt daran, dass socket.gethostname() den Hostnamen der Maschine zurückgibt, auf der der Python-Interpreter gerade läuft.
Anstelle des Hostnamens müssen Sie jedoch die Host-IP-Adresse angeben. Sie können dieses Problem lösen, indem Sie in der Datei client.py den host als localhost oder 127.0.0.1 zuweisen.
import socket
s = socket.socket()
host = "localhost"
port = 1234
s.connect((host, port))
print(s.recv(1024))
s.close
Ausgang:
Jetzt wissen wir, wie man den socket error in Python behebt. Wir hoffen, dass Sie dieses Tutorial hilfreich finden.