Проверете правилно връзката на FTP сървъра

Отварям връзка към FTP сървър в началото на моята програма.

Преди да извърша операции на сървъра, искам да проверя дали връзката е установена успешно. Най-лесният бърз начин, така че ако връзката изчезне, ще опитам да се свържа отново.

Използвах този код, за да направя това:

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

Но този метод хвърля изключение NullPointer, когато връзката е затворена.

Мога да проверя връзката с ftpClient.connect(server, port);, но това е като да се опитвам да се свържа отново.

Какъв е най-добрият начин за проверка на връзката?


person Michael A    schedule 12.12.2012    source източник
comment
опита ли да промениш кода си?   -  person Mohammod Hossain    schedule 12.12.2012
comment
@Mohammod Hossain кодът ви е добър, но се чудех дали има по-добър начин да тествате връзката, без всъщност да се опитвате да се свържете   -  person Michael A    schedule 12.12.2012
comment
Мисля, че използвате библиотека org.apache.commons.net.ftp, така че API има такава реализация за връзка с ftp сървър.   -  person Mohammod Hossain    schedule 12.12.2012
comment
получи ли отговора, който искаше?   -  person Mohammod Hossain    schedule 12.12.2012
comment
@Mohammod Hossain Благодаря, опитах различен подход   -  person Michael A    schedule 12.12.2012


Отговори (1)


Опитът да изпратите просто sendNoOp() и проверката на отговора може да е добър начин за лека проверка на връзката:

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;
        }   
    }
}
person Michael A    schedule 12.12.2012
comment
Изглежда, че използвате org.apache.commons.net.ftp В този случай можете да използвате методите isAvailable() или isConnected(), те работят много по-бързо от ftpClient.sendNoOp() Недостатъкът е, че и двата метода все още не гарантират, че връзката работи. commons.apache. org/proper/commons-net/apidocs/org/apache/ - person David Abragimov; 31.07.2019