You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:35:28