1

我正在编写一个程序,其目标是使用 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 打开后,我建立连接并检查状态

字符串 odp = KomunikacjaSieciowa.OdczytDanychZWagi(OdczytZWagi.Kom_RejestrStatusu); 字符状态 = 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”?

制作循环的最佳地点在哪里?也许我应该使用线程?

4

1 回答 1

0

我认为stream.BeginRead在读取完成时使用和检查状态是最好的方法,所以如果状态不正常,你可以调用stream.BeginRead相同的方法,所以它将是一个循环调用这里 self 直到状态正常

于 2013-08-20T22:13:05.597 回答