我用delphi开发FTP下载的应用,每15分钟从ftp服务器上get文件下来,下载代码如下,基本上能用,唯一的问题就是,大概在晚上22、23点时,会报错,日志跟踪是已经连接上了服务器,但是GET时,会报超时错误,错误信息(Can't build data connection: Connection timed out),为什么都已经连接上了,下载时还会报错呢?是不是因为那个时段ftp服务器比较忙的原因?
if not Self.IdFTP1.Connected then
  begin
    try
      Self.IdFTP1.Host := ftpIp;
      Self.IdFTP1.Username := ftpUser;
      Self.IdFTP1.Password := ftpPwd;
      Self.IdFTP1.TransferType := ftASCII;
      Self.IdFTP1.Connect;
      Self.IdFTP1.ChangeDir(ftpPath);
      Self.SaveLog('成功连接FTP服务器: ' + ftpIp);
      try
       Self.IdFTP1.Get(strFileName, strDestFileName, True, False);   ///偶尔会报错,不知道什么原因
      except on Ex: Exception do
       Self.SaveLog('下载文件失败: ' + Ex.Message);
      end;
    except on E: Exception do
    begin
      Self.IdFTP1.Abort;
      Self.IdFTP1.Quit;
      Self.IdFTP1.Disconnect;
    end;
    end;
  end;
  
请高手指教?!
  

解决方案 »

  1.   

    这个感觉应该正常吧,你不能保证服务器随时都是OK的。 自己做好异常处理即可。另外Indy抛异常是提示错误的方式,不用紧张哈。
      

  2.   

    这个估计跟FTP服务器端的设置有关。
      

  3.   

    我在程序里做了个控制,每一次Connect后,要循环3次GET,如果3次都不成功,就不要了,断开连接。
    有时候,第一次get报错(错误信息就是上面我所说的),第二次get就成功了,我想不通:为什么连接超时了,第二次get时,我也没有重新连接,为什么就会成功下载呢?
    虽然程序做了控制,情况好多了,但我还是希望大家能多给我点指导。谢谢!