首页 > 解决方案 > “socket”的实例没有“gethostbyname”成员 Python3

问题描述

我用python编写了一个聊天程序。但是当我写“host = socket.gethostname()”时它给了我错误。我的文件名为“server.py”(不带引号)我该如何解决?代码:

import socket 

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostbyname()
port = 12347

socket.bind((host, port))

socket.listen(10)

c, addr = socket.accept()

c.sendall(bytes("Hi!".encode("utf-8")))

print("Connected to {}".format(addr))

while True:
    data = str(c.recv(1024))[1:]
    if data:
        print("Client: {}".format(data))
        respond = input("Server: ").encode("utf-8")
        if respond == "q":
            exit()
        else:
            c.sendall(bytes(respond.encode("utf-8")))

标签: pythonpython-3.xsockets

解决方案


这应该是一个危险信号:

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

导入时socketsocket是socket模块。上面的行将名称分配给socket套接字对象

然后

host = socket.gethostbyname()

不起作用,因为该方法适用于模块,但模块名称已重新分配给套接字对象

这将起作用(重命名您的套接字对象):

import socket 

my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostbyname("localhost")  # needs an argument, btw

推荐阅读