Taille TAMPON TCP en émission

nihonsx5 Messages postés 20 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 16 février 2014 - 10 janv. 2007 à 00:46
nihonsx5 Messages postés 20 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 16 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

             

2 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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 #
0
nihonsx5 Messages postés 20 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 16 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)

Aidez-moi svp
merci
0
Rejoignez-nous