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);
}
}
문제는 IPv6를 사용하지 않고 IPV4 만 보낼 수 있다는 것입니다. 자바 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)
하고 파일 질라 서버에서 메시지가
(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를 사용하여 보낼 수 있도록하는 방법을 어떤 한 도움이됩니다.
참고 : 이미 내 지역에 IPV6이 있습니다.
'550 CWD failed'대신 IPv6로 인해 실패했는지 확인하십시오. "/ D :/Tecforte/ftp_share": 디렉터리를 찾을 수 없습니다. "? –
ftp4j (http://www.sauronsoftware.it/projects/ftp4j/)를 사용하여 시도해 볼 수도 있습니다. commons-ftpclient – SirVaulterScoff
ftp4j를 사용해 보았습니다. 예, IPV4에 성공적입니다. 누구든지 IPv6 샘플을 제공 할 수 있습니까? 이 메시지는 filezilla 서버에서 "500 당신은 IPv6를 사용하여 연결되어 있습니다 .PASV는 IPv4 전용입니다. 대신 EPSV 명령을 사용해야합니다. " –