ftp卡死问题


最近用org.apache.commons.net.ftp.FTPClient  写ftp的上传下载的定时任务

发现有时候线程会卡住,也不报错就一直不工作了,后来发现需要使用ftp的被动模式才行,实现如下

 

 

以前有问题的代码是这样写的

ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器

ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录

reply = ftp.getReplyCode();

 

 

下面是修改后的代码,login后需要调用ftp.enterLocalPassiveMode();

ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器

ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录

//设置ftp为被动模式,解决有时候ftp会卡住问题
ftp.enterLocalPassiveMode();
reply = ftp.getReplyCode();

 

 

2019-08-22更新

后来发现只加入被动模式设置也不行,还需要加入超时设置

 

 

 

 

int reply;
ftp.setDefaultTimeout(30 * 1000);
ftp.setConnectTimeout(30 * 1000);
ftp.setDataTimeout(30 * 1000);
logger.info("start to connect ftp server");
ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器
logger.info("start to login ftp server");
ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录
//设置ftp为被动模式,解决有时候ftp会卡住问题
ftp.enterLocalPassiveMode();

reply = ftp.getReplyCode();
logger.info("replyCode======"+reply);
if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();
return uploadStatus;
}
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean mkdirStatus=makeMultiDir(ftpBasePath,ftp);
if(!mkdirStatus)
{
logger.info("make multi dir error!");
return uploadStatus;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM