Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';t python套接字在这里解析域名?_Python_Sockets_Dns_Hosts - Fatal编程技术网

为什么可以';t python套接字在这里解析域名?

为什么可以';t python套接字在这里解析域名?,python,sockets,dns,hosts,Python,Sockets,Dns,Hosts,我正在使用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,soc

我正在使用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或servname 已知的


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

您的代码有几个错误:

您正在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')

错误是什么?如果执行
socket.gethostbyname('www.example.domain.com')
,会发生什么情况?在更新的代码中,sendto()中的地址是一个字符串,而不是元组,并且缺少端口号。@Birrree它将能够解析域字符串。@DanielleM。这是一个输入错误,我修正了它。好吧,那只是另一个一般性的问题,
python3socket
默认情况下是否能够解析域名?是的,它们会这样做,因为通常在处理socketapi调用的操作系统级别处理