最近要做一个Telnet客户端程序,要实现的功能,就是,
Telnet到一个远端的Win2003服务器上面,执行一下Netstat命令,拿回结果。开发的环境是C#,Framework V1.1,Winxp Pro想通过下面的两种中的一种来实现,1。调用Telnet。exe命令来执行。
   现在用了Process类,调用TelNet.exe,
Process p = new Process();
p.StartInfo.FileName = "telnet.exe";
//p.StartInfo.Arguments = "/c ping 10.6.168.1";
//p.StartInfo.Arguments = "/c telnet 10.6.168.1";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;   可是,怎么都收不了telnet以后,应该送过来的登陆信息,换成其他命令,比如,ping等等,都可以拿到输出信息。2。利用TcpClient来实现,
   现在出现的问题就是,服务器端,传来了这样的消息,"255 253 37 255 251 1 255 251 3 255 253 39 255 253 31 255 253 0 255 251 " 换成其他字符集的话,就是乱码。
这个时候,给服务器送出消息,不过多久,连接就因为超时端掉了。  应该怎么做呢?或者说,我给服务器发送了错误的信息?
  我发送了自己的用户名和密码,都flush出去,就是没有结果。有人可以指点一下吗?

解决方案 »

  1.   

    LZ是不是想实现完程桌面控制啊
    我觉得直接用 tcp/ip 编程会比间接用telnet方便
      

  2.   

    其实,也不是桌面控制,就是做一个console程序,做上面做说的处理,取到Netstat的结果。我也知道可能tcpclient应该好一些,但是现在出现了问题,希望大家指点。
      

  3.   

    或者有人有现成的例子,或者相关的URL参考吗?
    谢谢。
      

  4.   

    http://www.codeproject.com/internet/telnetview.asp
      

  5.   

    我觉得很难直接做到。因为Telnet Login之后,就不是Console的控制台了。但是因为Telnet可以输出log,你可以用程序读处理之后的.log文件。我以前做过一个简易的监控程序,监控远程机器的内存情况。先做一个autoTelnet.bat文件:
    start telnet.exe -f C:\213.log
    cscript //nologo tel.vbs然后利用VbScript文件tel.vbs自动登录:
    set sh=WScript.CreateObject("WScript.Shell")
    WScript.Sleep 1000
    sh.SendKeys "open 192.168.213.213"
    WScript.Sleep 1000
    sh.SendKeys "{ENTER}"
    WScript.Sleep 1000
    sh.SendKeys "kjn{ENTER}"
    WScript.Sleep 1000
    sh.SendKeys "kjn2005{ENTER}"
    WScript.Sleep 1000
    sh.SendKeys "top -s 300 -U root{ENTER}"最后程序去处理这个LOG文件,就可以了。
      

  6.   

    http://www.codeproject.com/internet/telnetview.asp
    这个例子是C++的。fangxinggood(JustACoder) 的提议的确是一个办法。谢谢。但是看到网上有人说,直接在Process里面调用Telnet.exe可以做到,但是我今天测试过,一样不可以,得不到输入,输出的信息。谁做到过吗?请给个提示。有没有使用TcpClient的例子呢?做一个Telnet的服务器,客户端,等于只是用了TCP协议。不一定用Telnet协议。希望大家都多发言。
      

  7.   

    新进展,程序如下。
    用了TcpClient,
    就是只能收到用户名或者密码不对的错误。#region 4 Send UserIDdata = new Byte[256];
    data = System.Text.Encoding.Default.GetBytes("user\r"); // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length);Console.WriteLine("Sent: {0}", "nexs");responseData = "";
    data = new Byte[256];
    bytes = stream.Read(data, 0, data.Length);
    for (int i = 0; i < bytes; i++)
    {
    responseData += System.Convert.ToChar (data[i]).ToString ();
    }//responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine("Received: {0}", responseData); #endregion#region 5 Send PassWddata = new Byte[256];
    data = System.Text.Encoding.Default.GetBytes("user\r"); // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length);Console.WriteLine("Sent: {0}", "nexs");responseData = "";
    data = new Byte[256];
    bytes = stream.Read(data, 0, data.Length);
    for (int i = 0; i < bytes; i++)
    {
    responseData += System.Convert.ToChar (data[i]).ToString ();
    }//responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine("Received: {0}", responseData); #endregion