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);
}
}
} |
Partager