DelphiFTP超时异常

Delphi FTP timeout exception

我正在使用 Indy 的 FTP

它完全符合我的要求,我唯一的问题是如果系统未连接到 Internet 或服务器已关闭,则会在屏幕上显示超时异常。

我似乎无法找出如何捕获异常。 我只是希望它能够显示我自己的消息以向用户保证没有问题,而不是显示错误。如果说得通。

我以前用过 try excepts,但它们似乎在这里不起作用。 有人可以给我一个想法或一些示例代码,说明在此处以及如何编写异常捕获器吗?

谢谢

编辑: 抱歉,我的普通电脑不在身边,所以无法 post 编码。 实际上我只是重试了,它确实捕获了它,感谢关于调试器总是显示异常的说明。 但是,在我的自定义消息之后,我还会收到一条 'Connection Closed Gracefully' 消息。 (我 运行 它在调试器之外) How/Where我可以catch/stop那个吗?

此外,它有时会 returns 来自我的服务器的消息,例如 'Cant connect more than 3 times on same account' 或其他。我也可以 stop/catch 吗? 谢谢 这里:

Form1.ftp.Host := 'HOSTNAME';
            Form1.ftp.User := 'USERNAME';
            Form1.ftp.password := 'PASSWORD';
            Try
                    Form1.ftp.Connect;
            Except on E : Exception do
                    begin
                            ShowMessage('Timeout Error, dont worry');
                    end;
            end;

与 Indy 中的大多数组件一样,TIdFTP 同步执行所有操作,并且将错误报告为异常。标准 try/except 块工作得很好。 Indy 就是为此而设计的。

如果您在 运行 您的应用程序处于调试器之外时看到 Connection Closed Gracefully 消息出现,这意味着您尝试在套接字已经断开连接后执行套接字操作,但您没有捕获代码中引发的 EIdConnClosedGracefully 异常。例如,如果 Connect() 失败,它会在向您抛出异常之前在内部调用 Disconnect()。在这种情况下,不要调用任何其他 TIdFTP 方法,除非需要时再次调用 Connect()

至于 FTP 服务器发送的错误消息,它们通常通过引发 EIdReplyRFCError(或派生的)异常来报告,您可以在代码中捕获这些异常。