7

プログラムの開始時に FTP サーバーへの接続を開きます。

サーバーで操作を実行する前に、接続が正常に確立されたかどうかを確認したいと思います。最も簡単な高速な方法なので、接続が切れた場合は、もう一度接続を試みます。

私はこれを行うためにこのコードを使用しました:

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

ただし、このメソッドは、接続が閉じられたときに NullPointer 例外をスローします。

との接続を確認できますftpClient.connect(server, port);が、それはもう一度接続しようとしているようなものです。

接続を確認する最も良い方法は何ですか?

4

2 に答える 2

14

簡単な送信を試みて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;
        }   
    }
}
于 2012-12-12T10:55:34.897 に答える
3
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-12-12T10:03:02.780 に答える