nihonsx5
Messages postés20Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention16 février 2014
-
10 janv. 2007 à 00:46
nihonsx5
Messages postés20Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention16 février 2014
-
10 janv. 2007 à 16:44
Bonjour,
je programme un petit programme pour uploader un fichier sur un hébergeur de fichiers.
J'utilise HttpWebRequest pour effectuer la requête (envoyer les données)
J'utilise la méthode "POST", j'envoie mes données en multipart etc..
Pour les petits fichiers, je n'ai pas de soucis. Mais pour les plus gros fichiers ( ~5Mo ),
j'ai l'impression que j'upload trop vite les données.
Avec ethereal, je sniffe mes données, et je vois que j'envoie les données avec une taille de 1452 octets.
Un autre programme qui lui fonctionne (mais qui n'a pas été fait par moi, et qui est programmé en C++ ou autre),
envoie les données avec une taille de 1024 octets.
J'utilise un buffer pour envoyer mes données (écrire dans le stream) de 1024, mais je
suis toujours à 1452. Je peux baisser ou augmenter ce buffer, rien ne change.
Où puis-je changer cette taille de fenêtre TCP dans .NET2 ?
Peut-etre en utilisant les SOCKETS ? J'ai vu qu'il y avait un paramètre SENDBUFFERSIZE
mais pour les sockets, je ne suis pas trop fort...
Je vous donne une partie de mon code :
le raiseevent est là pour faire animer ma barre de progression.
Private request As HttpWebRequest
Const BufferSize As Integer = 1024
Dim content As Byte() = New Byte(BufferSize - 1) {}
Dim dataRead As Integer
Dim fs As Stream = getStream(Me.data)
Using rs As Stream = Me.request.GetRequestStream
While True
dataRead = fs.Read(content, 0, BufferSize)
If dataRead = 0 Then
Exit While
End If
rs.Write(content, 0, dataRead)
dataReads += dataRead
RaiseEvent PercentDone(dataReads, Me.data.Length)
End While
fs.Flush()
fs.Close()
End Using
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 10 janv. 2007 à 11:24
1452 me semble une valeur parfaitement correcte si tu as une connection >2Mb
C'est le nombre maximum d'octets que tu peux envoyer dans une trame TCP. Mais c'est le nombre d'octet incluant tes données, les octets de controles, les entetes, l'encapsulage TCP, etc .....
Et de tout ça, tu ne peux rien toucher, c'est gerer par la couche TCP/IP du système d'exploitation.
Pour voir diminuer cette valeur de 1452, il faut certainement diminuer ton buffer en dessous de 1024 encore.
Quant au logiciel qui envoie 1024 octets, c'est parce qu'ils ont choisit unbuffer bien plus petit, certainement pour s'adapter à tout type de connection TCP
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
nihonsx5
Messages postés20Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention16 février 2014 10 janv. 2007 à 16:44
Merci pour le conseil, mais j'ai déjà essayé...
Je change la constante "BufferSize", j'ai mis 1024, 512 etc... aucun effet...
Du moins, j'envoie un paquet à 1452 puis un autre à 80 , et ça recommence à 1452 etc...
Le taille du 2ème paquet après chaque paquet à 1452 varie quand je change mon buffer.
Mais le résultat voulu est que chaque paquet soit à 1024.
N'est-il pas possible dans le NET, de changer la valeur des données utilies de la pile TCP/IP en émission ?
Le logiciel qui fonctionne le fait bien...
Le serveur auquel j'envoie les données ne comprend plus rien au bout d'un certain moment (d'où la réussite dans l'envoi de petit fichier)