Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通信中的TCP客户机循环_C#_Multithreading - Fatal编程技术网

C# 通信中的TCP客户机循环

C# 通信中的TCP客户机循环,c#,multithreading,C#,Multithreading,我正在编写一个程序,目标是使用TCP客户端与称重终端进行通信。 我正在发送指定的消息(例如,检查状态),并根据回复进行其他处理。 首先,一些代码。 连接: public static void PolaczZWaga(string IP, int port) { IP = IP.Replace(" ", ""); KlientTCP = new TcpClient(); KlientTCP.Connect(IPAddress.Parse(I

我正在编写一个程序,目标是使用TCP客户端与称重终端进行通信。 我正在发送指定的消息(例如,检查状态),并根据回复进行其他处理。 首先,一些代码。 连接:

public static void PolaczZWaga(string IP, int port)
    {
        IP = IP.Replace(" ", "");
        KlientTCP = new TcpClient();
        KlientTCP.Connect(IPAddress.Parse(IP), port);
    }
发送消息(如检查状态)

打开Form1后,我建立连接并检查状态

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;
    }
字符串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);
是否根据返回的数据重复“字符串NROPERORA”


哪里是做线圈最好的地方??也许我应该用线

我认为使用
stream.BeginRead
并在读取完成时检查状态是最好的方法,因此,如果状态不正常,您可以调用
stream.BeginRead
,以相同的方法调用
stream.BeginRead

KomunikacjaSieciowa.WysylkaDoWyswietlaczaWagi\u 4linie,直到状态正常,这将是一个循环调用self(WysylkaDoWyswietlacza_Komunikaty.LogWitaj,WysylkaDoWyswietlacza_Komunikaty.LogZaloguj,WysylkaDoWyswietlacza_Komunikaty.PustaLinia,WysylkaDoWyswietlacza_Komunikaty.lognOperatora)
Argh+1,你刚刚让我开心了一天。你能给我一个更详细的例子吗?