IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[FTP] Transfert de fichiers


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut [FTP] Transfert de fichiers
    Bonjour à tous,

    Je suis en train d'implementer un serveur ftp (projet fac) fonctionnant avec des clients tels que filezilla ou la commande FTP.
    aprés avoir bien galéré pour trouver les bons codes retour afin de satisfaire les requetes du client, je "bloque" sur la commande RETR :

    en fait, je ne sais pas vraiment comment envoyer ledit fichier...
    pour les commandes j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                    ServerSocket serverSock = new ServerSocket(4000);
    		Socket sock = serverSock.accept(); 
     
    		//pour recevoir/lire:
    			InputStream is = sock.getInputStream();
    			InputStreamReader isr = new InputStreamReader(is);
    			BufferedReader br = new BufferedReader(isr);
    			// au final on fera un String str = br.readline()
     
    		//pour envoyer/ecrire:
    			OutputStream os = sock.getOutputStream();
    			DataOutputStream dos = new DataOutputStream(os);
    			// au final on fera dos.writeBytes("message \n")
    avec par exemple le message
    dos.writeBytes("530 user does not exist\n");

    seulement avec le FTP on utilise 2 connections distinctes: une pour les commandes (OK) et une pour les données (pas OK^^)

    >>> pour les données:
    j'ai donc une connexion sur une autre ServeurSocket(mon serveur etant passé en PASV)
    j'en tire un OutputStream
    et la je suis bloqué, quelle classe fille utiliser? et comment?

    Sous quelle forme envoyer le fichier au client?

    Je farfouille sur le net en quête de réponse depuis plus d'une heure mais rien de concluant.

    un peu d'aide svp?

  2. #2
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Connais tu http://commons.apache.org/net/


    si tu veux simplement implémenter du FTP, ca devrait faire l'affaire.
    Si tu veux vraiment tout implémenter à la main, regardes dans les sources... tu devrais trouver ce que tu souhaites.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			DataOutputStream dos = new DataOutputStream(os);
    			// au final on fera dos.writeBytes("message \n")
    Pas bien!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			PrintWriter writer = new PrintWriter(os,"ISO-8859-1"); // controle sur l'encodage
    			// au final on fera writer.println("message \n")

    Ensuite, tu n'a pas de communication en parallèle pour le mode passif, c'est dans la même socket que tout passe (hô joie). Pour plus de détail, amuse toi avec le RFC

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut
    merci pour le lien ^^

    pourquoi "pas bien"?
    de plus, je n'ai pas qu'un seul canal de comm:
    j'en ai un pour les commandes (le code que tu as linqué)
    un pour les données...

    Je lai rendu depuis
    mais je suis tjs friand de conseils^^

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    an passif PASV, tu n'a qu'un seul canal qui est utilisé à la fois pour les commandes et les données (c'est le but du mode passif, si ma mémoire est bonne).

    Pas bien parce que le but d'un dataoutputstream, c'est pas d'envoyer du texte mais du binaire. Pour tes commandes textes, utilise un writer (qui lui au moins te laisse le contrôle sur l'encodage).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut
    oui tu as raison sur ce point pour le car/bin mais je l'ai corrigé cela avant de le rendre simplement pour implementer la commande "TYPE" qui te permet de passser du mode binary au mode ascii

    donc je me met en mode binary par defaut (pour image code etc) et si le user le souhaite il peut passer en ascii pour des fichiers textes ou autre

    par contre tu es sur pour l'unique canal de comm en PASV?

    je ne vois pas linteret de faire 2 en actif et 1 en passif surtout que tu peux a tout moment changer entre les deux modes ce qui resulterait en de la duplication de code pour le transfert...

    et cette histoire de double canal je lai trouvée en fouillant a propos de la RFC sur un site repertoriant les codes de retours exactes ( a la base je nutilisais qu'un seul canal ca me semblait logique)

    sur ce même site j'ai vu les traces de sessions en mode verbeux et pour un simple "LIST" il utilise un 2nd canal pour envoyer la reponse a la commande !

Discussions similaires

  1. Réponses: 32
    Dernier message: 21/06/2012, 16h48
  2. [FTP] Transfert de fichiers entre deux sites : possible ?
    Par dontDeleteMe dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2007, 13h50
  3. [2.0][vb.net] ftp transfert de fichier
    Par pasnet74 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/08/2006, 16h22
  4. [FTP] Transfert de fichiers en FTP
    Par dams78 dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2006, 02h34
  5. [FTP] transfert de fichiers utilisant le protocole ftp
    Par ista9im dans le forum Langage
    Réponses: 1
    Dernier message: 30/09/2005, 17h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo