Client TCP qui fait des retry sans savoir pourquoi
Bonjour
Je me suis fait un serveur TCP qui envoi des informations à une autre machine, ca fonctionne mais je me suis étonné que le délai de timeout ne soit pas respecté (10s en tout)
voici mon code ou je configure un timout en écriture et en lecture de 1000 (1seconde)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| try
{
bgWOrdreSimple_Parametres args = (bgWOrdreSimple_Parametres)e.Argument;
using (TcpClient client = new TcpClient(args.IP, args.port)) // ouverture du socket
{
using (NetworkStream stream = client.GetStream())//récupération du stream du socket
{
args.data[0] = 255; // c'est un ordre on a donc 255
stream.WriteTimeout = args.WriteTimeOut ; //réglage des timeout
stream.ReadTimeout = args.ReadTimeOut ;
int ResteAEnvoyer = args.data.Length;
int PositionDansBuffer = 0 ;
int Aenvoyer = 0;
while (ResteAEnvoyer > 0)
{
Aenvoyer = ResteAEnvoyer;
if (ResteAEnvoyer > 250)
Aenvoyer = 250; //on envoi maximum 250o à la fois
stream.Write(args.data, PositionDansBuffer, Aenvoyer);
PositionDansBuffer += Aenvoyer;
ResteAEnvoyer -= Aenvoyer;
}
if (Aenvoyer == 250) // si la dernière trame faisait pile 250o on envoit un saut de ligne en plus (IndusBee se sert de 250 pour savoir s'il doit attendre la suite d'une trame
{
byte[] trameCourte = System.Text.Encoding.ASCII.GetBytes("\r\n");
stream.Write(trameCourte, 0, trameCourte.Length);
}
// Buffer to store the response bytes.
byte[] LaReponse = new Byte[512];
// attente réponse le temps du timeout
Int32 bytes = stream.Read(LaReponse, 0, LaReponse.Length);
responseString = System.Text.Encoding.ASCII.GetString(LaReponse, 0, bytes);
}
}
} |
Je viens de me rendre compte via la console du serveur que ce code fait 2 retry (3 tentatives en tout) avant de me lever le timeout (d'où la durée largement supérieure à 1s).
Je n'arrive pas à trouver de paramètres qui règlent ces retry, que j'aimerais supprimer pour que mes timeout soient respectés.
Merci par avance pour votre aide