2013-03-06 17 views
35

Jestem nowym użytkownikiem Pythona i przeglądam książkę, Core Python Applications 3rd Edition. To jest pierwszy przykład i już mnie to zaskoczyło. Oto kod z błędem na końcu. nr 1/usr/bin/env pythonCo oznacza ten plik 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 

Co to oznacza?

Odpowiedz

14

The

HOST = ' ' 

powinien przeczytać

HOST = '' 

(czyli bez spacji między cudzysłowów).

Powodem, dla którego otrzymujesz błąd jest to, że ' ' nie jest prawidłową nazwą hosta. W tym kontekście '' ma specjalne znaczenie (zasadniczo oznacza "wszystkie adresy lokalne").

31

Oznacza to, że podana nazwa hosta ' ' jest nieważna (gai oznacza getaddrinfo()).

Jak już podaje NPE, być może pusty ciąg znaków '' byłby bardziej odpowiedni niż odstęp ' '.

+3

Ta odpowiedź jest bardziej przydatna, dla wszystkich z wyjątkiem OP - czyli osób, które nie napisały 'HOST = ''' na swoim małym serwerze echa TCP. Ja na przykład - chciałem tylko wiedzieć, jaki to wyjątek. Dziękuję za wyjaśnienie, co oznacza "gai". –