Indy 10提出了一个不必要的例外

时间:2015-06-16 02:46:56

标签: delphi tcp delphi-xe indy indy10

我有一个在delphi XE中开发的客户端/服务器应用程序,它使用scanf(Indy10)相互通信。 一切都工作得很好,唯一的问题是当我杀死服务器端时,客户端正在引发异常,以某种方式一直提升给用户,它首先显示我的自定义异常:

enter image description here

之后显示错误对话框,如下所示:

enter image description here

这是应该覆盖原始异常的代码,我创建的对话框显示,另一个对话框(上图)显示在之后。

TIdTcpClient

我尝试使用constructor EtvdNTierTcpException.Create(const AException: Exception); const error = 'error message'; var AIdSocketError: EIdSocketError; sMessage, sConnectionPoint: string; begin if AException is EIdSocketError then begin AIdSocketError := AException as EIdSocketError; if StvdDefaultSession.tvdConnectionPoint = cpSqlProxy then sConnectionPoint := FtvdNTierSqlProxy else sConnectionPoint := FtvdNTierSqlServer; case AIdSocketError.LastError of // 10054: Connection reset by peer 10054: self.Message := ExtractFileName(application.exename) + error + DateToStr(Now) + ' ' + TimeToStr(Now) + ' (' + AIdSocketError.ClassName + ')' + 'Connection for dataset fail at(10054)'; // 10061: Connection refused 10061: self.Message := ExtractFileName(application.exename) + error + DateToStr(Now) + ' ' + TimeToStr(Now) + ' (' + AIdSocketError.ClassName + ')' + 'Connection for dataset fail at(10061)'; else self.Message := error + DateToStr(Now) + ' ' + TimeToStr(Now) + ' (' + AIdSocketError.ClassName + ')' + 'Connection for dataset fail at('+IntToStr(AIdSocketError.LastError)+')'; end; end; inherited; end; ,但它没有任何区别,有关如何阻止Indy显示此错误的任何想法?

以上引发异常的方法如下:

CheckForGraceFulDisconnect(false);

1 个答案:

答案 0 :(得分:0)

如果异常不是EIdSocketError类型,则会得到一个空的异常对话框。

if AException is EIdSocketError then