我有一个在delphi XE中开发的客户端/服务器应用程序,它使用scanf
(Indy10)相互通信。
一切都工作得很好,唯一的问题是当我杀死服务器端时,客户端正在引发异常,以某种方式一直提升给用户,它首先显示我的自定义异常:
之后显示错误对话框,如下所示:
这是应该覆盖原始异常的代码,我创建的对话框显示,另一个对话框(上图)显示在之后。
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);
答案 0 :(得分:0)
如果异常不是EIdSocketError类型,则会得到一个空的异常对话框。
if AException is EIdSocketError then