2013-03-06 2 views
35

Я новичок в python и просматриваю книгу, приложения Core Python 3rd Edition. Это первый пример, и я уже в тупике. Вот код с ошибкой в ​​конце. # 1/USR/бен/окр питонЧто означает этот 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 

Что это значит?

ответ

14

The

HOST = ' ' 

не следует читать

HOST = '' 

(то есть никакого пространства между кавычками).

Причина, по которой вы получаете сообщение об ошибке, состоит в том, что ' ' не является допустимым именем хоста. В этом контексте '' имеет особое значение (в основном это означает «все локальные адреса»).

31

Это значит, что не указано ваше имя хоста ' ' (gai означает getaddrinfo()).

Как уже упоминалось в NPE, возможно, пустая строка '' будет более подходящей, чем пробел ' '.

+3

Этот ответ более полезен для всех, кроме OP, - это люди, которые не записали 'HOST = ''' на своем небольшом TCP-эхо-сервере. Я например, я просто хотел знать, какое это исключение. Поэтому спасибо за объяснение того, что означает 'gai'. –