我使用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在这种情况下无法解析域名。
答案 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')