【发布时间】:2014-11-21 14:06:33
【问题描述】:
我在使用 TidFTP 组件时遇到问题。
我可以使用这样的代码与服务器连接
vFileList := TStringList.Create;
oClientFTP := TidFTP.Create(nil);
oClientFTP.Port := PortFTP;
oClientFTP.Host := IPHost;
oClientFTP.UserName := UserFTP;
oClientFTP.Password := PasswordFTP;
从StringList中得到几个文件后(这个正好有778个元素)当元素没有。检索到 137 异常 EIdAcceptTimeout 引发“接受超时”。消息。
我运行的代码是这样的(顺便在一个线程中运行)
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 图像)。
知道这个异常的含义吗?
谢谢
【问题讨论】:
-
超时是 TCP/IP 网络中的一个标准概念。你真的在问什么是 TCP 超时吗?在 FTP 连接的上下文中,ACCEPT 应该从服务器端返回,但它没有。现在做什么取决于你。中止整个过程,跳过文件,然后尝试获取下一个文件,重试该文件 3 次,然后转到下一个文件。你决定。此 FTP 组件只是文件传输解决方案的一个级别,它不会为您决定当网络出现故障时该怎么做,而它始终可以。
标签: delphi ftp delphi-xe2 indy