問題:
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");
問題解決!
版權聲明:本文為博主原創文章,未經博主允許不得轉載。