【问题标题】:ftp client (from apache.org) and socket exceptftp 客户端(来自 apache.org)和套接字,除了
【发布时间】:2011-06-30 17:19:59
【问题描述】:

我使用来自 apache.org 的库并使用来自 java2s.com 的代码:

import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.io.FileOutputStream;

public class Main {
  public static void main(String[] args) {
    FTPClient client = new FTPClient();
    FileOutputStream fos = null;

    client.connect("ftp.domain.com");
    client.login("admin", "secret");
    client.enterLocalPassiveMode();

    String filename = "sitemap.xml";
    fos = new FileOutputStream(filename);

    client.retrieveFile("/" + filename, fos);
    fos.close();
    client.disconnect();
  }
}

我下载了这个库,把它移到了 lib 文件夹中,并把它重命名为 cn.jar。

编译:(在 Windows 7 下)

javac -cp ".;lib\cn.jar" Main.java

正在运行:(在 Windows 7 下)

java -cp ".;lib\cn.jar" Main

我得到了:http://freelifer.narod.ru/some.png

如何解决?怎么了?

【问题讨论】:

  • 您可以使用独立的 FTP 客户端连接到此服务器吗?发出telnet ftp.domain.com 21ftp ftp.domain.com 是否允许您与服务器交互?看起来像网络问题,你的代码很好(除了创建fos 到eraly :-))。

标签: java sockets ftp apache-commons-net


【解决方案1】:

我的猜测:FTP 协议定义了两个连接——一个数据连接和一个控制连接。您的示例代码成功建立了控制连接:

client.connect("ftp.domain.com");
client.login("admin", "secret");

FTPClient 的默认构造函数定义了数据连接应该在主动模式下建立(意味着当你请求文件时服务器会尝试打开到你的客户端的连接)。我认为由于您的防火墙或其他网络问题,无法打开数据连接。数据连接在这里打开:

client.retrieveFile("/" + filename, fos);

您可以尝试被动模式,也可以再次检查您的网络设置。调用FTPClient的enterLocalPassiveMode方法进入被动模式。此方法导致向服务器发出 PASV(或 EPSV)命令。示例:

client.connect("ftp.domain.com");
client.login("admin", "secret");
client.enterLocalPassiveMode();

干杯!

【讨论】:

  • 请尝试调用 client.enterLocalPassiveMode()。在检索文件之前和之后 client.login("admin", "secret");
  • 我编辑了我的代码,但又收到了上一条消息(请看附件:))
  • 你完全确定你添加了client.enterLocalPassiveMode();在你的代码中,然后你重新编译你的类?很抱歉问你这个问题,但我有 commons.net 资源,我可以清楚地看到当你在本地活动模式下工作时向服务器发出 PORT 命令时会发生此错误(在图片上)?
  • freelifer.narod.ru/some.png 是的,我很愚蠢。非常抱歉。好的,我有新消息)
  • 嘿,没有问题。这个新消息表明了一个完全不同的问题。该消息不正确且具有误导性。不是 RECV 失败,而是 PASV 命令失败。 PASV 命令可能会失败,例如,如果您的 FTP 服务器位于 NAT 之后并且不知道其“真实”地址。我建议你先用更高级的客户端软件尝试被动模式,看看它是否有效。
猜你喜欢
  • 2015-10-12
  • 2012-08-05
  • 2014-03-24
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多