【问题标题】:Properly check FTP server connection正确检查 FTP 服务器连接
【发布时间】:2012-11-29 23:50:52
【问题描述】:

我在程序开始时打开一个到 FTP 服务器的连接。

在我对服务器执行操作之前,我想检查连接是否成功建立。最简单快速的方式,所以如果连接消失,我会尝试重新连接。

我用这段代码来做到这一点:

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

但是这个方法在连接关闭时会抛出 NullPointer 异常。

我可以检查与ftpClient.connect(server, port); 的连接,但这就像试图重新连接。

检查连接的最佳方法是什么?

【问题讨论】:

  • 您是否尝试更改您的代码?
  • @Mohammod Hossain 你的代码很好,但我想知道是否有更好的方法来测试连接而不实际尝试连接
  • 我认为您正在使用 org.apache.commons.net.ftp 库,因此 API 具有连接到 ftp 服务器的这种实现。
  • 你得到你想要的答案了吗?
  • @Mohammod Hossain 谢谢,我尝试了不同的方法

标签: java ftp ftp-client


【解决方案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;
        }   
    }
}

【讨论】:

【解决方案2】:
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();
            }
}

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2012-05-16
    • 2020-06-20
    • 2014-07-25
    • 1970-01-01
    • 2015-04-29
    • 2012-09-18
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多