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