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

churrros 19 Messages postés mardi 26 juin 2007Date d'inscription 9 avril 2008 Dernière intervention - 10 août 2007 à 19:47 - Dernière réponse : churrros 19 Messages postés mardi 26 juin 2007Date d'inscription 9 avril 2008 Dernière intervention
- 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
ShareVB 2717 Messages postés vendredi 28 juin 2002Date d'inscription 13 janvier 2016 Dernière intervention - 20 août 2007 à 23:08
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

Merci ShareVB 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de ShareVB
Commenter la réponse de ShareVB
ShareVB 2717 Messages postés vendredi 28 juin 2002Date d'inscription 13 janvier 2016 Dernière intervention - 14 août 2007 à 21:27
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
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 17 août 2007 à 13:06
0
Merci
TeBeCo
Commenter la réponse de TeBeCo
churrros 19 Messages postés mardi 26 juin 2007Date d'inscription 9 avril 2008 Dernière intervention - 20 août 2007 à 11:56
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
churrros 19 Messages postés mardi 26 juin 2007Date d'inscription 9 avril 2008 Dernière intervention - 21 août 2007 à 10:39
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.