2012-02-09 78 views
2

我正在與我的ProFTPD服務器工作的基本FTP傳輸的應用程序傳輸文件的ProFTPD服務器。無法從外部IP

在本地網絡中,下面的代碼工作。然而,當我使用此代碼,並嘗試通過外部IP連接,(是的,我改變了IP到我的外部IP),我得到的錯誤:

sun.net.ftp.FtpProtocolException: PORT :500 Illegal PORT command, EPSV ALL in effect

此外,連接到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"); 

當這個運行時,發生了錯誤,而不是「輸出流」的消息。任何幫助或建議表示讚賞!

+0

這是不是一個真正的java的問題,這是關於如何配置你的FTP服務器正常工作,更對serverfault.com問題(減去的Java位)。 – skaffman 2012-02-09 15:39:00

回答

2

它看起來像你想通過你的外部IP作出Active FTP connection,當有可能與防火牆英寸你需要啓動Passive connection,而不是它的目的是對付防火牆等(因爲所有的連接都是客戶端發起的在被動模式下)。

當你做到這一點內部,因爲您的客戶端和服務器之間沒有防火牆。請記住,防火牆(以其默認配置)將阻止所有非客戶端啓動的TCP連接。

+0

謝謝!你知道如何編輯代碼以將其從活動連接改爲被動連接嗎? – J3RN 2012-02-09 15:46:59

+0

@Jon你沒有向我們展示那部分代碼,但我相信你可以通過查找來找出它。這應該讓你朝着正確的方向前進。 – 2012-02-09 15:48:51

+0

@喬恩:見http://stackoverflow.com/questions/2282776/setting-ftp-active-passive-mode-with-java-urlconnection – beny23 2012-02-09 15:49:53