TCP Client - loop in communication
I am writing a program which goal is to communicate with the weight
terminal using TCP client. I'm sending specified messages (eg. checking
status) and depending on the replies I'm making some another process.
First, some code. Connection:
public static void PolaczZWaga(string IP, int port)
{
IP = IP.Replace(" ", "");
KlientTCP = new TcpClient();
KlientTCP.Connect(IPAddress.Parse(IP), port);
}
Sending message (eg. checking status)
public static string OdczytDanychZWagi(byte[] WysylaneZapytanie)
{
// Wysy³ka komunikatu do pod³¹czonego serwera TCP
byte[] GotoweZapytanie =
KomunikatyWspolne.PoczatekKomunikacji.Concat(WysylaneZapytanie).Concat(KomunikatyWspolne.KoniecKumunikacji).ToArray();
NetworkStream stream = KlientTCP.GetStream();
stream.Write(GotoweZapytanie, 0, GotoweZapytanie.Length);
// Otrzymanie odpowiedzi
// Buffor na odpowiedz
byte[] odpowiedz = new Byte[256];
// String do przechowywania odpowiedzi w ASCII
String responseData = String.Empty;
// Odczyt danych z serwera
Int32 bytes = stream.Read(odpowiedz, 0, odpowiedz.Length);
responseData = System.Text.Encoding.ASCII.GetString(odpowiedz, 0,
bytes);
return responseData;
}
After Form1 open I make an connection and checking status
string odp =
KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Kom_RejestrStatusu);
char status = odp[0];
switch(status)
{
case 'B':
KomunikacjaSieciowa.WysylkaDoWyswietlaczaWagi_4linie(WysylkaDoWyswietlacza_Komunikaty.LogWitaj,
WysylkaDoWyswietlacza_Komunikaty.LogZaloguj,
WysylkaDoWyswietlacza_Komunikaty.PustaLinia,
WysylkaDoWyswietlacza_Komunikaty.LogNrOperatora);
string NrOperatora =
KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Kom_ZatwierdzoneF1);
//int NrOperatora_int = Convert.ToInt32(NrOperatora);
break;
// here goes next case etc
Here starts my problem - communication takes place only once and the
operation requires data on the terminal. Before the operator enters data
program ends. How to change the code / loop / add a timer to repeated
communication to achieve a certain status? More specifically, as in this
passage:
case 'B':
KomunikacjaSieciowa.WysylkaDoWyswietlaczaWagi_4linie(WysylkaDoWyswietlacza_Komunikaty.LogWitaj,
WysylkaDoWyswietlacza_Komunikaty.LogZaloguj,
WysylkaDoWyswietlacza_Komunikaty.PustaLinia,
WysylkaDoWyswietlacza_Komunikaty.LogNrOperatora);
string NrOperatora =
KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Kom_ZatwierdzoneF1);
repeat "string NrOperatora" depending on the returned data?
Where's the best place to make loop?? Maybe I should use thread??
No comments:
Post a Comment