dgueul
Messages postés11Date d'inscriptionsamedi 11 avril 2009StatutMembreDernière intervention31 juillet 2012
-
23 juil. 2012 à 18:20
dgueul
Messages postés11Date d'inscriptionsamedi 11 avril 2009StatutMembreDernière intervention31 juillet 2012
-
31 juil. 2012 à 10:34
Bonjour,
Voila, je me suis créé un petit client FTP très léger qui fonctionnait du feu de dieu...
Jusqu'à aujourd'hui, où je tombe sur un serveur ftp pas très sympa puisqu'il ne me répond pas assez vite...
Je m'explique :
Je me connecte à mon serveur FTP tout se passe bien, il me réponds assez rapidement, mais quand je lui envois la commande "LIST" pour lister les fichiers et dossiers du répertoire courant, le serveur me répond : "150 Opening ASCII mode data connection for file list". Puis, plus rien pendant environ 3 minutes. Et il finis par me répondre (enfin) "226 Transfer complete".
Ce délais de est très (trop) long, et bizarrement avec filezilla, c'est instantané.
Donc ça vient bien de mon appli!
j'utilise un BufferedReader que j'instancie comme ça :
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "iso-8859-15" ));
et je l'utilise dans une fonction pour lire ce que m’envoie le serveur de cette manière:
private String readLine() throws IOException {
String line = reader.readLine();
System.out.println( " - " + line );
return line;
}
J'appelle cette fonction après être entré en mode passif :
sendLine("LIST");
String response = readLine();
if (!response.startsWith("150 ")) {
throw new IOException("Impossible de lire le répertoire.");
}
response = readLine();
if (!response.startsWith("226 ")) {
throw new IOException("Impossible de lire le répertoire.");
}
Le programme bloque 3 minutes à l'appel du deuxième "readLine()".
J'ai essayer beaucoup de chose, mais là je sais plus quoi essayer...
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 23 juil. 2012 à 18:39
Tu as essayé d'écouter le port 21 avec wireshark par exemple, pour voir si le serveur te répond assez vite ? Au niveau Java, je ne vois pas trop ce que tu peux changer.
Sinon, essaie de comparer la communication Filezilla avec la tienne pour voir s'il y a une différence.
Dernier test qui peut être fait, lis sur le buffer caractère par caractère histoire de voir ce qui se passe en temps réel.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 24 juil. 2012 à 08:40
Salut,
Je ne suis pas familiarisé avec la RFC FTP mais sur le poste suivant (ICI) les propos de youdontcare semblent cohérents, normalement en parcourant le poste tu auras la solution à ton pb.
-----
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
dgueul
Messages postés11Date d'inscriptionsamedi 11 avril 2009StatutMembreDernière intervention31 juillet 2012 26 juil. 2012 à 09:20
Désolé, de n'avoir pas répondu plus tôt (beaucoup de taf).
Merci pour vos réponses!
jojolemariol:
Effectivement, je vais faire des tests avec wireshark. Je saurais au moins si les 3 minutes viennent du serveur ou de mon appli.
Twinuts:
Je confirme, les propos de youdontcar sont cohérents. Mais sur la deuxième socket pas de problème je récupère les datas assez rapidement. C'est sur la première qu'à un moment il y a une pause de 3 minutes...
Pylouq:
A tout hasard, je vais essayer mais je n'y crois pas trop ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
dgueul
Messages postés11Date d'inscriptionsamedi 11 avril 2009StatutMembreDernière intervention31 juillet 2012 27 juil. 2012 à 09:04
Voici les essais que j'ai fais:
-Remplacer "iso-8859-15" par utf8: sans succès.
-Utiliser wireshark pour comprendre ce qu'il se passe:
Et effectivement la réponse que j'attends est bien reçu 3 minutes plus tard...
Pire je me suis aperçu qu'il s'agissait de 3 minutes précise (à quelques millisecondes près).
De plus, j'ai comparé les trames que j'envoie et celle que filezilla envoie, et ce sont les mêmes... ??? Et là du coup, je ne comprends plus rien...
dgueul
Messages postés11Date d'inscriptionsamedi 11 avril 2009StatutMembreDernière intervention31 juillet 2012 29 juil. 2012 à 09:07
J'ai trouvé quelques chose mais j'ai pas encore la solution.
Quand j'envoie "LIST" sur les serveur où ça fonctionne normalement, il me répondent :
- "150 Opening BINARY mode data connexion for file list"
Ici, quand j'envoie "LIST" le serveur me renvoie :
- "150 Opening ASCII mode data connexion for file list"
Pourquoi passe t il en ASCII sans que je ne lui demande rien, et surtout comment le forcer à passé en mode binaire. J'ai essayer "TYPE I" sans succès.
En plus, il comme j'ai dit plus haut le serveur me renvoie bien la réponse "226" 3 minutes en retard, mais les infos sont arrivé sur la deuxième socket depuis belle lurette...