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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
private void bgWorkerOrdreSimple_DoWork(object sender, DoWorkEventArgs e)
{
String responseString = String.Empty;
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);
}
}
}
catch (ArgumentNullException Ex)
{
richTextBox_LogDesOrdres.SelectionColor = Color.Red;
richTextBox_LogDesOrdres.AppendText("Error : " + Ex.Message + "\r\n\r\n");
}
e.Result = responseString;
}
private void bgWorkerOrdreSimple_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!(e.Error == null))
{
richTextBox_LogDesOrdres.SelectionColor = Color.Red;
richTextBox_LogDesOrdres.AppendText("Error: " + e.Error.Message + "\r\n\r\n");
}
else
{
richTextBox_LogDesOrdres.SelectionColor = Color.DarkGreen;
richTextBox_LogDesOrdres.AppendText("Done! : " + e.Result + "\r\n\r\n");
}
} |
Partager