前言
由于工作需要使用到ftp服务,一开始是每次建立ftp连接,上传文件成功后,再释放连接,后来发现这个方法太浪费资源和时间了,就想到了使用ftp连接池的方式实现,这样,预先创建好ftp连接池,需要上传的时候从池子取一个连接,上传成功后再放回池子即可,省下了创建和释放ftp连接的时间。
实现
ftp服务的配置文件
在config.properties配置好ftp服务
ftp.ip=127.0.0.1
ftp.username=root
ftp.password=root
ftp.port=21
FtpClientConfig
FtpClientConfig是用于读取config.properties的一个实体类
public class FtpClientConfig {
private String host;
private int port;
private String username;
private String password;
...
FtpClientFactory
FtpClientFactory可以理解为一个工厂类,用于生成ftp连接、销毁ftp连接以及检测ftp连接是否有效。
生成ftp连接
在生成ftp连接的时候,我们可以设定连接的超时时间等,ftp有主动模式和被动模式两种模式。
主动模式:FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输
被动模式:FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
public FTPClient makeClient() throws Exception{
FTPClient ftpClient = new FTPClient();
ftpClient.setConnectTim