通过Telnet连接到Serial-> Ethernet转换器,得到奇怪的响应(无论我发送什么)

时间:2019-06-06 21:32:40

标签: c# sockets encoding tcp telnet

我正在尝试与具有串行COM端口的设备进行通信(使用RS232协议),该设备已连接到将连接转换为以太网的转换器盒。

我已成功连接到转换器盒(具有其自己的IP),并且已通过使用PuTTY通过telnet发送命令来与设备成功通信,该设备已用我已经处理过的各种数据对其进行了响应能够解析。

我已经通过创建一个新的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 :(得分:0)

没关系了

开个玩笑!这是我的工作:我在底部的“ tcpStream.Read”行之前添加了“ System.Threading.Thread.Sleep(“ 1000”),现在它输出了我需要的数据。设备在第一个输出垃圾行(可能是握手,不确定),这就是将其存储到“消息”并返回之前的全部内容(没有足够的时间阅读,然后转到下一行代码)