idFtp操作时报错:Accept timed out

Delphi应用心得 专栏收录该内容
21 篇文章 0 订阅

因为项目需要上传下载大量的文件,因此打算架设一个ftp服务器,然后客户端使用idFtp来操作。

procedure TForm1.connect;
begin
    IdFtp.Host := '127.0.0.1';
    IdFtp.port := 21;
    IdFTP.Username := 'ftpuser';
    IdFTP.Password := '123';
    IdFtp.Connect;
end;

procedure TForm1.getList(dir: string; fileList: TStrings);
begin
  IdFtp.ChangeDir(dir);
  IdFtp.list(fileList);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //test IdFtp
  try
    connect;
  except
    on e: exception do
    begin
      showmessage('无法连接ftp服务器,错误信息如下'#13+e.message);
      exit;
    end;
  end;
    
  showmessage('成功连接到FTP服务器。');
  //do something

  IdFtp.disconnect;
end;

OK, 我们先来测试下能否正常连接ftp服务端。

运行代码,一切ok,看到了连接成功的消息提示框。

接下来修改代码,让我们多做点事情。

首先,要查询下当前目录下的内容,可以使用IdFtp.list来完成操作。

修改代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  fileList: TStrings;
begin
  //test IdFtp
  fileList := TStringList.Create;
  try
    try
      connect;
    except
      on e: exception do
      showmessage('无法连接ftp服务器,错误信息如下'#13+e.message);
      exit;
    end;
    
    //showmessage('成功连接到FTP服务器。');
    IdFTP.list(fileList);
    showmessage(fileList.Text);
    IdFtp.disconnect;
  finally
    fileList.Free;
  end;
end;

再次运行,系统在调试状态下弹出Accept timed out的异常。这表示我们的访问不被允许。

这是怎么回事?后来查阅资料分析知道,FTP服务分为主动模式与被动模式,需要根据ftp服务端设置的模式来区分客户端连接方式。我的ftp服务端配置为被动模式,因此可以通过设置IdFTP.Passive := true;也即修改connect方法,在connect前加上这句。

然后再次运行,这次可以正常获取到信息了。

奥利给,哦耶!

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值