FTP multithread

FTP multithread - Java - Programmation

Marsh Posté le 18-02-2011 à 19:33:07    

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
Reply

Marsh Posté le 18-02-2011 à 19:33:07   

Reply

Marsh Posté le 18-02-2011 à 21:11:18    

Personne ?:(

Reply

Marsh Posté le 18-02-2011 à 21:23:42    

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

Reply

Marsh Posté le 18-02-2011 à 21:38:32    

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

Reply

Marsh Posté le 18-02-2011 à 21:39:22    

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();
 

Reply

Marsh Posté le 18-02-2011 à 21:56:03    

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"

Reply

Marsh Posté le 18-02-2011 à 22:00:03    

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

Reply

Marsh Posté le 18-02-2011 à 22:07:07    

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
Reply

Marsh Posté le 18-02-2011 à 22:14:33    

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

Reply

Marsh Posté le 18-02-2011 à 22:18:43    

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..

Reply

Marsh Posté le 18-02-2011 à 22:18:43   

Reply

Marsh Posté le 18-02-2011 à 22:27:23    

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
Reply

Marsh Posté le 18-02-2011 à 22:34:55    

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
Reply

Marsh Posté le 18-02-2011 à 23:04:10    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed