Progression d'un transfert via socket [Résolu]

Messages postés
19
Date d'inscription
mardi 26 juin 2007
Dernière intervention
9 avril 2008
- - Dernière réponse : churrros
Messages postés
19
Date d'inscription
mardi 26 juin 2007
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...
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
2717
Date d'inscription
vendredi 28 juin 2002
Dernière intervention
13 janvier 2016
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ShareVB
Commenter la réponse de ShareVB
Messages postés
2717
Date d'inscription
vendredi 28 juin 2002
Dernière intervention
13 janvier 2016
0
Merci
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
Commenter la réponse de ShareVB
Messages postés
467
Date d'inscription
lundi 24 juin 2002
Dernière intervention
9 mars 2011
0
Merci
TeBeCo
Commenter la réponse de TeBeCo
Messages postés
19
Date d'inscription
mardi 26 juin 2007
Dernière intervention
9 avril 2008
0
Merci
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?
Commenter la réponse de churrros
Messages postés
19
Date d'inscription
mardi 26 juin 2007
Dernière intervention
9 avril 2008
0
Merci
ok je vais essayer de me débrouiller avec tout ça, reste plus qu'à bosser maintenant! Merci pour vos réposnses.
Commenter la réponse de churrros

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.