我收到此错误:' socket.gaierror: [errno 11001] getaddrinfo 失败' 当我在 python 中使用套接字模块时



所以我正在制作一个简单的脚本,它只将消息从客户端发送到服务器。当客户端和服务器在同一台计算机上时,脚本运行良好,但当我使用另一台笔记本电脑并尝试向服务器发送消息时,它会在客户端笔记本电脑上显示此错误。

服务器脚本:

import threading

HEADER = 64
PORT = 5000
SERVER = '######'
ADDR = ('', PORT)
FORMAT = 'utf-8'
DISCONNECT_MSG = '//*DISCONNECT*//'
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(ADDR)

def handle_client(conn, addr):
print(f'[NEW CONNECTION] {addr}')
connected = True
while connected:
msg_len = conn.recv(HEADER).decode(FORMAT)
if msg_len:
msg_len = int(msg_len)
msg = conn.recv(msg_len).decode(FORMAT)
if msg == DISCONNECT_MSG:
connected = False
print(f'[{addr}] {msg}')
conn.close()



def start():
print(f'[LISTENING] listening on {SERVER}')
server.listen()
while True:
conn, addr = server.accept()
# hc for hand client
thread_hc = threading.Thread(target=handle_client, args=(conn, addr))
thread_hc.start()
print(f'[ACTIVE CONNECTIONS] {threading.activeCount() - 1}')

print('[STARTING] server is starting.....')
start()

客户端脚本:


HEADER = 64
PORT = 5000
FORMAT = 'utf-8'
DISCONNECT_MSG = '//*DISCONNECT*//'
SERVER = '######'
ADDR = (SERVER, PORT)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
def send(msg):
message = msg.encode(FORMAT)
msg_length = len(message)
send_length = str(msg_length).encode(FORMAT)
send_length += b' ' * (HEADER - len(send_length))
client.send(send_length)
client.send(message)
try:
while True:
msg = input('message: ')
send(msg)
if msg == DISCONNECT_MSG:
break
except BrokenPipeError:
print('the connection was broken')

你能告诉我代码中有什么问题吗。我是python套接字的新手,所以如果我犯了任何新手错误,请忽略它。

getaddrinfo failed是一个错误,意味着操作系统无法解析DNS名称的IP地址。

例如,如果SERVER是a-name-with-no-ip.example.com,并且您尝试连接到它,它将抛出一个getaddrinfo failed

最新更新