ConnectionAbortedError: [WinError 10053] 您的主機中的軟件中止了一個已建立的連接


socket服務端在接收socket客戶端時拋出異常

ConnectionAbortedError: [WinError 10053] 您的主機中的軟件中止了一個已建立的連接。

socket服務端代碼

#-*- coding:utf-8 -*-
# Author: Jiang Zu Xing
import socket,time
socketserver=socket.socket()
host="0.0.0.0"
port=9999
socketserver.bind((host,port))
socketserver.listen(5)
while True:
    client,addr=socketserver.accept()
    print("連接來自:",addr)
    msg="顯示服務器返回數據"
    while True:
        print("准備接收數據")
        data = client.recv(1024)
        print("接收數據完畢")
        if data ==0:
            print("no data")
            break
        else:
            print(data.decode('utf-8'))
            client.send(msg.encode())
    client.close()
socketserver.close()

socket客戶端代碼

#-*- coding:utf-8 -*-
# Author: Jiang Zu Xing
import socket,time
socket_client=socket.socket()
host="192.168.1.35"
port=9999
data="222"
socket_client.connect((host,port))
print("開始發送")
socket_client.send(data.encode())
print("開始接收")
msg=socket_client.recv(1024)
print("接收結束")
print(msg.decode('utf-8'))
time.sleep(100)

異常

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/jiang/python/demo/網絡編程/socket_server.py", line 15, in <module>
    data = client.recv(1024)
ConnectionAbortedError: [WinError 10053] 您的主機中的軟件中止了一個已建立的連接。

 

 

出現問題:

剛剛學習socket寫的練手腳本,出現以上異常有兩個原因

1、服務器端Receive數據時,關閉了客戶端就會強制關閉連接,就會出現上面的錯誤提示;

2、客戶端線程執行完,if not data 寫錯,不能跳出循環導致出錯。所以寫是if not data ,是用來判斷客戶端線程是否結束,然后執行退出。

 

建議:

在接收完數據后退出死循環,不要讓recv()函數阻塞住,關閉客戶端(文件發送端)前建議發送一個消息告訴服務器端(文件接收方)“我要斷開連接了”,然后兩方都關閉連接close

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM