在Java中实现FTP - 连接到227中指定的端口响应PASV命令

时间:2015-10-19 03:14:49

标签: java sockets ftp network-programming

我正在尝试编写FTP客户端,我似乎无法连接到被动端口。我想最终列出目录并下载文件,但我不知道该怎么做。

这是我的程序打印出来的。

PASV
227 Entering Passive Mode (73,13,156,129,217,103).
Passive Ports: 73,13,156,129,217,103
Failed to connect to port: 73
Failed to connect to port: 13
Failed to connect to port: 156
Failed to connect to port: 129
Failed to connect to port: 217
Failed to connect to port: 103
"/home/daniel">>
case 227://PASSIVE MODE
    String psPorts = lastMessage.substring(lastMessage.indexOf('(')+1,lastMessage.indexOf(')'));
    System.out.println("Passive Ports: " + psPorts);
    for(String i : psPorts.split(",")){
        Ports.add(Integer.parseInt(i));
    }

    for(int i: Ports){
        try{
            pSk = new Socket("webserver",i);
            break;
        }catch(Exception e){
            System.out.println("Failed to connect to port: " + i);
        }
    }
    break;

有人可以帮帮我吗?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

227PASV命令的响应中的数字不是端口号。

格式为:

IP_A,IP_B,IP_C,IP_D,PORT_HI,PORT_LO

所以你需要连接到

pSk = new Socket("IP_A.IP_B.IP_C.IP_D", PORT_HI<<8 + PORT_LO);

以上是伪代码(我不做Java)。