Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2370 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  FTP multithread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

FTP multithread

n°2057906
cl29200
Posté le 18-02-2011 à 19:33:07  profilanswer
 

Bonjour,
 
J'ai un probleme, j'ai créé un client ftp en utilisant les primitives ftp.
bref tout ce passe bien lorsque je telecharge un fichier.
J'envoie le pasv puis j'ouvre une thread qui se connecte a l'ip et port donnée par le serveur puis stor.
cela fonctionne bien!
mais lorsque je fais un deuxieme PASV pour un autre fichier
la connection du premier thread est fermée... et du coup seul le dernier fichier se telecharge
 
Je cherche desesperement la solution..
 
Merci d'avance


Message édité par cl29200 le 18-02-2011 à 19:33:54
mood
Publicité
Posté le 18-02-2011 à 19:33:07  profilanswer
 

n°2057920
cl29200
Posté le 18-02-2011 à 21:11:18  profilanswer
 

Personne ?:(

n°2057923
ccp6128
Syntax error
Posté le 18-02-2011 à 21:23:42  profilanswer
 

Chacun de tes threads doit gérer une connection distincte au FTP.
 
1 connection FTP = 1 seul transfert de fichier en simultané.

n°2057924
cl29200
Posté le 18-02-2011 à 21:38:32  profilanswer
 

ben oui c'est bien le cas, chaque thread fait son connect au port et ip donné par le pasv de la thread qui gere les commandes

n°2057926
cl29200
Posté le 18-02-2011 à 21:39:22  profilanswer
 

Voici le code de chaque thread l'ip et le port sont passés lors de la creation de la thread :
BufferedInputStream input = null;
  BufferedOutputStream output = null;
  byte[] buffer = null;
  int bytesRead;
  Socket sock = null;
   sock = new Socket(ip, port);
   input = new BufferedInputStream(new FileInputStream(new File(fic)));
   System.out.println("Connection a port=" + port);
   output = new BufferedOutputStream(sock.getOutputStream());
  buffer = new byte[512];
  bytesRead = 0;
   while ((bytesRead=input.read(buffer)) != -1) {
    output.write(buffer, 0, bytesRead);
   }
   output.close();
   input.close();
 

n°2057930
ccp6128
Syntax error
Posté le 18-02-2011 à 21:56:03  profilanswer
 

A ma connaissance (en tous cas c'est comme ca que je code, et ca marche), il te faut un thread par connection, en incluant le canal de commandes.
 
C'est pas "1 canal de commandes + n canaux data"
 
C'est "n canaux de commande + n canaux data"

n°2057931
cl29200
Posté le 18-02-2011 à 22:00:03  profilanswer
 

hm ok mais la plupart des clients affichent la connections etc... et lorsque un deuxieme fichier est telecharger on voit le pasv mais on ne voit pas une réidentification au serveur etc..; donc j'ai des doutes sur tes propos

n°2057933
ccp6128
Syntax error
Posté le 18-02-2011 à 22:07:07  profilanswer
 

En FTP classique, en tous cas, y'a aucun mot clé qui pourrait spécifier qu'on puisse avoir une seule connexion sur le canal de commandes qui pourrait gérer plusieurs connections data. Suffit de se poser une question simple : comment comptais tu gérer tes multiples connections data ? Genre spécifier que sur l'une tu veux télécharger un truc, et sur l'autre un autre truc ? stopper un download ? etc ? Si y'a pas de commandes prévues pour, c'est qu'on peut pas.
 
Y'a peut être des extensions au protocole FTP qui gèrent ca, mais ce ne sera pas supporté par tous les serveurs.
 
Et par exemple avec Filezilla, pour chaque connexion data supplémentaire, il se reconnecte au ftp avec ma méthode (nouvelle connexion de commandes, authentification et tutti quanti)


Message édité par ccp6128 le 18-02-2011 à 22:09:04
n°2057934
cl29200
Posté le 18-02-2011 à 22:14:33  profilanswer
 

Ok mais ce que je ne comprends pas c'est que je test sa sur filezilla server et a aucun moment le client filezilla ce ne se reconnecte.. il fais juste un second pasv

n°2057935
cl29200
Posté le 18-02-2011 à 22:18:43  profilanswer
 

J'ai sa par ex avec filezilla client :
Réponse : 227 Entering Passive Mode (127,0,0,1,205,101)
Commande : STOR 1.avi
Réponse : 150 Connection accepted
Statut : Démarrage de l'envoi de C:\Users\Ciaran\workspace\ClientFtp\2.avi
Commande : PASV
Réponse : 227 Entering Passive Mode (127,0,0,1,205,103)
Commande : STOR 2.avi
Réponse : 150 Connection accepted
 
 
A aucun moment il se reconnecte pour le second pasv..

mood
Publicité
Posté le 18-02-2011 à 22:18:43  profilanswer
 

n°2057936
ccp6128
Syntax error
Posté le 18-02-2011 à 22:27:23  profilanswer
 

Si tu regardes le log de Filezilla Server, il peut tout aussi bien te "masquer" les connections multiples pour des questions de lisibilité. Ou utiliser un mécanisme proprio pour gérer ca.
 
Mais bon, si tu n'es pas convaincu, suffit d'attendre que quelqu'un d'autre dise si j'ai répondu correctement ou si je me trompe (ce qui n'est pas exclu).


Message édité par ccp6128 le 18-02-2011 à 22:34:47
n°2057940
cl29200
Posté le 18-02-2011 à 22:34:55  profilanswer
 

Ben quand je connecte mon filezilla a mon filezilla server c'est pareil sur le serveur il n'y a que le pasv.
Je te remercie en tout cas:)


Message édité par cl29200 le 18-02-2011 à 22:35:51
n°2057954
cl29200
Posté le 18-02-2011 à 23:04:10  profilanswer
 

Apres plusieurs tests effectivement tu semble avoir raison j'aimerais juste un second avis..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  FTP multithread

 

Sujets relatifs
Comment programmer un client FTP sous AndroidMultithread/core avec Qt
Quelles opérations courantes sont sûres en multithread ?question sur static et multithread
Récupérer des infos renvoyées par un serveur FTPenvoi de fichier par FTP
FTP copie de répertoireMappage FTP en vbscript
[Script]en .bat pour Test FTP en boucleAccès à un serveur FTP
Plus de sujets relatifs à : FTP multithread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR