Ftpclient загрузка файла = SocketException: сброс соединения
Я пытаюсь загрузить простой txt-файл через 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.чистая.Исключения 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 ответов
решено, запустив это как администратор в командной строке:
netsh advfirewall set global StatefulFTP disable
Это ошибка Java 7 на машинах Windows, сообщается здесь.
Я честно не уверен, но вы должны попробовать следующее:
использовать что-то вроде следующего кода:
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();
.
удачи! :)
Set:
client.setUseEPSVwithIPv4( true );
это работает, если вы не можете внести изменения в настройки брандмауэра окна.