2015-10-19 34 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)。