Bonjour, tout d'abord je me souhaite la bienvenue en tant que nouveau sur ce forum.
Voila mon probleme : je suis en train de creer une application ftp qui permet donc de downloader des fichiers d'un serveur ftp. J'utilise Qt pour cela.
Pour cela, j'utilise des ' QUrlOperator ' afin d'effectuer les telechargements (fonction copy). Cette fonction est censé effectuer un get et un put a la suite.
Mon but est de faire la copie de tous les fichiers d'un repertoire. Je procede de la maniere suivante : a chaque copie d'un fichier effectuée, je lance la copie du fichier suivant.
Tout se passe bien pour des repertoires de peu de fichiers. Mais lorsque celui ci depasse environ les 30 fichiers, au bout d'un certain nombre de copie (variant entre 27 et 30+) je ne recois plus de SIGNAL comme quoi la copie a ete effectuee ou non.
Cela est du au fait que mon serveur ftp sur lequel j'effectue mes tests, ne peut prendre qu'un nombre limité d'opérations : ce nombre est fixé par défaut à 30 (pour limiter les risques d'attaques). Si j'augmente cette limite à 100, je n'ai plus de problème pour mes tests. Mais si mon repertoire possede plus de 100 fichiers, je risque de rencontrer a nouveau le probleme.
De plus, si j'effectue une pause entre mes copies, le probleme disparait egalement.
Neanmoins, ces deux solutions ne sont pas tres elegantes. je ne comprend pas pourquoi je ne recois pas de signal comme quoi la copie ne peut etre effectuee. Les operations put et get ne sont elles pas censees emettre un signal "finished" quoi qu'il arrive ?
Avec ce que tu dis, le problème ne vient pas de ton programme mais du serveur ftp.
Il faudrait dans ce cas peut-être que tu modifies ton programme pour ne pas demander trop de get et de put au serveur ftp en même temps.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
En fait j'aimerais programmer tres proprement. Et pour moi, faire un pause(temps) pour pas demander trop de get et put, c'est pas tres propre : et puis comment regler ce temps ?
Ca me parait beaucoup plus logique que le serveur ftp refuse le get, et que j'en sois averti par un SIGNAL fail.
Ben une façon de voir les choses :
tu effectue surement une boucle pour récup tous tes programmes une fois le téléchargement lancé...
A chaque lancement de téléchargement de programme, tu augmentes une variable nb_dl par exemple...
Et dans ta boucle pour récup, tu dis que si nb_dl>30 alors:
- Tu affiche une messagebox qui dit : On ne peut effectuer plus de 30 téléchargements.
- Tu décrémente nb_dl car le dernier téléchargement a été annulé puisqu'il y en a déjà 30.
Qu'en pensez-vous?
Alp
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog)
Ce 30 dépend des ftp, certains ftp peuvent tres bien demander que 5 operations à la suite, ou 200... je ne peux pas recuperer cette variable.
Et puis, quand j'utilise konqueror pour telecharger un repertoire de mon ftp, il telecharge la totalité des repertoires et pas que 30...
Si justement, je crois que tu peux récup cette variable...
Sinon, certains serveurs acceptent jusqu'à 100 dl simultanés...
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog)
Nan mais je crois pas qu'il faut chercher de ce cote la. Car je viens de faire un test : si on est plusieurs a downloader sur le ftp, mon processus de copie s'arrete encore plus vite.
Alors meme si j'ai la varibale, ca me sert a rien : car je n'aurai pas de garantie sure.
Ah oui je n'y avais pas pensé... De plus pas possible de récup le nombre de connecté pour faire en fonction...
Hum... Je pense que tu devrais écrire à ceux qui ont fait FileZilla, pour leur demander un tuyau, non?
Sinon ben...
tu peux pas faire un truc :
ta fonction download () {
tant que pas d'erreurs renvoyée par le ftp {
tant que pas le fichier entier récupéré {
récupérer un bout de fichier
}
afficher : Téléchargement du fichier terminé.
}
}
En fait je sais pas si tu connais Qt, mais ca utilise un systeme de SIGNAl. En théorie, quand la copie pose un probleme, je recois un signal qui me dit que ca s'est mal passé.
Et quand je demande l'etat du fichier qui passe pas, il me dit qu'il est dans l'etat StWaiting, donc qu'il attend... et il attend... sans jamais se débloquer.
Pour info, ca utilise pas vraiment ce que tu me decris la car ton truc 'bloquerait' le prog principal puisque tant que le fichier n'a pas ete telechargé, ton prog resterait dans sa boucle.