java.net.SocketException: Software caused connection abort: recv failed
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:812)
at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:633)
FTP **被動模式**下,客戶端需向伺服器隨機高埠建立資料連線。客戶端(Windows 7)防火牆**公用網路設定檔**啟用且未放行 Java 程式/高埠範圍,導致資料連線被截斷。命令連線(21 埠)正常,故登入成功、列表目錄正常,唯獨上傳/下載失敗。
1024-65535(或 vsftpd pasv_min_port-pasv_max_port 範圍)→ 允許連線 → 套用至「公用」。pasv_min_port=50000pasv_max_port=51000ftpClient.enterLocalActiveMode();CentOS firewall-cmd --add-service=ftp --permanent 僅開放命令埠,**仍需** --add-port=50000-51000/tcp 開放被動埠範圍。
問題本質:**FTP 雙通道特性 + 防火牆預設阻擋入站高埠**,而非 Java 代碼或 Commons Net 庫缺陷。