Socket应用报错ConnectionResetError: [Errno 54],求代码排查修复方案
修复ConnectionResetError: [Errno 54] Connection reset by peer错误
代码存在的核心问题
- 服务器端Socket流程错误:你直接用监听状态的Socket(
s)调用send(),这违背了TCP Socket的工作逻辑。监听Socket仅负责等待客户端连接请求,必须通过accept()方法获取新的连接Socket,才能和客户端进行数据收发。同时你的服务器在listen()后没有等待客户端连接就直接发送数据,此时不存在有效连接,导致客户端连接后收到重置信号。 - 客户端解码逻辑遗漏:
server_input.decode()没有将解码后的字符串重新赋值给变量,后续直接用字节串和字符串拼接会触发类型错误。
修正后的代码
修正后的server.py
import socket def main(): # 创建监听socket s = socket.socket() port = 58257 server_address = "localhost" s.bind((server_address, port)) s.listen(2) print("等待客户端连接...") # 接受客户端连接,获取连接socket与客户端地址 conn, addr = s.accept() print(f"已连接客户端: {addr}") user_input = input("Enter a message: ") # 使用连接socket发送数据 conn.send(user_input.encode()) # 先关闭连接socket,再关闭监听socket conn.close() s.close() if __name__ == '__main__': main()
修正后的client.py
import socket def main(): s = socket.socket() port = 58257 server_address = "localhost" s.connect((server_address, port)) print("connected ") server_input = s.recv(1024) # 解码后重新赋值 server_input = server_input.decode() print("Received message: " + server_input) s.close() if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Desperate rookie5555
相关产品推荐
相关产品推荐

