因为项目需要上传下载大量的文件,因此打算架设一个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前加上这句。
然后再次运行,这次可以正常获取到信息了。
奥利给,哦耶!
本文介绍了一个使用IdFtp组件连接FTP服务器的过程,包括主动模式与被动模式的区别,并通过调整设置解决了连接异常的问题。
4361

被折叠的 条评论
为什么被折叠?



