Search code examples
javaftpftp-client

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?


Solution

  • 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;
            }   
        }
    }