2013-03-21 2 views
-2

Необходимо загрузить файл с сервера с помощью FTP, не используя существующие библиотеки и 3-мерные решения по четности. Мне удается подключиться и подключиться к серверу, отправить тип режима передачи (ASCII) и пассивный режим, чтобы я получил номер порта и открыл новый ServerSocket (порт). Но когда я вызываю RETR fileName, мои программные блоки на InputStream.readLine() (при чтении порта сервера, означает, что сервер не отвечает) Есть ли что-то перед вызовом команды RETR, которую я забыл сделать?Как загрузить файл по FTP java-код

//PASV 
outputStream.println("pasv");  

//227 Entering Passive Mode(a1,a2,a3,a4,p1,p2) 
String response = inputStream.readLine(); 

// port = p1*256 + p2 
ServerSocket serverSocket = new ServerSocket(port); 

//RETR fileName 
outputStream.println("retr "+ fileName); 

//server no answer 
String reply = inputStream.readLine() 
+1

Это домашнее задание, потому что я не могу представить себе другую причину, по которой вы не захотите использовать существующие библиотеки? – jtahlborn

+1

Проверьте разницу между пассивным и активным режимами. – parsifal

+0

Да, его домашнее задание. К сожалению, существующие библиотеки не разрешены. – user2191697

ответ

0

команда FTP PASV не будет открывать сокет на стороне клиента, то IP и порт возвращается клиенту с сервера в основном говорить клиенту «Ok подключиться ко мне на этом IP и порт». Просьба рассмотреть RFC 959 для деталей реализации. Реализация клиента FTP в JAVA не является тривиальным процессом.

0
public void download(String remoteFile) { 


    FTPClient ftpClient = new FTPClient(); 

    try { 
     ftpClient.connect(server, 22); 
     ftpClient.login(ftpUser, ftpPassword); 
     ftpClient.enterLocalPassiveMode(); 
     ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

     // APPROACH #1: using retrieveFile(String, OutputStream) 
     File downloadFile1 = new File("D:/ftpdosyam.txt"); 
     OutputStream outputStream = new BufferedOutputStream(
       new FileOutputStream(downloadFile1)); 
     boolean success = ftpClient.retrieveFile(remoteFile, outputStream); 
     outputStream.close(); 

     if (success) { 
      System.out.println("File #1 has been downloaded successfully."); 
     } 
    } catch (SocketException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
Смежные вопросы