【问题标题】:socket.gaierror: [Error -2] Name or service not knownsocket.gaierror:[错误-2]名称或服务未知
【发布时间】:2018-12-18 14:00:48
【问题描述】:

socket 模块中的所有东西都在工作,但是socket.get host by name 给出了一个不希望的错误。

这是客户端代码:

import socket
s = socket.socket()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname("DESKTOP-HC36K46")
port = 1122
s.connect((host,port))
print("CONNECTED TO SERVER")
while True:
    data = s.recv(2)
    print(str(data))
    data = str(data)
    if(data == "b'w'"):
        print("W")
    elif(data == "b's'"):
        print("S")
    elif(data == "b'a'"):
        print("A")
    elif(data == "b'd'"):
        print("D")
    elif(data == "b'wa'"):
        print("WA")
    elif(data == "b'wd'"):
        print("WD")
    elif(data == "b'sa'"):
        print("SA")
    elif(data == "b'sd'"):
        print("SD")

这段代码在 Windows PC 上运行良好,但是当我尝试在 Linux(Raspbian 或 Kali Linux)上运行它时,它给了我错误

socket.gaierror: [错误 -2] 名称或服务未知

我可以做些什么来解决这个问题?

【问题讨论】:

  • 在 socket.gethostbyname() 调用后尝试打印主机。您的主机现在真的命名为“DESKTOP-HC36K46”吗?
  • 您可能需要在/etc/hosts(或本地DNS)中添加主机,以便libc可以解析它...

标签: python sockets


【解决方案1】:

您的问题是socket.gethostbyname("DESKTOP-HC36K46") - 这应该返回与该名称关联的 IP 地址,但 python 不会自己执行此操作,python 所做的只是向操作系统询问地址。最终,系统会使用其配置的方法将名称解析为 IP 地址,而不是 python。

您的 Windows 系统正在返回正确的地址,但您的 linux 系统可能配置错误,在这种情况下没有返回地址。

无论如何,这不是python问题,python方面没有什么可解决的,除了可能删除这一行并直接硬编码ip地址:

host = '192.168.0.4' # or whatever is the ip address

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2013-12-14
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多