Socket : problème de latence entre la réception des données et l'écriture dans u

Résolu
floxone Messages postés 88 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 août 2007 - 19 janv. 2006 à 11:51
floxone Messages postés 88 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 août 2007 - 25 janv. 2006 à 10:03
Salut,

Je suis en train de développer un client ftp de base afin de manipuler les sockets en .net. J'ai un problème : quand je rapatri un .zip, il faut que je place un temps d'attente entre la réception des données de la socket et l'écriture des données dans un fichier. Comment faire pour régler ce problème ? Si vous avez des idées, elles sont bonnes à prendre ;-)

Merci d'avance,

Flo.

PS : Voici le code qui pose problème :



Public
Overloads
Function Reception()



Dim code
As
Integer = -1



Dim output(1024)
As
Byte



Dim rep
As
String



Dim i
As
Integer = 0



Dim monStreamWriter
As BinaryWriter =
New BinaryWriter(File.Create(".\donnees\test.zip"))



While (code <> 0)



If (
Me.Connected())
Then


code =
Me.ReceiveFrom(output,
Me.iep)



Else


code = 0



End
If



If (code <> 0)
Then


monStreamWriter.Write(output)



'il faut attendre une durée variable selon la taille du fichier en millisecondes avant de receptionner la suite ! POURQUOI ? C'est pas très pratique...


System.Threading.Thread.Sleep(100)



End
If



End
While


monStreamWriter.Close()



End
Function

2 réponses

floxone Messages postés 88 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 août 2007
25 janv. 2006 à 10:03
J'ai réglé mon problème ! Il suffit d'utiliser un array.copy() et d'attendre la fin de la réception. Alors, on peut enfin écrire le fichier.
3
cs_JeTrouvePasDePseudo Messages postés 11 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 23 janvier 2006
23 janv. 2006 à 15:58
Salut,

Si je comprends bien ton problème, tu lis, tu attends, tu lis, tu attends, etc etc...

C'est normal comme comportement. Quand tu utilises des sockets, tu utilises le réseau, et donc, le fichier qui transite est coupé en morceau avant d'être envoyé, ensuite ton système reconstruit les morceaux dans l'order et te les donnes dès qu'ils sont dispo.

Pour corriger ce pb, tu dois utiliser l'event fournis par le socket qui te préviens qu'un autre bout du fichier est arrivé.

Je ne connais pas le .Net, mais j'ai déjà bosser sur des sockets en VB et en C, et le fonctionnement des sockets et le même.

J'éspère que c'est clair,
Salut
0
Rejoignez-nous