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