urbadman 发表于 2022-11-1 22:06

C# 开发类似Putty的工具

由于putty 不支持 telnet 命令行提交用户名密码,
请问一下,有啥开源的控件。
需要涉及到 Terminal / Emulator ,nuget上找了下,除了收费的,就都是很老的。
度娘 确实不好找资料
找到一个 terminalControl 的控件,有些可能了,但太老了 使用不了

JuncoJet 发表于 2022-11-2 09:44

putty 支持记住用户名

urbadman 发表于 2022-11-2 10:29

JuncoJet 发表于 2022-11-2 09:44
putty 支持记住用户名

我是想实现自动登录 ,命令行调用完成 登录操作

JuncoJet 发表于 2022-11-2 12:13

urbadman 发表于 2022-11-2 10:29
我是想实现自动登录 ,命令行调用完成 登录操作

不是啥难事,SendKeys

zmolli775 发表于 2022-11-3 11:22

本帖最后由 zmolli775 于 2022-11-3 11:27 编辑

       public static void Run()
      {
            IPEndPoint swIp = new IPEndPoint(IPAddress.Parse(“IP地址”), 23);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            {
                ReceiveBufferSize = 4096, SendBufferSize = 4096, ReceiveTimeout = 5, SendTimeout = 5
            };
            try
            {         
                socket.Connect(swIp);         
            }
            catch
            {
                Console.WriteLine("Error:0x01");
                return;
            }
            Rx(socket); // 接收回显
         string retmsg = Tx(socket, "写入命令");// 发送命令
         if (retmsg.Contains("如果包含某字符串"))
            {
                // TODO
            }   
            socket.Close();
      }
      /// <summary>
      /// 读取数据
      /// </summary>
      public static string Rx(Socket s)
      {
            Thread.Sleep(wt);
            if (s.Connected)
            {
                try
                {
                  int len = s.Receive(buffer, 0, s.Available, SocketFlags.None);
                  string msg;

                  if (len > 0)
                  {
                        char[] array = Encoding.UTF8.GetString(buffer, 0, len).ToCharArray();
                        StringBuilder sb = new StringBuilder();
                        foreach (char c in array)
                        {
                            if (c == 65533 || c == '\u0001' || c == '\u0003' || c == '\u0018' || c == '\u001b' || c == '\u001f')
                            {
                              continue;
                            }
                            else
                            {
                              sb.Append(c);
                            }
                        }
                        msg = Convert.ToString(sb).Replace(" [1D", string.Empty);
                        Console.WriteLine(msg);
                        return msg;
                  }
                  else
                  {
                        return null;
                  }
                }
                catch
                {
                  return null;
                }
            }
            else
            {
                return null;
            }
      }
      /// <summary>
      /// 发送数据
      /// </summary>
      public static string Tx(Socket s, string msg = null)
      {
            byte[] bytes;
            if (string.IsNullOrEmpty(msg))
            {
                bytes = Encoding.UTF8.GetBytes($"\r");
            }
            else
            {
                bytes = Encoding.UTF8.GetBytes($"{msg}\r");
            }
            s.Send(bytes, SocketFlags.None);
            Thread.Sleep(wt);
            return Rx(s);
      }
      private static readonly int wt = 250;
      private static readonly byte[] buffer = new byte;
    }

urbadman 发表于 2023-1-4 08:42

zmolli775 发表于 2022-11-3 11:22
public static void Run()
      {
            IPEndPoint swIp = new IPEndPoint(IPAddress.P ...

谢谢,不过这代码不适合,需要响应 Terminal ,比如tab补全等

挑灯看剑 发表于 2023-1-7 10:00

PUTTY开始的时候用 现在都改用XSHELL了
页: [1]
查看完整版本: C# 开发类似Putty的工具