【问题标题】:Server and client issue: socket.gaierror: [Erno 11001] getaddrinfo failed服务器和客户端问题:socket.gaierror: [Erno 11001] getaddrinfo failed
【发布时间】:2019-02-04 03:25:06
【问题描述】:

我不熟悉网络的工作原理,我正在尝试为课堂作业编写两个脚本,一个充当服务器,一个充当客户端。服务器和客户端脚本都将在同一台计算机上运行,​​并且每个脚本都使用两个不同的端口(客户端端口和服务器端口)。客户端应该能够向服务器发送消息,然后如果发送成功则返回消息。这是客户端代码:

from socket import *
serverName = 'hostname'
serverPort = 2000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(3000)
print(modifiedMessage.decode())
clientSocket.close()

这是服务器代码:

from socket import *
serverPort = 2000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print("The server is ready to receive")
while True:
   message, clientAddress = serverSocket.recvfrom(3000)
   modifiedMessage = message.decode().upper()
   serverSocket.sendto(modifiedMessage.encode(), clientAddress)

服务器代码运行良好,但运行客户端代码时出现此错误:

socket.gaierror: [Erno 11001] getaddrinfo failed

具体来说不喜欢

clientSocket.sendto(message.encode(), (serverName, serverPort)

我在这里看到了多个关于这个错误的帖子,但没有一个对我的问题有真正的帮助。在执行两个脚本之前,我已经检查以确保两个端口都绝对打开,而且它们确实是。我最初的猜测是它找不到实际的服务器端口,即使它已经启动并运行并等待响应。所以我很难过。这个错误是什么意思,我该如何解决?

【问题讨论】:

  • 主机名是否可以解析:ping <hostname>

标签: python python-3.x networking network-programming


【解决方案1】:

在尝试发送消息之前,您忘记将客户端套接字实际连接到服务器套接字:

from socket import *
serverName = 'localhost'
serverPort = 2000
clientSocket = socket(AF_INET, SOCK_DGRAM)
clientSocket.connect((serverName, serverPort))
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(3000)
print(modifiedMessage.decode())
clientSocket.close()

我还将服务器名称更改为localhost

【讨论】:

  • 不需要连接UDP套接字。
  • @Torxed 刚刚注意到,hostname 似乎无法访问。尽管如此,使用 'localhost' 仍然可以达到相同的结果。
  • @Ernxst 哇,这总是小事,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多