我想从FTP下载文件。如果文件很小(通常在1000MB以下),它就可以工作。但是,如果文件很大,我会得到一个EIdReadTimeout。为什么?我应该保持连接活着吗?据我所知,阅读数据有自己的频道,所以我不必保持连接活着。异常类EIdReadTimeout消息'Read timed out'[Indy-IdFTP]
奇怪的是,异常出现在Get(在Get成功下载整个文件之后)的末尾:FTP.Get(Name,TempGzFile,TRUE,FALSE)!
文档:
TIdFTP.ReadTimeout - 毫秒等待一个FTP协议响应的数量。
TIdFTP.TransferTimeout - FTP 客户端的数据通道读取操作的超时值。
默认情况下,ReadTimeout设置为60秒,TransferTimeout设置为10秒。
我使用Delphi XE7(我猜是使用Indy 10)。我的IdFTP的Passive属性设置为false。
删除超时,或使其变大。在任何情况下,下载大文件或未知文件大小都不应该超时,或者应该设置为很长时间。想象一下,有人使用非常慢的互联网连接。你使用主动还是被动模式?哪个版本的Indy? – 2015-03-24 23:00:09
我不确定哪些超时没有刷新我的FTP知识,我放弃了使用FTP不稳定(用于程序使用)并在很久以前转移到HTTP。但是你有一个超时的地方。如果不是,那么它在服务器端一定是个问题。 – 2015-03-24 23:05:12
即使有人能够在没有看到完整设置的情况下回答,根据Indy版本和FTP模式的不同,答案可能会有很大差异。你需要包括这些。但我猜如果你没有超时,那么服务器可能会。你尝试过不同的服务器吗? – 2015-03-24 23:08:07