2013-08-20 49 views
1

我正在編寫一個程序,其目標是使用TCP客戶端與權重終端進行通信。 我正在發送指定的消息(例如,檢查狀態),並根據我正在做另一個進程的回覆。 首先,一些代碼。 連接: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 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); 

重複「字符串NrOperatora」根據返回的數據?

哪裏是製作循環的最佳地點?也許我應該使用線程?

+3

'KomunikacjaSieciowa.WysylkaDoWyswietlaczaWagi_4linie(WysylkaDoWyswietlacza_Komunikaty.LogWitaj,WysylkaDoWyswietlacza_Komunikaty.LogZaloguj,WysylkaDoWyswietlacza_Komunikaty.PustaLinia,WysylkaDoWyswietlacza_Komunikaty.LogNrOperatora);'** **哎呀+1 – I4V

+0

,你只是讓我很快樂。 – Behrooz

回答

0

我想用stream.BeginRead和讀取時完成是最好的方式,所以如果狀態不正常,你可以叫stream.BeginRead相同的方法,因此這將是一個循環中調用此自直到狀態是正常檢查狀態

+0

你能給我一個更詳細的例子嗎? – dzilupl