Question

I've been looking all over for the answer but the closest thing I've found is just blame the server.

This is my code, for my application I'm using the Zehon library:

import com.zehon.BatchTransferProgressDefault;
import com.zehon.FileTransferStatus;
import com.zehon.exception.FileTransferException;
import com.zehon.ftps.FTPsClient;

public class UploadFolderSample {
/**
 * Please refer to http://www.zehon.com/FTPs_samples.htm for its full source code
 * @param args
 */
public static void main(String[] args) {
    String host = "****";
    int port = 990;
    String username = "******";
    String password = "*******";
    String sendingFolder = "*******/";
    String destFolder = "ftpes:******/";

    try {
        com.zehon.ftps.FTPsClient ftps = new FTPsClient(host, port, username, password, false);
        ftps.folderExists(destFolder);
        int status  = ftps.sendFolder(sendingFolder, destFolder, new BatchTransferProgressDefault());

        if(FileTransferStatus.SUCCESS == status){
            System.out.println(sendingFolder + " got ftps-ed successfully to  folder "+destFolder);
        }
        else if(FileTransferStatus.FAILURE == status){
            System.out.println("Fail to ftps  to  folder "+destFolder);
        }
    } catch (FileTransferException e) {
        e.printStackTrace();
    }       
}

}

And this is my error:

Thank you for using Zehon software (www.zehon.com).  
Please go to http://www.zehon.com/feedback.php to provide us your feedback about the product.
Please go to http://www.zehon.com/feature_request.php to submit bugs or feature requests.
com.zehon.exception.FileTransferException: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
    at com.zehon.ftps.FTPsClient.folderExists(FTPsClient.java:1239)
    at test.UploadFolderSample.main(UploadFolderSample.java:34)
Caused by: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:313)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:396)
    at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:796)
    at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:203)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:172)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:192)
    at com.zehon.ftps.FTPsClient.getFTPSClient(FTPsClient.java:1444)
    at com.zehon.ftps.FTPsClient.folderExists(FTPsClient.java:1236)
    ... 1 more

I could really use some help, I've been stuck on the FTPS thing for over a week now.

edit(added dialog): This is what happens when I use the wrong port, but at least it shows the dialog this way.

> Thank you for using Zehon software (www.zehon.com).   Please go to
> http://www.zehon.com/feedback.php to provide us your feedback about
> the product. Please go to http://www.zehon.com/feature_request.php to
> submit bugs or feature requests. 220-FileZilla Server version 0.9.33
> beta 220 Welcome by ***** AUTH TLS 234 Using authentication type TLS
> USER ***** 331 Password required for ***** PASS ******* 230 Logged on
> SYST 215 UNIX emulated by FileZilla PASV 227 Entering Passive Mode
> (******) LIST ftpes:*****/ 550 PROT P required 220-FileZilla Server
> version 0.9.33 beta 220 Welcome by **** AUTH TLS 234 Using
> authentication type TLS USER **** 331 Password required for **** PASS
> **** 230 Logged on Transfer start for file ****\test.txt MODE S 200 MODE set to S. TYPE I 200 Type set to I PASV 227 Entering Passive Mode
> (*****) STOR ftpes:*****/test.txt 550 PROT P required Transfer error
> *****/test.txt Transfer complete for file *****/test.txt Transfer start for file *****/test.txt MODE S
Was it helpful?

Solution

There exist Explicit and Implicit FTPS (FTP-over-SSL). In first case connection is established (usually) to port 21, then a command is sent to negotiate SSL over established channel. Implicit SSL means connection over port (usually) 990, then SSL is negotiated and then regular commands (LOGIN etc. ) are sent over SSL-secured channel.

If you mix two modes (connect to port 990 in non-secured mode or try to connect to port 21 and start SSL handshake immediately), nothing will work.

So first thing to do is find out what mode you need to use. Then you set correct port and check that your library supports needed mode.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top