ubuntu SocketException:FTP上传时连接重置

wn9m85ua  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(53)

我正在尝试将文件上传到FTP服务器。
下面是我的代码:

FTPClient ftpClient = new FTPClient();
try {
    List<PoiCmsRule> appPois = getAllRules();
    try (FileWriter writer = new FileWriter(backupFile)) {
        new Gson().toJson(backupData, writer);
    }
    try (FileInputStream fis = new FileInputStream(backupFile)) {
        ftpClient.connect(host);
        ftpClient.login(login, password);
        ftpClient.storeFile("backup.json", fis);
        ftpClient.logout();
    }
} catch (Exception e) {
    log.error(e.getMessage(), e);
} finally {
    try {
        ftpClient.disconnect();
    } catch (IOException e) {
        log.error(e.getMessage(), e);
    }
}

字符串
当我在localhost上运行它时,它工作得很好。但是当我在服务器上运行时,我得到了这个异常:

Caused by: java.net.SocketException: Connection reset
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186)
    at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)


我想这表明我可能有一些问题与防火墙或代理。
这是一个运行在Ubuntu服务器上的Sping Boot 应用程序,Nginx作为代理。
如何找到导致此异常的原因?
在被动模式下使用命令行ftp成功连接:

ubuntu@ip-server:~$ ftp -p -d my_host
Connected to my_host
220 FTP-Server
ftp: setsockopt: Bad file descriptor
Name (my_host): username
---> USER username
331 Please specify the password.
Password:
---> PASS XXXX
230 Login successful.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (153,92,207,128,127,65)
---> LIST
150 Here comes the directory listing.
// file list
226 Directory send OK.
ftp>

332nm8kg

332nm8kg1#

Apache Commons Net FTPClient默认为FTP active 模式。由于无处不在的防火墙和NAT,Active模式现在几乎不起作用(有关详细信息,请参阅我关于FTP active/passive connection modes的文章)。
要将FTPClient切换到 passive 模式,请在 * FTPClient.connect之后的 * 某处调用FTPClient.enterLocalPassiveMode

ftpClient.connect(host);
ftpClient.login(login, password);
ftpClient.enterLocalPassiveMode();

字符串

相关问题