using System;
usingSystem.Collections.Generic;
using System.Text;
using System.Net;
usingSystem.Net.Sockets;
usingSystem.Collections;
using System.Threading;
namespace TelnetDemo
{
public class Telnet
{
#region telnet的数据定义
// 标志符,代表是一个TELNET 指令
readonly Char IAC = Convert.ToChar(255);
// 表示一方要求另一方使用,或者确认你希望另一方使用指定的选项。
readonly Char DO = Convert.ToChar(253);
// 表示一方要求另一方停止使用,或者确认你不再希望另一方使用指定的选项。
readonly Char DONT = Convert.ToChar(254);
// 表示希望开始使用或者确认所使用的是指定的选项。
readonly Char WILL = Convert.ToChar(251);
// 表示拒绝使用或者继续使用指定的选项。
readonly Char WONT = Convert.ToChar(252);
// 表示后面所跟的是对需要的选项的子谈判
readonly Char SB = Convert.ToChar(250);
// 子谈判参数的结束
readonly Char SE = Convert.ToChar(240);
const Char IS = '0';
const Char SEND = '1';
const Char INFO = '2';
const Char VAR = '0';
const Char VALUE = '1';
const Char ESC = '2';
const Char USERVAR = '3';
// 流
byte[] m_byBuff = new byte[100000];
// 收到的控制信息
private ArrayList m_ListOptions = new ArrayList();
// 存储准备发送的信息
string m_strResp;
// 一个Socket套接字
private Socket s;
#endregion
private IPEndPoint iep;
private string address;
private int port;
private int timeout;
private string strWorkingData =""; //保存从服务器端接收到的数据
private string strFullLog = "";
//====扩充 20110531================================================
private string strWorkingDataX = "";
//用于获取当前工作的数据内容
public string WorkingData
{
get { return strWorkingDataX; }
}
//===================================================================
public Telnet(string Address, int Port, intCommandTimeout)
{
address = Address;
port = Port;
timeout = CommandTimeout;
}
///
/// 启动socket进行telnet操作
///
public bool Connect()
{
IPAddress import = GetIP(address);
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
iep = new IPEndPoint(import, port);
try
{
// Try a blocking connection to the server
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
s.Connect(iep);
//异步回调
AsyncCallback recieveData = newAsyncCallback(OnRecievedData);
s.BeginReceive(m_byBuff, 0, m_byBuff.Length, SocketFlags.None,recieveData, s);
return true;
}
catch (Exception)
{
return false;
}
}
///
///当接收完成后,执行的方法(供委托使用)
///
///
private void OnRecievedData(IAsyncResult ar)
{
try
{
//从参数中获得给的socket对象
Socket sock = (Socket)ar.AsyncState;
//EndReceive方法为结束挂起的异步读取
int nBytesRec =