idFTP多线程下载并发问题,并发无法超过2个,谢谢高手指点。

yuetianbao 2015-02-11 04:12:25
服务器用的IIS/Serv-U,默认配置,用Indy FTP开发的客户端,多线下载文件(每个线程一个FTP连接),发现下载时并发数不能超过2个(其它处于等待状态),如果开多个进程,也是如此,累计的下载线程无法超过2个,怀疑是FTP服务器的问题,但没找到解决问题的有效办法, 特来求教。
另外,哪位大侠有FTP方面的资料或示例代码,烦请不吝赐教,感谢!
...全文
288 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxper 2015-03-06
  • 打赏
  • 举报
回复
procedure Tmainform.download ;
var
  name:string;
  tt :TIdFTPListItems; //ftp列表
  t : TIdFTPListItem;  //ftp单条记录
  j,f:Integer;
  ls:TStringList ;
begin


    if idftp.Connected =False then btn1.Click;
        //idftp.ChangeDir('/Ext');
        ls := TStringList.Create;
      try
        idftp.ChangeDir('/Ext');
        idftp.ChangeDir(ip.Text);
        idftp.ChangeDir(ftp_date.Text);
        edt1.Text := IdFTP.RetrieveCurrentDir;
        idftp.List(ls);  //这句很关键啊
        f:=idftp.DirectoryListing.Count-1 ;
        {
        if Trim(ip.Text)='255.255.8.80' then
        begin
        ShowMessage(IntToStr(f));
        end;
              on e: Exception do
      Begin
        log4error(PChar(E.Message)+'_连接超时');
      End;
        }
      except
        on e: Exception do
        begin
        log4error(PChar(E.Message)+'_改变目录错误');
        mmo1.Lines.Add(PChar(E.Message));
        mmo1.Lines.Add(ip.Text+'_'+ftp_date.Text+'无数据');

        Exit;//没有会出现list index out of bounds 错误
        f:=0;
        end;

      end;

      //IdFTP.TransferType := ftBinary;
      tt:=IdFTP.directorylisting;
      forcedirectories ('.\'+ip.text+'\'+ftp_date.Text);
      for j :=0  to f   do
      begin
        t:=tt.items[j];
        if (IdFTP.DirectoryListing.Items[j].ItemType = ditfile) and (f>0) then //如果是文件
        begin
          if Length(t.FileName)<11   then name :='data.txt'
          else name:=t.FileName;
          try
           IdFTP.Get(t.FileName ,ip.text+'\'+ftp_date.Text+'\'+name,True,False);
          except

              on e: Exception do
              Begin
                mmo1.Lines.Add(PChar(E.Message)+name);
                log4error(PChar(E.Message)+'_下载失败');
                mmo1.Lines.Add(name+'_'+'下载失败');
              End;



        end;


      end;
    //mmo1.Lines.Add(ip.text+'_'+ftp_date.Text+'下载完毕');


      end;
       //下载完毕当前目录后退出到根目录
      mmo2.Lines.Add(ip.text+'_'+ftp_date.Text+'='+inttostr(f)+'下载完毕');
      idftp.ChangeDir('../');
      idftp.ChangeDir('../');
      idftp.ChangeDir('../');
end;
lyhoo163 2015-03-02
  • 打赏
  • 举报
回复
这是服务器的问题,共享版连接线程有限制。
oushengfen 2015-03-02
  • 打赏
  • 举报
回复
没有遇到个此问题,你换一个FTP服务器

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧