Ustawienie parametrów sieci. Protokoły.

0

Witam. Napotykając na trudności w starciu z moim nieszczęsnym sterownikiem matrycy LED, postanowiłem pójść trochę w inną stronę programowania. Odstawiłem na chwile DLL'a z którego korzystałem i wziąłem się za protokoły...

Połączyłem się z kartą sieciową kontrolera, ale potrzebuję wysłać jej dane, tj. kod rozkazu.

   void Connect_Click(object sender, EventArgs e)
        {
            try
            {
                IPAddress ip = IPAddress.Parse("192.168.1.100");
                TcpClient polacz = new TcpClient(Convert.ToString(ip), 5200);
           
            if (polacz.Client.Connected)
                MessageBox.Show("Połączono z adresem" + ip);
            else
                MessageBox.Show("Nie połączono.");

                
               new Thread(new ThreadStart(dane)).Start(); // W tym miejscu wysyłam kod rozkazu?

            polacz.Close();
             }
            catch (SocketException se)
            {
                MessageBox.Show("Błąd : "+ se.Message);
            }
}
   void dane()
        { 
            byte[] dane_binarnie = new byte[19];

        dane_binarnie[0] = (byte) 0x3C;
        dane_binarnie[1] = (byte) 192;
        dane_binarnie[2] = (byte) 168;
        dane_binarnie[3] = (byte) 1;
        dane_binarnie[4] = (byte) 222;
        dane_binarnie[5] = (byte) 192;
        dane_binarnie[6] = (byte) 168;
        dane_binarnie[7] = (byte) 1;
        dane_binarnie[8] = (byte) 1;
        dane_binarnie[9] = (byte) 255;
        dane_binarnie[10] = (byte) 255;
        dane_binarnie[11] = (byte) 255;
        dane_binarnie[12] = (byte) 0;
        dane_binarnie[13] = (byte) 20;
        dane_binarnie[14] = (byte) 80;
        dane_binarnie[15] = (byte) 255;
        dane_binarnie[16] = (byte) 255;
        dane_binarnie[17] = (byte) 255;
        dane_binarnie[18] = (byte) 255; 
        }

Całość wygląda dobrze, ale nie działa. Proszę o poprawienie i ewentualne sugestie . Z góry dziękuje i pozdrawiam

1

MSDN twoim przyjacielem. :)
new Thread(new ThreadStart(dane)).Start(); // W tym miejscu wysyłam kod rozkazu? Nie.
http://msdn.microsoft.com/pl-pl/library/a9fyxz7d(v=vs.110).aspx

TcpClient przykład:
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient(v=vs.110).aspx

0

Kod poprawiony. Tym razem spróbuję chociażby zrestartować sterownik. Wg. specyfikacji kod rozkazu RESETU to 0x2D, a DANE ROZKAZU to 0x00.

                IPAddress ip = IPAddress.Parse("192.168.1.100");
                TcpClient polacz = new TcpClient(Convert.ToString(ip), 5200);

                Byte[] data = System.Text.Encoding.ASCII.GetBytes(0x2D, 0x00); 
                NetworkStream stream = polacz.GetStream();
                stream.Write(data, 0, data.Length); 

W miejscu 0x2D i 0x00 musze wysłać dwie wartości, ale otrzymuję błąd.

No overload for method 'GetBytes' takes 2 arguments

Komunikat rozumiem, ale nie wiem jak to zdefiniować...

0

Tak nie zadziała?

IPAddress ip = IPAddress.Parse("192.168.1.100");
TcpClient polacz = new TcpClient(Convert.ToString(ip), 5200);

Byte[] data = new byte[]{0x2D, 0x00};
NetworkStream stream = polacz.GetStream();
stream.Write(data, 0, data.Length);
0

Połączenie działa, ale w zmiennej "data" otrzymuje wartosc

System.Byte[]

. sprawdzam to następujący sposób textBox1.Text = Convert.ToString(data);

 i zaznaczam, ze restart dalej nie działa.
1

Nie, nie otrzymujesz takiej wartości zmiennej, tylko sobie konwertujesz obiekt tego typu na string, więc zwraca Ci nazwę typu.

Spróbuj raczej:

string text = Encoding.GetString(data);
1
byte[] dane_binarnie = new byte[19];
 
        dane_binarnie[0] = (byte) 0x3C;
        dane_binarnie[1] = (byte) 192;
        dane_binarnie[2] = (byte) 168;
        dane_binarnie[3] = (byte) 1;

ychhh..

byte[] dane_binarnie = new byte[] { 0x3C, 192, 168, 1, ...};
0

Rozwiązanie:

private wyslij_Click(object sender, EventArgs e)
        {
            IPAddress ip = IPAddress.Parse(192.168.1.100);
            TcpClient polacz = new TcpClient(Convert.ToString(ip), Convert.ToInt32(5200));
            NetworkStream stream = polacz.GetStream();
            if (stream.CanWrite)
            {  byte[] dane = new byte[4];

                dane [0] = (byte)0xff; // przykładowe dane
                dane [1] = (byte)0xff;
                dane [2] = (byte)0xff;
                dane [3] = (byte)0xff;
                stream.Write(dane, 0, dane.Length);
              
                MessageBox.Show("Wyslano");
            }
            else
            {
                MessageBox.Show("Nie mozna wyslac");
            }
            polacz.Close();
            
        }

Dziekuję za pomoc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1