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); char ステータス = 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