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