2015-10-19 30 views
1

我想编写一个FTP客户端,我似乎无法连接到被动端口。我想最终列出目录并下载一个文件,但我不知道该怎么做。在Java中实现FTP - 连接到227指定的端口响应PASV命令

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

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

227响应PASV命令的号码不是端口号。

格式为:

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)。