Hi All,

I'm facing some problem while coding a server server using Apache FTP
server.

I'm using the code bellow to create a FTP server (MyFTPServer), when a run
this piece of code I'm not able to connect through a FTP client such as
Filezilla, WinSCP and My own FTP client into my ftp server.

There is also bellow My FTP Client which represent my FTP Client code for
connect.

Does any body knows what I am doing wrong?

Thanks in advance

 ====================  MyFTPServer=================
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.DataConnection;
import org.apache.ftpserver.ftplet.DefaultFtpReply;
import org.apache.ftpserver.ftplet.DefaultFtplet;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.ftplet.FtpSession;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletResult;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.impl.LocalizedFtpReply;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;

public class FTPServerTest extends DefaultFtplet {
public FTPServerTest() {
 try {
FtpServerFactory serverFactory = new FtpServerFactory();
 PropertiesUserManagerFactory userManagerFactory = new
PropertiesUserManagerFactory();
 ListenerFactory factory = new ListenerFactory();
factory.setPort(2221);
 userManagerFactory.setFile(new File("myusers.properties"));
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
 UserManager um = userManagerFactory.createUserManager();
BaseUser user = new BaseUser();
 // define SSL configuration
SslConfigurationFactory ssl = new SslConfigurationFactory();
 ssl.setKeystoreFile(new File("ftpserver.jks"));
ssl.setKeystorePassword("password");
 // set the SSL configuration for the listener
factory.setSslConfiguration(ssl.createSslConfiguration());
 factory.setImplicitSsl(false);
 List<Authority> authorities = new ArrayList<Authority>();
 authorities.add(new WritePermission());
user.setAuthorities(authorities);
 user.setName("myNewUser");
user.setPassword("secret");
 um.save(user);
serverFactory.setUserManager(um);
 serverFactory.addListener("default", factory.createListener());
HashMap<String, Ftplet> ftplets = new HashMap<String, Ftplet>(0);
 ftplets.put("DEFAULT", this);
serverFactory.setFtplets(ftplets);
 // start the server
FtpServer server = serverFactory.createServer();
server.start();

} catch (FtpException e) {
e.printStackTrace();
}
 }

public static void main(String[] args) {
new FTPServerTest();
 }

@Override
public FtpletResult onConnect(FtpSession session) throws FtpException,
 IOException {
System.out.println("onConnect");
return super.onConnect(session);
 }

@Override
public FtpletResult onLogin(FtpSession session, FtpRequest request)
 throws FtpException, IOException {
System.out.println("onLogin");
 return super.onLogin(session, request);
}
 @Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
throws FtpException, IOException {
 String requestedFile = request.getArgument();

        OutputStream in =  new FileOutputStream(requestedFile);


        // open data connection
        DataConnection out = null;
        session.write(new DefaultFtpReply(150, "Getting data connection."));
        try {
            out = session.getDataConnection().openConnection();
        } catch (Exception ex) {
        System.out.println("Exception");
        }
        if (out == null) {
        System.out.println("onUpload - out null");
            return FtpletResult.SKIP;
        }

        // transfer data
        try {


            out.transferFromClient(session,in);
        } finally {
        session.write(new DefaultFtpReply(226, "Transfer Complete."));
            session.getDataConnection().closeDataConnection();
            in.close();
        }
        System.out.println("onUpload -  end");
        return FtpletResult.SKIP;
    }
 @Override
public FtpletResult onUploadEnd(FtpSession session, FtpRequest request){
 System.out.println("fim do up");
return FtpletResult.DEFAULT;
 }
}

========================My FTP
Client================================================

import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;


public class FTPClientTest {

    public static void main(String[] args) {
       try {
            FTPClient ftpClient = new FTPClient();
            //connect and login

            ftpClient.connect("127.0.0.1", 2221);
            ftpClient.login("myNewUser", "secret");

            //file
            FileInputStream fis = null;
            String filename = "README.txt";
            fis = new
FileInputStream("C:\\Users\\fam2\\Desktop\\README.txt");
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

            //
            // Store file to server
            //
            ftpClient.storeFile(filename, fis);
            // System.out.println("Okay");
            fis.close();
            ftpClient.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

Reply via email to