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

Why can't python socket resolve domain name here?

我正在使用 python 套接字连接到服务器以进行日志记录。服务器的IP地址是x.x.x.x(我只是隐藏了这个,x可以是0到255之间的数字),我的域名可以是www.example.domain.com。我在 /etc/hosts 中用 sudo 访问权限编写了这个 x.x.x.x www.example.domain.com。但是,当我试图在我的程序中使用域名时,python 套接字无法解析域名。

import socket

mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
'''Block of code'''
mysocket.sendto('Hello!', 'www.example.domain.com')
mysocket.close()

这里的错误信息是:

socket.gaierror: [Errno 8] nodename nor servname provided, or not known

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

您的代码有几个错误:

您正在 IP 套接字上使用 UDP 套接字原语 sendto()。 还有,address参数的格式不对,一般是一个元组(hostname, port)。

所以,要么创建一个合适的 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')