我在使用TidFTP组件时遇到问题。
我可以使用这样的代码与服务器连接
vFileList := TStringList.Create;
oClientFTP := TidFTP.Create(nil);
oClientFTP.Port := PortFTP;
oClientFTP.Host := IPHost;
oClientFTP.UserName := UserFTP;
oClientFTP.Password := PasswordFTP;
从StringList获得多个文件(此元素正好具有778个元素)后,元素编号为0。检索到137,异常EIdAcceptTimeout引发为“ Accept timed out”。信息。
我运行的代码是这样的(顺便在线程中运行)
procedure TDownloadFTP.Get;
begin
try
for I := 0 to vFileList .Count - 1 do
begin
sFileName:= vFileList [I];
posPoint := LastDelimiter('.', sFileName);
if posPoint = 0 then
ForceDirectories(ExtractFilePath(Application.ExeName) + '/BackUp/' + sFileName)
else
try
oClienteFTP.Get(sFileName,IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName) + '/BackUp/') + sFileName, True);
except
on E: EIdReplyRFCError do
begin
end;
on E: Exception do
exceptionList.Add(sFileName);
end;
end;
例外之后,文件已正确下载,但每个文件的处理过程大约需要25秒(我正在下载2KB png图像)。
对这个Exception的含义有任何想法吗?
谢谢
搜寻EIdAcceptTimeout
Indy论坛中的讨论的线索:
TIdFTP中的UseHOST(客户端)=> EIdAcceptTimeout
雷米·勒博(Remy Lebeau)指出:
如果您将TIdFTP.Passive属性设置为False,则在数据传输期间唯一可能发生异常的情况是,该属性告诉FTP服务器建立与TIdFTP的入站连接。这些连接通常被不支持FTP的防火墙/路由器阻止。当您位于防火墙/路由器后面时,通常必须设置TIdFTP.Passive = True。
因此,解决方案可能是为您添加一行
oClientFTP.Passive := True;
顺便提一句。在代码段中,您同时拥有oClientFTP和oClienteFTP。如有需要,请调整我的建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句