Socket实现telnet交互通信

本文档展示了如何使用C#编程语言通过Socket实现telnet客户端,包括连接远程服务器、处理TCP数据流、解析telnet指令、以及响应控制选项等关键步骤。示例代码详细解释了实现过程。
摘要由CSDN通过智能技术生成

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 =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值