2013-03-07 32 views
1

enter image description here enter image description hereIdTcpServer崩潰

我使用Indy的TCP服務器/客戶端,一切工作正常(固定的幾個錯誤),但有一個錯誤,是纏着我。

當我凍結所有線程&然後終止服務器崩潰的tcp客戶端的進程,並不斷提高tcpserver中的這個錯誤^不間斷。

有沒有辦法在Delphi 6和其他套接字錯誤中處理該錯誤,並防止服務器崩潰(我正在使用德爾福6/Windows 8 64位(可能不需要,但我從來沒有測試過我的勝利7所以...)/ indy 9/Indy TCP服務器&客戶端)?

+0

你在'TIdTCPClient' /'TIdTCPServer'中修復了什麼「錯誤」? – 2013-03-07 23:19:08

+0

只有一個錯誤與此相關(我認爲),我忘記調用TThreadList.UnlockList,並且它導致客戶端仍連接到服務器,但服務器從未將它們添加到線程列表中。 – user0 2013-03-07 23:24:18

回答

4

您的服務器沒有崩潰。 EIdSocketErrorTIdTCPServer在客戶端連接關閉/丟失時遇到的完全正常例外情況。這是正常的行爲。 TIdTCPserver將在內部爲你處理,如果異常轉入服務器(你應該允許它執行 - 如果你自己捕獲它,在完成之後重新提升它),關閉套接字。唯一的原因是你看到這個異常是因爲調試器在你的應用程序看到它之前報告它。只需按F9讓調試器將它傳遞給應用程序進行正常處理,或者將調試器配置爲忽略基於Indy EIdException的異常。

+0

對不起,如果我誤導了我,我的意思是,當我按F9時,它一直在反覆提出相同的異常。 – user0 2013-03-07 23:27:07

+1

你是否仍然試圖在異常之後寫入連接?比截圖更好的是問題中的相關代碼。你知道你的代碼哪一行引發異常嗎? – jachguate 2013-03-07 23:28:39

+0

'ledata:= AThread.Connection.ReadLn('',10);' '客戶端:= PClient(AThread.Data); < - 在這裏提出的例外。' – user0 2013-03-07 23:32:05

0

請確保您使用的是比D7中安裝的更新版本的Indy(您需要先刪除舊版本)。有崩潰的線程錯誤< 9.0.18

+0

我現在使用純Winsock,我打算不再需要使用Indy了。這不是必需的。 – user0 2013-04-20 14:19:47