![](/img/trans.png)
[英]Python socket ConnectionResetError: [Errno 54] Connection reset by peer vs socket.error: [Errno 104] Connection reset by peer
[英]socket question: ConnectionResetError: [Errno 54] Connection reset by peer
我正在編寫一個簡單的套接字應用程序,我遇到了這條消息,但不知道如何解決。
server_input =s.recv(1024)
ConnectionResetError: [Errno 54] Connection reset by peer
服務器.py
import socket
def main():
s = socket.socket()
port = 58257
client_address = "localhost"
s.bind((client_address, port))
s.listen(2)
user_input = input("Enter a message: ")
s.send(user_input.encode())
s.close()
if __name__ == '__main__':
main()
客戶端.py
import socket
def main():
s = socket.socket()
#host = socket.gethostname()
port = 58257
client_address = "localhost"
s.connect((client_address, port))
print("connet ")
server_input =s.recv(1024)
server_input.decode()
print("Received message: " + server_input)
s.close()
if __name__ == '__main__':
main()
我的代碼有什么問題嗎? 太感謝了!!!
s.bind((client_address, port))
s.listen(2)
user_input = input("Enter a message: ")
s.send(user_input.encode())
服務器需要在服務器套接字上調用accept
來為連接的客戶端獲取一個套接字,然后在這個連接的套接字上調用send
,而不是在服務器套接字上。
如果沒有這個,客戶端中的connect
仍然會成功,因為它是由服務器端的操作系統 kernel 完成的。 但是由於連接的套接字永遠不會被服務器accept
,它將被重置,從而導致您看到的錯誤。
所以服務器端更正確的代碼是
...
s.listen(2)
c,_ = s.accept()
user_input = input("Enter a message: ")
c.send(user_input.encode())
c.close()
請注意,您的客戶端代碼還有其他問題,即應該是
print("Received message: " + server_input.decode())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.