idFtp操作时报错:Accept timed out

本文介绍了一个使用IdFtp组件连接FTP服务器的过程,包括主动模式与被动模式的区别,并通过调整设置解决了连接异常的问题。

因为项目需要上传下载大量的文件,因此打算架设一个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前加上这句。

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

奥利给,哦耶!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的老五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值