FTPClient Uploading File = SocketException: сброс подключения - PullRequest
9 голосов
/ 01 декабря 2011

Я пытаюсь загрузить простой текстовый файл через FTP, используя XAMPP и FileZilla.
Я использую библиотеку Apache Commons Net 3.0.1 .
Это мой код, очень простые вещи:

FTPClient client = new FTPClient();
InputStream in = new ByteArrayInputStream("IT WORKS! :D".getBytes());

try {
    client.connect("localhost");
    client.login("user", "password");
    client.enterLocalPassiveMode();
    client.storeFile("textfile.txt", in);
} finally {
    try {
        in.close();
        client.logout();
        client.disconnect();
    } catch (Exception e) {
    }
}


Но ... storeFile () создает исключение java.net.SocketException:

Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:189)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read(BufferedReader.java:175)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:474)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:596)
    at org.apache.commons.net.ftp.FTP.pasv(FTP.java:945)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:719)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704)
    at ftpexample.ftpexample.main(ftpprova.java:17)


В чем проблема?? :( Я попробовал также на онлайн-хостинге, с тем же результатом ...
Интересно, это проблема с брандмауэром или службами Windows ??

Ответы [ 3 ]

17 голосов
/ 01 декабря 2011

Решено, запустив это как администратор в командной строке :

netsh advfirewall set global StatefulFTP disable

Это ошибка Java 7 на компьютерах с Windows, сообщается здесь .

0 голосов
/ 28 ноября 2013

комплект:

client.setUseEPSVwithIPv4( true );

Это работает, если вы не можете вносить изменения в настройки брандмауэра Windows.

0 голосов
/ 01 декабря 2011

Я, честно говоря, не уверен, но вы должны попробовать следующее:

Используйте что-то вроде следующего кода:

System.out.println(client.getReplyCode());
for(String s : client.getReplyStrings())
    System.out.println(s);

после client.login("user", "password");, чтобы проверить состояние вашего соединения.

Если вы не получили хороших подсказок из приведенного выше кода, после вызова client.storeFile("textfile.txt", in); попробуйте добавить client.completePendingCommand();.

Удачи!:)

...