2011-10-18 34 views
2

私は、ftpでファイルを送信するためのjavaコードを記述しています。私が使ったサーバーは、localhostのFileZilla Serverソフトウェアです。FtpクライアントはIPV6を使用してファイルを転送できません

public static void main(String[] args) { 
    try { 
     String host = "fe80::21a:a0ff:fe8d:fe63"; //No problem if ipv4 
     int port = 1998; 
     String username = "joe"; 
     String password = "123"; 
     String directory = "D:/ftp_share"; 
     File fileToTransfer = new File("D:/RND/samplefile.txt"); 
     String fileName = fileToTransfer.getName(); 
     FTPClient ftp = new FTPClient(); 
     ftp.connect(host, port); 
     ftp.login(username, password); 
     FileInputStream in = new FileInputStream(fileToTransfer); 
     if (!(directory == null || "".equals(directory))) { 
      ftp.changeWorkingDirectory(directory); 
     } 
     ftp.setFileType(FTP.BINARY_FILE_TYPE); 
     ftp.appendFile(fileName, (InputStream) in); 
     System.out.println("File " + fileName + " succesfully sent via ftp to " + host + " at port " + port); 

    } catch (SocketException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

問題は私がIPV4でしか送ることができますが、IPv6では使用できません。 Javaのexeptionは

org.apache.commons.net.ftp.FTPConnectionClosedException: FTP response 421 received. Server closed connection. 
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:360) 
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290) 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:474) 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547) 
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:680) 
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551) 
    at org.apache.commons.net.ftp.FTPClient.appendFile(FTPClient.java:1765) 
    at rnd.Main.main(Main.java:44) 

で、ファイルZillaをサーバ内のメッセージは

(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> Connected, sending welcome message... 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220-FileZilla Server version 0.9.39 beta 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220-written by Tim Kosse ([email protected]) 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 220 Please visit http://sourceforge.net/projects/filezilla/ 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> USER joe 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> 331 Password required for joe 
(000018)10/18/2011 14:46:39 PM - (not logged in) (fe80::21a:a0ff:fe8d:fe63)> PASS *** 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 230 Logged on 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> CWD D:/RND/ftp_share 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 550 CWD failed. "/D:/RND/ftp_share": directory not found. 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> TYPE I 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 200 Type set to I 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> EPRT |1|0.0.0.0|2885| 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 200 Port command successful 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> APPE jawapannya.txt 
(000018)10/18/2011 14:46:39 PM - joe (fe80::21a:a0ff:fe8d:fe63)> 421 Can't create socket 

ことが可能とIPV6を使用して送信できるようにする方法を任意の1人の助けができることです。

注:私はすでに私のローカルにIPV6を持っています。

+0

「550 CWD failed」の代わりにIPv6が原因で失敗したのでしょうか? "/ D:/ Tecforte/ftp_share":ディレクトリが見つかりませんでした。 " –

+0

ftp4j(http://www.sauronsoftware.it/projects/ftp4j/)を試してみることもできます。commons-ftpclient – SirVaulterScoff

+0

私はftp4jを使ってみました。はい、正常にIPV4のために。誰も私にIPv6のサンプルを与えることができます。私はfilezillaサーバーからこのメッセージを受け取りました "500あなたはIPv6を使用して接続されています.PASVはIPv4専用です。代わりにEPSVコマンドを使用する必要があります " –

答えて

0

EPRTコマンドが偽の場合、サーバーが不特定のIPv4アドレスに接続することを要求しています。

ローカルホストのアドレス:: 1、またはリンクローカルアドレスではなくグローバルアドレスではうまくいく可能性があります。

関連する問題