FTPClient Uploading File = SocketException: Connection reset

17,075

Solved by running this as administrator in the command prompt:

netsh advfirewall set global StatefulFTP disable

This is a Java 7 bug on Windows machines, it is reported here.

Share:
17,075
Oneiros
Author by

Oneiros

I'm an Italian Programmer and Software Engineer. I love C#, Java, C++, Gaming and Virtual Reality Development

Updated on July 18, 2022

Comments

  • Oneiros
    Oneiros almost 2 years

    I'm trying to upload a simple txt file via FTP using XAMPP and FileZilla.
    I'm using the Apache Commons Net 3.0.1 Library.
    This is my code, very basic things:

    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) {
        }
    }
    


    But... storeFile() throws a 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)
    


    What's the problem?? :( I tried also on an online hosting service, with the same result...
    I wonder if this is a firewall or windows' services related problem??

  • Oneiros
    Oneiros over 12 years
    Thank you for the answer :) i get "230 230 Logged on" by printing the replies and the same SocketException by invoking client.completePendingCommand()
  • Marsellus Wallace
    Marsellus Wallace over 12 years
    230 is good. I double checked and the completePendingCommand() is necessary only if you use the storeFileStream method (that you might want to try as an alternative). What line of code is throwing the exception? Is there any file created in the server (maybe empty)?
  • Greg Case
    Greg Case about 12 years
    I wish I had come across this answer 4 hours ago, I would have saved myself some frustration. This is exactly the same problem I was having, and this fix worked like a charm. Thank you!