之前使用ftp上傳文件,代碼很穩定,用了快三年,因為數據遷移,從搭建了ftp服務器,配置好ip和賬號密碼后,再使用之前代碼發現:
在下載過程中,程序出現假死的現象,就是,既不報錯,也不拋異常,還不終止,就是一直卡着不動,沒法定位問題,自己研究了好長時間,也不知道怎么回事,后來上網又查了查,有人提出了一個方法,真心好用,在這里分享下:
解決方案:
在調用FTPClient.listFiles()或者FTPClient.retrieveFile()方法前,調用FTPClient.enterLocalPassiveMode()!
用人家的原話說,就是“這個方法的意思就是每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據。”說實話這是什么意思,我這個水平還不是很懂,望大家指教,現把FTP相關代碼貼出來,與大家共享。
//創建FTP連接
ftp.setDefaultPort(//FTP端口號);
ftp.connect(//FTP服務IP地址);
ftp.login(//FTP用戶名, //密碼);
ftp.setBufferSize(1024);
//設置文件類型(二進制)
ftp.setFileType(ftp.BINARY_FILE_TYPE);
//每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據
// 加入這行代碼后,在執行上傳或下載文件就沒問題了,看來我這個代碼還有個隱含bug,尷尬................................
ftp.enterLocalPassiveMode();