Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java FTP org.apache.commons.net.MalformedServerReplyException:截断的服务器应答:';220';_Java_Ftp_Apache Commons Net - Fatal编程技术网

java FTP org.apache.commons.net.MalformedServerReplyException:截断的服务器应答:';220';

java FTP org.apache.commons.net.MalformedServerReplyException:截断的服务器应答:';220';,java,ftp,apache-commons-net,Java,Ftp,Apache Commons Net,我使用JavaApacheCommonsNetLibrary从FTP服务器下载文件。作为一个起点,我试图重用来自的代码。通常,代码执行时没有问题/异常,但是对于一个特定的FTP服务器(),我得到以下错误: org.apache.commons.net.MalformedServerReplyException:截断的服务器回复:“220” 我的代码如下: String server = "ftp.nasdaqtrader.com"; int port = 21; String user = "a

我使用JavaApacheCommonsNetLibrary从FTP服务器下载文件。作为一个起点,我试图重用来自的代码。通常,代码执行时没有问题/异常,但是对于一个特定的FTP服务器(),我得到以下错误:

org.apache.commons.net.MalformedServerReplyException:截断的服务器回复:“220”

我的代码如下:

String server = "ftp.nasdaqtrader.com";
int port = 21;
String user = "anonymous";
String pass = "pw";

FTPClient ftpClient = new FTPClient();
try {

    ftpClient.connect(server, port);
    ftpClient.login(user, pass);
    ftpClient.enterLocalPassiveMode();
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    // APPROACH #1: using retrieveFile(String, OutputStream)
    String remoteFile1 = "/symboldirectory/nasdaqlisted.txt";
    File downloadFile1 = new File("C:\\filedirectory\\nasdaqlisted.txt");
    OutputStream outputStream1 =
        new BufferedOutputStream(new FileOutputStream(downloadFile1));
    boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
    outputStream1.close();

    if (success) {
        System.out.println("File #1 has been downloaded successfully.");
    }

    } catch (IOException ex) {
    System.out.println("Error: " + ex.getMessage());
    ex.printStackTrace();
} finally {
    try {
        if (ftpClient.isConnected()) {
            ftpClient.logout();
            ftpClient.disconnect();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}
从我的Windows终端连接会产生以下结果:

C:\Computer>ftp.nasdaqtrader.com
已连接到ftp.nasdaqtrader.com。
220
200选择UTF8命令成功-UTF8编码现在打开。
用户(ftp.nasdaqtrader.com:(无)):匿名
331允许匿名访问,将身份(电子邮件名称)作为密码发送。
密码:
230用户已登录。
ftp>退出
再见。
对于类似的FTP服务器(NOAA weather),代码通过Windows终端连接和下载时会产生以下结果:

C:\Computer>ftp.cdc.noaa.gov
已连接到ftp.cdc.noaa.gov。
220-**********************************************************************
220-**警告**警告**警告**警告**警告**警告**警告***
220-*                                                                    *
220-*这是商务部(DOC)的计算机系统。文件*
220-*计算机系统用于处理美国官方文件*
220-*仅限政府信息。未经授权访问或使用此文件*
220-*计算机系统可能会对违规者进行刑事、民事和/或刑事处罚*
220-*行政行动。DOC计算机中包含的所有数据*
220-*系统归DOC所有,可能被审计、拦截*
220-*以任何方式记录、读取、复制或捕获,并在*
220-*由授权人员以任何方式进行。没有隐私权*
220-*在本系统中。系统人员可披露任何潜在的*
220-*在DOC计算机系统上发现的犯罪证据要适当*
220-*当局。任何经授权或授权的用户使用本系统*
220-*未经授权即构成对本次审计、拦截、*
220-*记录、读取、复制、捕获和披露计算机信息*
220-*活动*
220-*                                                                    *
220-**警告**警告**警告**警告**警告**警告**警告***
220-**********************************************************************
220
200始终处于UTF8模式。
用户(ftp.cdc.noaa.gov:(无)):匿名
请指定密码。
密码:
230登录成功。
因此,比较这两个回复,ftp.nasdaqtrader.com似乎没有提供适当的(标准?)220回复(即截断)。因此:

  • 我是否正确地确定了问题和解决方案
  • 处理这个问题的适当方式是什么

  • 谢谢

    apachecommons网络库认为来自服务器的
    220
    响应不符合rfc959(可能是正确的)

    如果要允许库与服务器对话,请调用:


    谢谢你救了我一天
    ftpClient.setStrictReplyParsing(false);