Progression d'un transfert via socket

Résolu
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008 - 10 août 2007 à 19:47
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008 - 21 août 2007 à 10:39
Encore une question... une grosse!

Je suis en train de perfectionner une appli client-serveur dans laquelle je souhaite afficher la progression des transfert de fichiers. Je suis complètement débutant dans le domaine de la prog, ce premier développement m'a déjà beaucoup appris, en cherchant par moi-même et en imaginant des procédés divers et variés, mais là j'aimerais bien un p'tit coup de main (j'ai mal à la tête). Donc, y a -t- il une méthode particulière pour récupérer les infos d'avancement d'un transfert quelquonque (pour moi c'est du réseau mais je pense qu'on doit pouvoir l'appliquer aussi à une simple copie de fichier). Je sais qu'il faut faire tourner un Thread en parrallèle de la tâche principale pour récupérer une valeur correspondant au pourcentage d'avancement du transfert, mais je ne sais pas comment générer cette valeur au fur et à mesure que le transfert progresse. Faut-il tout gérer en faisant dialoguer le client avec le serveur? Ca me paraît lourd car il faudrait que le serveur connaisse la taille des données qu'il doit recevoir, leur position dans le fichier pour reprendre le transfert à l'endroit où il s'est arrêté en cas de coupure, et calculer le pourcentage de données reçues avant de l'envoyer au client pour qu'il puisse afficher l'avancement. Si y'a pas d'autres moyen je m'y mettrai mais si y'a un truc qui peut me donner ces infos ça me simplifierait les choses.

Désolé pour le pâté, merci d'avance à ceux qui auront pris la peine de tout lire voire, de m'aider...

6 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
20 août 2007 à 23:08
salut,

il y a plusieurs choses :
-> pour le transfert, tu peux soit créer un thread qui fait le transfert (avec un threadstart ou un parametrizedthreadstart que tu passes au new thread pour indiquer la méthode à exécuter et éventuellement un argument à passer à cette méthode), soit utiliser un thread existant depuis threadpool avec la méthode QueueUserWorkItem à laquelle tu passes la méthode et un éventuel argument...
-> pour la progression, sur ta progressbar, tu définit le mini à 0, le maxi à la taille de ton fichier, le pas à la taille des paquets que tu envoies et tu fais un performstep après chaque paquet...avec surement la nécessité d'utiliser un appel Invoke pour éviter le crossthreadcalls...
-> pour la vitesse, tu peux définir un compteur comme variable membre de ta classe que tu incrémentes de la taille de ton paquet à chaque envoi et dans un timer, toutes les secondes, tu lis le compteur, ca te donne la vitesse dans la dernière seconde, tu le remets à 0...voir à utiliser lock sur la variable pour ne pas obtenir n'importe quoi du fait que le thread qui écrit n'est pas celui qui lit...

ShareVB
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
12 août 2007 à 23:57
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 août 2007 à 21:27
salut,

pour compléter : tu ne peux pas savoir vraiment si le serveur a reçu tes données, donc, il suffit presque de compter les données que tu émets pour avoir la progression et dans la mesure où quand le tampon est plein ca bloque ton appli, tu peux avoir la vitesse...

ShareVB
0
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
17 août 2007 à 13:06
TeBeCo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
20 août 2007 à 11:56
Désolé pour le temps de réaction, je reviens juste.

Effectivement mon interface graphique se bloque le temps du traitement du transfert, c'est pas terrible, surtout pour de gros fichiers. J'ai essayé de faire un "this.refresh" entre chaque envoi de paquet mais ça ne change rien, je pense qu'il faut construire un thread pour éviter cela, est-ce que je me trompe?

Sinon je commence à piger pour la barre de progression, mais pour la vitesse moins... Il faudrait mesurer le temps que met le pc à charger les données dans le buffer, ce qui revient à déterminer quand se bloque l'appli, c'est bien ça? Mais comment puis-je déterminer quand se bloque l'appli?
0
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
21 août 2007 à 10:39
ok je vais essayer de me débrouiller avec tout ça, reste plus qu'à bosser maintenant! Merci pour vos réposnses.
0
Rejoignez-nous