Java連接FTP成功,但是上傳是失敗,報錯:Connected time out


Java代碼在本機上傳文件到FTP服務器的時候成功,但是部署到測試服務器的時候出現,連接FTP成功但是上傳失敗,並且報Connected time out錯誤;

測試服務器和FTP服務都在阿里雲上;(使用內網外網連接都有錯)

原因:

  網上找資料原因可能是防火牆策略阻止了java測試服務的端口連接,FTP服務器使用的有可能是被動模式;

  注意:

1.FTP的PORT(主動模式)和PASV(被動模式)

    (1) PORT(主動模式)

    PORT中文稱為主動模式,工作的原理: FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端采用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號后,通過服務器的20端口和客戶端開放的端口連接,發送數據。

    (2) PASV(被動模式)

    PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),然后把開放的端口告訴客戶端, 客戶端再連接到服務器開放的端口進行數據傳輸。

 關於主動和被動模式可參考:https://www.cnblogs.com/ajianbeyourself/p/7655464.html

和https://www.cnblogs.com/yeyublog/p/6056424.html

也就是說,服務器開放的數據端口,防火牆限制了,連不上,所以得在ftp服務器的配置里規定一個范圍的端口號作為數據端口,然后再在防火牆設置這些端口可訪問;

設置方法:在ftp的配置文件中增加

pasv_min_port=40001
pasv_max_port=41000
在防火牆配置中增加:
-A INPUT -p tcp --dport 40001:41000 -j ACCEPT
-A OUTPUT -p tcp --dport 40001:41000 -j ACCEPT

配置信息可參考:ttps://www.cnblogs.com/ahaii/p/5390616.html


免責聲明!

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



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