2013-03-06 19 views
35

Ich bin neu in Python und durch ein Buch, Core Python Applications 3rd Edition. Das ist das erste Beispiel und schon bin ich damit ratlos. Hier ist der Code mit dem Fehler am Ende. # 1/usr/bin/env pythonWas bedeutet dieser socket.gaierror?

from socket import * 
from time import ctime 

HOST = ' ' 
PORT = 21567 
BUFSIZ = 1024 
ADDR = (HOST, PORT) 

tcpSerSock = socket(AF_INET, SOCK_STREAM) 
tcpSerSock.bind(ADDR) 
tcpSerSock.listen(5) 

    while True: 
     print 'waiting for connection...' 
     tcpCliSock, addr = tcpSerSock.accept() 
     print "...connected from:", addr 

     while True: 
     data = tcpCliSock.recv(BUFSIZ) 
     if not data: 
      break 
     tcpCliSock.send("[%s] %s" % (ctime(), data)) 

    tcpCliSock.close() 
tcpSerSock.close() 

Traceback (most recent call last): 
    File "tsTserv.py", line 12, in <module> 
    tcpSerSock.bind(ADDR) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth 
socket.gaierror: [Errno 8] nodename nor servname provided, or not known 

Was bedeutet das?

Antwort

14

Die

HOST = ' ' 

sollte

HOST = '' 

(das heißt kein Raum zwischen den Anführungszeichen) lesen.

Der Grund für die Fehlermeldung ist, dass ' ' kein gültiger Hostname ist. In diesem Zusammenhang hat '' eine besondere Bedeutung (es bedeutet im Grunde "alle lokalen Adressen").

31

Dies bedeutet, dass Ihr angegebener Hostname ' ' ungültig ist (gai steht für getaddrinfo()).

Wie NPE bereits angibt, wäre möglicherweise eine leere Zeichenfolge '' geeigneter als ein Leerzeichen ' '.

+3

Diese Antwort ist nützlicher, für alle außer dem OP - das sind Leute, die 'HOST = ''' nicht in ihren kleinen TCP-Echo-Server geschrieben haben. Ich zum Beispiel - ich wollte nur wissen, was für eine Ausnahme das war. Vielen Dank für die Erklärung, wofür 'gai' steht. –