无法从外部IP将文件传输到proftpd服务器

时间:2012-02-09 15:13:05

标签: java ftp

我正在制作一个适用于我的ProFtpd服务器的基本FTP传输应用程序。

在本地网络上,以下代码有效。但是,当我使用此代码并尝试通过外部IP连接时(是的,我将IP更改为我的外部IP)我收到错误:

  

sun.net.ftp.FtpProtocolException:PORT:500 Illegal PORT命令,EPSV ALL生效

此外,浏览器中与ftp服务器的连接会导致外部IP延迟一两分钟,但我不知道这是否相关。

这是我的代码:

URL url=new URL("ftp://"+username+":"+password+"@"+ip+path+recipient+"/"+sendMe.getName());
    URLConnection con=url.openConnection();
    System.out.println("connected");

    FileInputStream input=new FileInputStream(sendMe);
    BufferedOutputStream output=new BufferedOutputStream(con.getOutputStream());
    System.out.println("output Stream");

    int c;
    int size=0;
    TransferDialog transfer=new TransferDialog("0 bytes processed");

    while ((c = input.read()) != -1) {
        output.write(c);
        size++;
        transfer.changeText(size+" bytes processed");
        System.out.println(size);
    }

    if (input != null) {
        input.close();
    }
    if (output != null) {
        output.close();
    }
    System.out.println("Uploaded");

运行时,会发生错误而不是“输出流”消息。任何帮助或建议表示赞赏!

1 个答案:

答案 0 :(得分:2)

看起来你正试图通过你的外部IP制作一个Active FTP connection,而中间可能存在防火墙。您需要启动Passive connection而不是设计用于处理防火墙等(因为所有连接都是在被动模式下以客户端方式启动)。

当您在内部执行此操作时,这很有效,因为您的客户端和服务器之间没有防火墙。请记住,防火墙(在其默认配置中)会阻止所有非客户端启动的TCP连接。