程序如下: 
procedure TFrmMain.FtpDownLoad(aURL, aFileName: String;bResume: Boolean); 
var 
  FStream: TFileStream; 
  UserName, Password, aHost, aPort, aDir: String; 
  IdFtp: TIdFtp; 
begin 
  if FileExists(aFileName) then 
    FStream := TFileStream.Create(aFileName, fmOpenWrite) 
  else 
    FStream := TFileStream.Create(aFileName, fmCreate);   IdFtp := TIdFtp.Create(nil); 
  try 
    GetFtpParams(aURL, UserName, Password, aHost, aPort, aDir); 
    try 
      if IdFtp.Connected then IdFtp.Disconnect; //重新连接 
      IdFtp.Username := UserName; 
      IdFtp.Password := Password; 
      IdFtp.Host := aHost; 
      IdFtp.Port := StrToInt(aPort); 
      IdFtp.Connect; 
    except 
      IdFtp.Disconnect; 
      Exit; 
    end;     IdFtp.ChangeDir(aDir); 
    if bResume then 
    begin 
      FStream.Position := FStream.Size; 
      IdFTP.Get(GetURLFileName(aURL), FStream, True); 
    end else 
    begin 
      IdFTP.Get(GetURLFileName(aURL), FStream, False); 
    end;     PostMessage(FrmMain.Handle,WM_SUCCED,0,0); 
  finally 
    FreeAndNil(FStream); 
    FreeAndNil(IdFtp); 
  end; 
end; 调用: 
FtpDownLoad('ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/README.TXT','d:\test.txt',false); 可是在FtpDownLoad运行到IdFTP.Get(GetURLFileName(aURL), FStream, True); 
就死在这里不动了。 参考了http://www.kfdoc.com/delphibbs2005/297/2976621.htm的方法: 
1:换成indy 10, 
2:添加IdAntiFreeze1、IdIOHandlerStack1、IdConnectionIntercept1; 
但还是不行。请问这样的问题有朋友出现过吗?该怎样解决?谢谢! 

解决方案 »

  1.   

    朋友帮忙看下我写的程序没有问题吧?
    这个IdFTP.Get把头都搞晕掉了,谢谢你,ly_liuyang!
      

  2.   

    我 indy 9也存在这些问题.特别是换了端口后.
      

  3.   

    FtpDownLoad('ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/README.TXT','d:\test.txt',false); 这个txt已经非常小了,如果这么小文件都有问题,线程也就肯定有问题,是吧。
    这个idftp真搞死人了。
      

  4.   

    设置了 IdFtp.TransferTimeout := 10000;
          IdFtp.ReadTimeout := 10000;效果还是一样,你们做过的类似功能有什么特殊设置吗?
      

  5.   

    将indy 10.0.5 => 换成 10.2.3
    发现终于可以了。
    结贴。