在使用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。