Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Properly check FTP server connection

I open a connection to an FTP server at the start of my program.

Before I perform operations on the server I want to check if the connection was successfully established. The easiest fast manner so if the connection is gone, I will try to connect again.

I used this code to do this:

private boolean checkConnection()
{
    try 
    {
        boolean success = ftpClient.login(user_name, password);
        if(success)
            return true;
        else 
            return false;
    }
}

But this method throws a NullPointer exception when the connection was closed.

I can check the connection with the ftpClient.connect(server, port); but that is like attampting to connect all over again.

What is the bes way to check the connection?

like image 443
Michael A Avatar asked Dec 12 '12 09:12

Michael A


2 Answers

Trying to send a simple sendNoOp() and checking the reply might be a good way to lightly check the connecion:

private boolean checkConnectionWithOneRetry()
{
    try 
    {
        // Sends a NOOP command to the FTP server. 
        boolean answer = ftpClient.sendNoOp();
        if(answer)
            return true;
        else
        {
            System.out.println("Server connection failed!");
            boolean success = reconnect();
            if(success)
            {
                System.out.println("Reconnect attampt have succeeded!");
                return true;
            }
            else
            {
                System.out.println("Reconnect attampt failed!");
                return false;
            }
        }
    }
    catch (FTPConnectionClosedException e) 
    {
        System.out.println("Server connection is closed!");
        boolean recon = reconnect();
        if(recon)
        {
            System.out.println("Reconnect attampt have succeeded!");
            return true;
        }
        else
        {
            System.out.println("Reconnect attampt have failed!");
            return false;
        }

    }
    catch (IOException e) 
    {
        System.out.println("Server connection failed!");
        boolean recon = reconnect();
        if(recon)
        {
            System.out.println("Reconnect attampt have succeeded!");
            return true;
        }
        else
        {
            System.out.println("Reconnect attampt have failed!");
            return false;
        }   
    }
    catch (NullPointerException e) 
    {
        System.out.println("Server connection is closed!");
        boolean recon = reconnect();
        if(recon)
        {
            System.out.println("Reconnect attampt have succeeded!");
            return true;
        }
        else
        {
            System.out.println("Reconnect attampt have failed!");
            return false;
        }   
    }
}
like image 81
Michael A Avatar answered Nov 11 '22 02:11

Michael A


private FTPClient ftp = null;

private void connect()
{
            ftp = new FTPClient();

            try {

                ftp.connect("Server",port);
                boolean login = ftp.login("username", "password");
                System.out.println(" login "+ login );

            } catch (FTPConnectionClosedException e) {          
                System.err.println("ERROR :: FTP Server Unreachable");
                sleep();
                connect();          
            } catch (SocketException e) {
                System.err.println("ERROR :: FTP Server Unreachable");
                sleep();
                connect();  
            } catch (IOException e) {
                System.err.println("ERROR :: FTP Server Unreachable");
                sleep();
                connect();  
            }
}

public void sleep(){
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
}
like image 43
Mohammod Hossain Avatar answered Nov 11 '22 04:11

Mohammod Hossain