0

在 Java 中的 FTP 客户端上引发异常时要遵循的正确程序是什么,即 FTP 会话是保持活动状态还是在引发异常时自动“退出”?

所以我有这个:

public boolean testHost(Host host, String path) {
    boolean success = false;
    try {
        FTPClient ftp = new FTPClient();
        ftp.setRemoteHost(host.getIpaddress());
        ftp.connect();
        ftp.login(host.getUsername(), host.getPassword());
        success = ftp.connected();

        if (success && path != null){
            ftp.chdir(path);
        }           
        ftp.quit();
    } catch (UnknownHostException e) {
        LOG.info("Host IPAddress cannot be reached on " + host.getIpaddress());
        success = false;
    } catch (IOException e) {
        e.printStackTrace();
        success = false;
    } catch (FTPException e) {
        success = false;
    }
    return success;  
}

当调用任何异常时,quit 命令不会被命中 - 这是一个问题吗?如果此方法不断受到攻击,是否可能有 100 个活动连接打开到 FTP 客户端?还是我什么都不担心?

4

1 回答 1

0

移动您的 ftp.quit() 语句,使其位于 return 语句的正上方

像这样:

public boolean testHost(Host host, String path) {
    boolean success = false;
    try {
        FTPClient ftp = new FTPClient();
        ftp.setRemoteHost(host.getIpaddress());
        ftp.connect();
        ftp.login(host.getUsername(), host.getPassword());
        success = ftp.connected();

        if (success && path != null){
            ftp.chdir(path);
        }           
    } catch (UnknownHostException e) {
        LOG.info("Host IPAddress cannot be reached on " + host.getIpaddress());
        success = false;
    } catch (IOException e) {
        e.printStackTrace();
        success = false;
    } catch (FTPException e) {
        success = false;
    }
    ftp.quit();
    return success;  
}

由于您的任何捕获都不会终止该方法,因此将继续执行 ftp.quit() 语句并最终返回成功结果。

或者,您可以在 try 结束时使用 finally 子句并将 ftp.quit() 语句放入其中。

AFAIK 的选择是优惠的。

于 2014-03-10T20:07:10.983 回答