Delphi 通訊報Asynchronous socket error 10053錯誤的一個解決方法
在使用Delphi中的TClientSocket和TServerSocket進行通訊程式設計時,當使用TClientSocket這方的客戶端使用TClientSocket.close斷開連線並退出程式時,使用TServerSocket這方的服務端有時會報‘’Asynchronous socket error 10053‘這個錯誤,查閱了這個錯誤說明:Software caused connection abort.(因軟體原因導致連線終止)。這個原因說明很雞肋,因為你還是無法確定到底是哪個地方出現了問題。
實際上出現這個錯誤很大的原因是沒有客戶端和服務端的連線沒有斷開就直接將TClientSocket給free掉造成的,在這裡有兩種解決方法(其實就是一種,只不過解決的地方不同而已,都是將連線斷開)
一:在呼叫TClientSocket的Close函式之前呼叫TClientSocket.Socket.Close將連線斷開,但這也存在另一個問題,就是還存在未接收完全的資料,此時服務端仍然會報Asynchronous socket error 10053錯誤,因此在呼叫TClientSocket.Socket.Close之前可再呼叫一次TClientSocket.Socket.ReceiveText將服務端傳送的資料接收完全
二:在服務端的OnClientError事件中新增如下程式碼:
case ErrorCode of
10053: Socket.Close;
end;
ErrorCode := 0;
將連線斷開,並設定ErrorCode為0,如果不設定,雖然連線斷開,但錯誤碼仍然是10053,仍然會彈窗報Asynchronous socket error 10053。