IM indy10我溝通,有時在客戶端斷開它拋出一個異常,我想知道什麼斷開連接(TIdContext)最安全的方法?在indy10中終止連接的最佳方式是什麼?使用
,我應該怎樣做就OnDisconnect甚至和相似?
謝謝。
IM indy10我溝通,有時在客戶端斷開它拋出一個異常,我想知道什麼斷開連接(TIdContext)最安全的方法?在indy10中終止連接的最佳方式是什麼?使用
,我應該怎樣做就OnDisconnect甚至和相似?
謝謝。
引發異常是正常行爲。 Indy旨在大量使用異常,不僅用於錯誤處理,還用於內部通知等。當TIdTCPServer
檢測到連接完成,或者是因爲客戶端斷開OnDisconnect
被觸發(和TIdTCPServer
處理的異常爲你),或者因爲未捕獲的異常在OnExecute
處理程序代碼發生。無論哪種方式,使用OnDisconnect
執行任何你需要的清理。 TIdTCPServer
將在OnDisconnect
事件處理程序退出後關閉套接字。
我只想補充一些關於插座的內部工作(TCP),我知道:
所有這一切服務器和客戶做,他們將數據塊給對方。 服務器僅與客戶端不同,因此他是被動的,直到任何客戶端都不首先發送連接請求。但是,如果客戶希望或被迫斷開連接,都是需要做的是停止將數據發送到服務器。優雅地關閉連接客戶端可能會發送有關此事件的特殊數據,例如通過電話說「goodbay」,但這不是絕對必需的。只要想象一下從您的電話(客戶)任何服務(服務器)。你開始與「你好」的對話,並且服務人員迴應。如果您意外按下手機上的重置,呼叫將會丟失。但服務仍然繼續他的工作。你可以再打電話給它。沒有什麼不好的事情發生。
所有你需要關心的是穩定和正確的客戶端和服務器自己工作。檢查不正確的發送和接收數據。嘗試重新連接時,需要從客戶端。如果在客戶端內發生某些異常,則必須根據需要處理它,並在當前連接因這種強制事件而丟失時正常處理。
其他的一切已經被雷米勒博回答。
好的,如果我想關閉整個套接字?我應該只是做TIdTCPServer.Active:= False?或者有一些清理我應該做? 謝謝 – killercode 2011-02-19 08:33:49