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)
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).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 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