Comment télécharger un fichier via FTP code java


Besoin de télécharger le fichier à partir du serveur en utilisant FTP, sans utiliser les bibliothèques existantes et les solutions de parité 3rd. Je parviens à me connecter et à me connecter au serveur, au mode de type post de transfere (ASCII) et au mode passiv, donc j'obtiens le numéro de port et j'ouvre un nouveau ServerSocket(port). Mais quand j'appelle RETR fileName, mon programme bloque sur InputStream.readLine () (sur le port du serveur de lecture, signifie que le serveur ne répond pas) Y a-t-il quelque chose avant d'appeler RETR comand que j'ai oublié de faire?

//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()
Author: user2191697, 2013-03-21

2 answers

La commande FTP PASV n'ouvrira pas de socket côté client, l'IP et le port sont retournés au client À partir du serveur en disant essentiellement au client "Ok connectez-vous à moi sur cette IP et ce port". Veuillez consulter la RFC 959 pour plus de détails sur la mise en œuvre. L'implémentation du client FTP en JAVA n'est pas un processus trivial.

 0
Author: , 2013-04-16 18:47:08
    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();
    }
}
 0
Author: Burhan ARAS, 2013-08-16 08:24:58