2011-03-24 107 views
1

我的應用程序使用TidTCPClient將數據發送到服務器。服務器使用TidTCPServer。所有工作正常,我現在正在嘗試處理意外情況。是否可以立即終止TCPClient?

當我斷開服務器和客戶端之間的網絡電纜,然後嘗試關閉客戶端,它會等待很長一段時間,直到最後關閉:

TCPClient.IOHandler.InputBuffer.Clear; 
TCPClient.Disconnect; 
TCPClient.Free; 

TCPClient.Free的地方是它等待的時間。這有時候是30秒,有時甚至更長。

有沒有辦法立即終止一個TCPClient,不管它在那個時候做什麼?

回答

1

在調用Disconnect()之後(而不是之前),您應該清除InputBuffer

在任何情況下,在斷開/釋放TIdTCPClient時,沒有任何理由讓套接字引起這種掛起,除非您已經弄亂了套接字的LINGER選項。所以我不得不懷疑你自己的代碼首先是錯誤的。你使用哪個版本的Indy?你有任何事件處理程序分配到TIdTCPClient?你有沒有試過在調試器中通過TIdTCPClient的析構函數來查看真正發生了什麼?

0

它可能會等待超時。查看組件的屬性以降低超時值

+1

沒有超時斷開連接。 – 2011-03-25 01:47:13