为什么python socket不能在这里解析域名?

时间:2017-09-06 21:19:18

标签: python sockets dns hosts

我使用python套接字连接到服务器以进行日志记录。服务器的IP地址为x.x.x.x(我只是隐藏它,x可以是0到255之间的数字),我的域名可能是www.example.domain.com。我已在x.x.x.x www.example.domain.com /etc/hosts访问sudo时将此import socket mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) '''Block of code''' mysocket.sendto('Hello!', 'www.example.domain.com') mysocket.close() 写入。但是,当我尝试在我的程序中使用域名时,python套接字无法解析域名。

www.example.domain.com

这里的错误信息是:

  

socket.gaierror:[Errno 8]是否提供了nodename或servname   已知

如果我将testLogger更改为纯文本主机名,例如ping,则python套接字能够解决该问题。我可以{{1}}我的机器上的域名,所以我只是想知道为什么python socket在这种情况下无法解析域名。

1 个答案:

答案 0 :(得分:2)

您的代码有几个错误:

您在IP套接字上使用UDP套接字原语sendto()。 此外,address参数的格式不正确,通常是元组(主机名,端口)。

因此,要么创建一个合适的UDP套接字:

mysocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
mysocket.sendto(b'data', ('hostname', 9999))

或使用connect + send / sendall代替:

mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket.connect(('hostname', 9999))
mysocket.sendall(b'data')