FTP被動模式連接及超時問題解決


問題:
1、FTPClient.listFiles()或者FTPClient.retrieveFile()方法時,就停止在那里,什么反應都沒有,出現假死狀態。
2、連接FTP服務器,長時間進行數據操作時,超時自動斷開。
分析:
1、因為ftp server可能每次開啟不同的端口來傳輸數據,但是在linux上,由於安全限制,可能某些端口沒有開啟,所以就出現阻塞。
2、ftp的端口號20、21一個是數據端口,一個是控制端口,控制端口一般為21,而數據端口不一定是20,這和FTP的應用模式有關,如果是主動模式,應該為20,如果為被動模式,由服務器端和客戶端協商而定。21控制端口激活后,數據端口如果長時間進行數據操作,到達服務器設定的超時時間,自動斷開連接。
解決方法:
1、在調用這兩個方法之前,調用Client.enterLocalPassiveMode();這個方法的意思就是每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據。Client.enterLocalPassiveMode();這個方法可以在登陸之前,也可以在登陸之后。
2、如果是長時間下載或操作多個文件,導致超時斷開連接。可以在下載操作完成之后,給服務器返回一個命令,激活21端口,重置超時時間。

client.sendCommand("pwd");

問題解決!

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM