TCP客户端-通信中的循环
本文关键字:循环 通信 客户端 TCP | 更新日期: 2023-09-27 18:28:27
我正在编写一个程序,目标是使用TCP客户端与称重终端进行通信。我正在发送指定的消息(例如,检查状态),并根据回复进行其他处理。首先,一些代码。连接:
public static void PolaczZWaga(string IP, int port)
{
IP = IP.Replace(" ", "");
KlientTCP = new TcpClient();
KlientTCP.Connect(IPAddress.Parse(IP), port);
}
发送消息(例如检查状态)
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;
}
Form1打开后,我进行连接并检查状态
string odp=KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Com_RejestStatusu);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
我的问题从这里开始——通信只发生一次,操作需要终端上的数据。操作员输入数据前,程序结束。如何更改代码/循环/在重复通信中添加计时器以达到特定状态?更具体地说,如本文所述:
case 'B':
KomunikacjaSieciowa.WysylkaDoWyswietlaczaWagi_4linie(WysylkaDoWyswietlacza_Komunikaty.LogWitaj, WysylkaDoWyswietlacza_Komunikaty.LogZaloguj, WysylkaDoWyswietlacza_Komunikaty.PustaLinia, WysylkaDoWyswietlacza_Komunikaty.LogNrOperatora);
string NrOperatora = KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Kom_ZatwierdzoneF1);
根据返回的数据重复"string NrOperatora"?
哪里是做循环的最佳地方??也许我应该用线??
我认为使用stream.BeginRead
并在读取完成时检查状态是最好的方法,因此如果状态不正常,您可以将stream.BeginRead
调用到相同的方法,所以它将是一个循环,在状态正常之前调用这里的self