用 Delphi 做 FTP 服务器以及如何配置防火墙

使用 Delphi 的 TIdFTPServer 这个控件,做一个 FTP 服务器很简单。可以直接拿官方提供的 FTP Server 的那个 Demo 程序来修改。

本文主要描述如何配置服务器端防火墙

网络环境:

1. 客户端在路由器后面,局域网;

2. 服务器端在路由器后面的局域网上面。

FTP 配置原理

1. 主动模式:FTP 客户端连接上 FTP 服务器以后,客户端会打开一个 TCP 端口作为接收数据的TCP 服务器,然后 FTP 服务器主动发起 TCP 连接客户端。

1.1. 主动模式的问题:需要客户端所在网络,配置路由器开端口映射到客户端电脑。从实施来说,不方便。

2. 被动模式:FTP 客户端连接上 FTP 服务器后,FTP 服务器另外随机打开一个被动模式的 TCP 端口,将端口告诉客户端;然后,客户端用 TCP 连接这个端口,建立数据传输通道。

2.1. 被动模式:FTP 服务器端要设置防火墙,要设置路由器端口映射。

Indy TIdFTPServer 的用法

在上述描述中,如果使用 TIdFTPServer 这个控件来实现一个 FTP 服务器端程序,需要注意:

1. 路由器开端口映射到服务器端所在电脑 IP 地址的 21 端口;

1.1. 不幸的是,电信对于小端口,封掉。因此,需要映射路由器的 2121 端口,指向内网 FTP 服务器所在 IP 地址的 21 端口。

1.2. FTP 服务器所在电脑的防火墙,设置允许 21 端口的 TCP 连接。

2. IdFTPServer 的属性:PASVBoundPortMax 选择 5003,  PASVBoundPortMin 选择 5000;

2.1. 上述设置的意思是被动模式下,TIdFTPServer 随机打开 5000 到 5003 之间的端口。

3. 路由器上,把 TCP 端口 5000, 5001, 5002, 5003 映射到 FTP 服务器电脑所在的 IP 地址。

4. 客户端,我选用 FileZilla 这个开源的 FTP 服务器;设置如下:

4.1. 服务器地址输入服务器端的公网 IP 或者动态域名地址;

4.2. 端口输入 2121,如果不输入,则是默认的 21,电信不开放;

4.3. 传输设置 -- 传输模式:选择【被动】模式。

5. 防火墙设置:上述所有端口,在 FTP 服务器所在的电脑的防火墙上,设置为允许连接。

以上设置,测试通过。

调试说明:

TIdFTPServer 的 PASV 的那两个端口属性,我一开始设置的是 5000,6000,结果导致它打开的被动模式端口是在这个区间随机,总是不会刚好是路由器上映射的 5000,5001;我又不可能在路由器上设置 1000 个端口映射。所以干脆改为 5000,5003;也就是让 TIdFTPServer 在被动模式下只打开有限的几个端口,然后在路由器端口映射上,映射这几个端口。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi 中,可以使用 Indy 组件库创建一个基本的 Web 服务器。以下是一个简单的示例代码: ```delphi unit Unit1; interface uses IdHTTPWebBrokerBridge, Web.HTTPApp, System.SysUtils, Vcl.Forms; type TForm1 = class(TForm) private FServer: TIdHTTPWebBrokerBridge; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var Form1: TForm1; implementation {$R *.dfm} constructor TForm1.Create(AOwner: TComponent); begin inherited; FServer := TIdHTTPWebBrokerBridge.Create(Self); FServer.DefaultPort := 8080; // 设置端口号 FServer.Active := True; // 启动服务器 end; destructor TForm1.Destroy; begin FServer.Active := False; // 停止服务器 FServer.Free; inherited; end; end. ``` 要在 Delphi 中访问文件服务器,可以使用 Indy 组件库中的 `TIdFTP` 组件或 `TIdHTTP` 组件。这些组件可以让你连接到远程服务器并上传或下载文件。以下是一个简单的示例代码: ```delphi uses IdFTP, IdHTTP; procedure TForm1.Button1Click(Sender: TObject); var FTP: TIdFTP; HTTP: TIdHTTP; begin // 连接到 FTP 服务器 FTP := TIdFTP.Create(nil); try FTP.Host := 'ftp.example.com'; FTP.Username := 'username'; FTP.Password := 'password'; FTP.Connect; FTP.ChangeDir('/remote/directory'); FTP.Get('file.txt', 'C:\local\directory\file.txt'); finally FTP.Free; end; // 连接到 HTTP 服务器 HTTP := TIdHTTP.Create(nil); try HTTP.Get('http://example.com/file.txt', 'C:\local\directory\file.txt'); finally HTTP.Free; end; end; ``` 注意:以上示例代码仅供参考,实际使用时需要根据具体情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值