Hello,

I'm trying to use FtpServer in my code and I have what I think to be a thread issue, but not sure. That's why I ask for help, please, because I've not been able to find my error !

When I run a "classic" client and server, everything work fine. The user properties file is found, with only one user called "paul", and server is correctly started with this message :

Nb users :1
Users name :paul
298 [main] INFO org.apache.ftpserver.impl.DefaultFtpServer - FTP server started

I suppose [main] means that server is running in main thread.
You can have a look at "classic" server code below.

When a connection is initiated from the client (see "classic" client code below), here are messages
coming from server (as you can see everything is working fine) :

302734 [NioProcessor-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CREATED 302740 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - OPENED
onConnect
302753 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 220 Service ready for new user. 302756 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: USER paul 302759 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 331 User name okay, need password for paul. 302760 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: PASS *****
onLogin
302837 [pool-3-thread-1] INFO org.apache.ftpserver.command.impl.PASS - Login success - paul 302837 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: SYST 302838 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 230 User logged in, proceed. 302838 [pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 215 UNIX Type: Apache FtpServer 302880 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: PORT 127,0,0,1,197,145 302884 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 200 Command PORT okay. 302885 [pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: LIST 302939 [pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 150 File status okay; about to open data connection. 302950 [pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 226 Closing data connection. 302987 [pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CLOSED

Now if I use the same kind of code (of course you have to trust me) within a GUI interface (SWT-JFace), here what I get when server is started :

Nb users :1
Users name :paul
1741735 [Thread-0] INFO org.apache.ftpserver.impl.DefaultFtpServer - FTP server started

What I can notice is that it seems we are not in main thread ???

And when a client tries to connect, here are messages coming from server :

1831252 [NioProcessor-3] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CREATED 1831257 [pool-6-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - OPENED 1831261 [pool-6-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CLOSED

and messages coming from client :

org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:298)
    at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:365)
at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:630)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:164)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:184)
    at snippet.FTPClientTest.<init>(FTPClientTest.java:14)
    at snippet.FTPClientTest.main(FTPClientTest.java:30)


Any help would be nice,
thanks a lot,
frank

------------------------------------------------------------------------------------

*_Classic SERVER code :_*
public class FTPServerTest extends DefaultFtplet {
    public FTPServerTest() {
        try {
            FtpServerFactory serverFactory = new FtpServerFactory();
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
            userManagerFactory.setFile(new File("./users.properties"));
            userManagerFactory
                    .setPasswordEncryptor(new SaltedPasswordEncryptor());
UserManager userManager = userManagerFactory.createUserManager();
            String[] users = userManager.getAllUserNames();
            System.out.println("Nb users :" + users.length);
            if (users.length > 0)
                System.out.println("Users name :" + users[0]);
            serverFactory.setUserManager(userManager);
            ListenerFactory factory = new ListenerFactory();
            factory.setPort(2221);
            serverFactory.addListener("default", factory.createListener());
HashMap<String, Ftplet> ftplets = new HashMap<String, Ftplet>(0);
            ftplets.put("DEFAULT", this);
            serverFactory.setFtplets(ftplets);
            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 FtpletResult.DEFAULT;
    }

    @Override
    public FtpletResult onLogin(FtpSession session, FtpRequest request)
            throws FtpException, IOException {
        System.out.println("onLogin");
        return FtpletResult.DEFAULT;
    }
}

*_Classic CLIENT code :_*
    public FTPClientTest() {
        try {
            FTPClient ftpClient = new FTPClient();
            ftpClient.connect("127.0.0.1", 2221);
            ftpClient.login("paul", "paul");
            FTPFile[] files = ftpClient.listFiles();
            for (int i = 0; i < files.length; i++) {
                FTPFile ftpFile = files[i];
                System.out.println(ftpFile.getName());
            }
            ftpClient.disconnect();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

Reply via email to