簡體   English   中英

服務器和客戶端問題:socket.gaierror:[Erno 11001] getaddrinfo失敗

[英]Server and client issue: socket.gaierror: [Erno 11001] getaddrinfo failed

我是網絡工作原理的新手,我正在嘗試為類分配編寫兩個腳本,一個充當服務器,一個充當客戶端。 服務器和客戶端腳本都將在同一台計算機上運行,​​並且每個腳本都使用兩個不同的端口(客戶端端口和服務器端口)。 客戶端應該能夠將消息發送到服務器,如果發送成功,則可以獲取消息。 這是客戶端代碼:

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)

我在這里看到多個有關此錯誤的線程,但是它們都沒有真正幫助解決我的問題。 在執行兩個腳本之前,我已經檢查確保兩個端口都已打開,並且它們確實已經打開。 我最初的猜測是,即使啟動並正在運行並等待響應,它也無法找到實際的服務器端口。 所以我很困惑。 此錯誤是什么意思,我該如何解決?

您在嘗試發送消息之前忘記將客戶端套接字實際連接到服務器套接字:

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()

我也將serverName更改為localhost

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM