Подключение к Serial-> Ethernet конвертер через Telnet, получение странного ответа (независимо от того, что я отправляю) - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь установить связь с устройством с выходным последовательным COM-портом (по протоколу RS232), которое я подключил к блоку преобразователя, который преобразует соединение с Ethernet.

Я успешно подключился к конвертеру (который имеет собственный IP-адрес) и успешно установил связь с устройством, отправив ему команды через telnet с помощью PuTTY, на который оно ответило различными данными, которые я удалось разобрать.

Я установил соединение, создав новый TcpClient, и я могу отправлять строки на устройство, но каждый раз, когда я получаю ответ, всегда "?? \ u0003", который я исследовал и обнаружил, что \ uhhhh - это управляющий протокол Unicode. Это смущает меня, потому что я использовал кодировку ASCII для всего.

public string TcpConnect(string cmd)
{
        var client = new TcpClient();
        //cmd = "ping";

        Console.WriteLine("Connecting to server");

        client.Connect("169.254.20.40", 23);   //22 = ssh, 23 = telnet, 80 = http

        Console.WriteLine("CONNECTED SUCCESSFULLY");

        Stream tcpStream = client.GetStream();

        ASCIIEncoding A = new ASCIIEncoding();
        byte[] enable = A.GetBytes("enable" + Environment.NewLine);
        byte[] connect = A.GetBytes("connect line 1" + Environment.NewLine);
        byte[] ba = A.GetBytes(cmd);

        Console.WriteLine("Transmitting.....");

        tcpStream.Write(enable, 0, enable.Length);
        tcpStream.Write(connect, 0, connect.Length);
        tcpStream.Write(ba, 0, ba.Length);

        byte[] responseBytes = new byte[4096];

        int numBytesRead = tcpStream.Read(responseBytes, 0, responseBytes.Length);
        var message = A.GetString(responseBytes, 0, numBytesRead);


        Console.WriteLine("\nServer Closed.");

        return message;
}

Если бы я передавал "$ TEAA4B9 \ r \ n" в качестве сообщения, я бы ожидал что-то вроде "$ TEA, 086,040,031,000,3798", что далеко не соответствует тому, что я получаю (что ?? \ u0003)

1 Ответ

0 голосов
/ 07 июня 2019

фигу понял это

Шучу!Вот что я сделал: я добавил «System.Threading.Thread.Sleep (« 1000 ») перед строкой« tcpStream.Read »внизу, и теперь он выводит нужные мне данные. Устройство выводило мусор на первомстрока (возможно, рукопожатие, не уверен), и это все, что читалось до того, как оно было сохранено в «сообщении» и возвращено (недостаточно времени было потрачено на чтение, прежде чем оно перешло к следующей строке кода)

...