首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python Socket 客戶端未 recv 導致服務端 recv 報錯 10053

     編輯:程式設計疑難解答

服務端發送歡迎訊息後 conn.recv(1024) 阻塞等待客戶端回覆。若客戶端未調用 recv 直接關閉連接,服務端的 recv 會拋出 socket.error: [Errno 10053] Software caused connection abort(Windows 下連接被軟體中止)。

根因

  • TCP 是全雙工,雙方獨立收發。
  • 客戶端關閉 Socket 發送 FIN 包,服務端收到後,後續 recv 返回 0(正常關閉)或拋異常(異常中斷),視具體時序而定。
  • 代碼中客戶端註釋掉 recv 並直接退出,導致服務端阻塞在 recv 時連接被重置。

健壯寫法

# 服務端
try:
    msg = conn.recv(1024)
    if not msg:  # 對端正常關閉
        print("Client closed")
    else:
        print("Received:", msg.decode())
except ConnectionResetError:
    print("Connection reset by peer")
except Exception as e:
    print("Error:", e)
finally:
    conn.close()

原則

  • 所有網絡 I/O 必須 try-except 捕獲異常。
  • 協議設計明確「請求-響應」流程,雙方按序收發。
  • 使用 socket.settimeout 避免永久阻塞。

網絡編程中「對端意外斷開」是常態,必須防御性編程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved