簡體   English   中英

套接字問題:ConnectionResetError: [Errno 54] 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.

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