为什么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')
我正在使用 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')