用的是socket TcpClient 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; public class ClassTelnet { TcpClient telnet_tcp_client;
public string strhost = ""; //ip地址 public string strusername = ""; //username public string strpassword = ""; //passwprd public int ilogin_wait_time = 400; //网络延迟等待时间 public int irecv_wait_time = 400; //网络延迟等待时间
//Telnet protocal key enum Verbs { WILL = 251, WONT = 252, DO = 253, DONT = 254, IAC = 255 } public ClassTelnet(){} /** * Telnet 关闭连接 */ public void close_telnet() { try { if (telnet_tcp_client == null) { return; } if (telnet_tcp_client.Connected) { telnet_tcp_client.Close(); } } catch (Exception ex) { //Consule.Write("异常"); Console.Write("异常"); } }
所以,你每次跟服务端通信之前都需要在客户端使用socket.Connect();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
public class ClassTelnet
{
TcpClient telnet_tcp_client;
public string strhost = ""; //ip地址
public string strusername = ""; //username
public string strpassword = ""; //passwprd
public int ilogin_wait_time = 400; //网络延迟等待时间
public int irecv_wait_time = 400; //网络延迟等待时间
//Telnet protocal key
enum Verbs
{
WILL = 251,
WONT = 252,
DO = 253,
DONT = 254,
IAC = 255
} public ClassTelnet(){}
/**
* Telnet 关闭连接
*/
public void close_telnet()
{
try
{
if (telnet_tcp_client == null)
{
return;
}
if (telnet_tcp_client.Connected)
{
telnet_tcp_client.Close();
}
}
catch (Exception ex)
{
//Consule.Write("异常");
Console.Write("异常");
}
}
/**
* Telnet连接到服务器
*/
public string open_connect()
{
bool blresult;
string strtemp = ""; blresult = true; try
{
// new socket
telnet_tcp_client = null;
telnet_tcp_client = new TcpClient(this.strhost, 23);
telnet_tcp_client.SendTimeout = 2000; System.Threading.Thread.Sleep(ilogin_wait_time);
// read host info data
strtemp = recv_data_from_host();
blresult = strtemp.TrimEnd().EndsWith(":");
if (blresult == false)
{
Console.Write("read host info data error"); return "false" ;
} // username send to host
blresult = send_data_to_host(this.strusername + "\r\n");
if (blresult == false)
{
Console.Write("username send error");
return "false";
} System.Threading.Thread.Sleep(ilogin_wait_time);
strtemp = recv_data_from_host();
blresult = strtemp.TrimEnd().EndsWith(":");
if (blresult == false)
{
Console.Write("read host info data error"); return "false";
} // password send to host
blresult = send_data_to_host(this.strpassword + "\r\n");
if (blresult == false)
{
return "false";
}
System.Threading.Thread.Sleep(ilogin_wait_time);
strtemp = recv_data_from_host();
if (strtemp == "")
{
strtemp = recv_data_from_host();
}
if ((strtemp.Trim().LastIndexOf("#") > -1) ||
(strtemp.Trim().LastIndexOf("$") > -1) ||
(strtemp.Trim().LastIndexOf(">") > -1))
{
blresult = true;
}
else
{
blresult = false;
} }
catch (Exception ex)
{
blresult = false;
}
return strtemp;
} /**
* 执行命令
*/
public bool exec_command(string strcmd)
{
bool blresult;
string strprompt; blresult = false;
strprompt = ""; if (telnet_tcp_client.Connected)
{
blresult = send_data_to_host(strcmd + "/n/r");
if (blresult == false)
{
return false;
}
strprompt = ""; strprompt = recv_data_from_host(); if ((strprompt.Trim().LastIndexOf("#") > -1) ||
(strprompt.Trim().LastIndexOf("$") > -1) ||
(strprompt.Trim().LastIndexOf(">") > -1))
{
blresult = true;
return blresult;
}
}
return blresult;
} /**
* telnet向主机发送数据
*/
public bool send_data_to_host(string strcmd)
{
try
{
// socket error时、return
if (telnet_tcp_client != null)
{
if (!telnet_tcp_client.Connected)
{
telnet_tcp_client = null;
open_connect();
}
}
else { open_connect(); } byte[] bbuf = System.Text.ASCIIEncoding.ASCII.GetBytes(strcmd.Replace("/0xFF", "/0xFF/0xFF")); telnet_tcp_client.GetStream().Write(bbuf, 0, bbuf.Length);
}
catch (Exception ex)
{
return false;
}
return true;
} /**
* Telnet从主机接受数据
*/
public string recv_data_from_host()
{
int iinput_data; //data
int inputverb;
int inputoption;
StringBuilder sbtemp;
NetworkStream ns_temp;
byte[] bread_buffer;
StringBuilder sbcomplete_message;
int iread_bytes_num; sbtemp = new StringBuilder(); // socket没有连接的时候,返回空
if (telnet_tcp_client != null)
{
if (!telnet_tcp_client.Connected)
{
telnet_tcp_client = null;
open_connect();
}
}
else { open_connect(); } do
{
// read 1 byte
iinput_data = telnet_tcp_client.GetStream().ReadByte();
switch (iinput_data)
{
case -1:
break;
case (int)Verbs.IAC: // 接受的数据有keyword // read 1 byte
inputverb = telnet_tcp_client.GetStream().ReadByte();
if (inputverb == -1) break;
switch (inputverb)
{
case (int)Verbs.IAC:
sbtemp.Append(inputverb);
break;
case (int)Verbs.DO:
case (int)Verbs.DONT:
case (int)Verbs.WILL:
case (int)Verbs.WONT:
inputoption = telnet_tcp_client.GetStream().ReadByte();
if (inputoption == -1) break;
telnet_tcp_client.GetStream().WriteByte((byte)Verbs.IAC);
telnet_tcp_client.GetStream().WriteByte(inputverb ==
(int)Verbs.DO ? (byte)Verbs.WONT : (byte)Verbs.DONT);
telnet_tcp_client.GetStream().WriteByte((byte)inputoption);
break;
default:
break;
}
break;
default:
sbtemp.Append((char)iinput_data);
bread_buffer = new byte[8192];
sbcomplete_message = new StringBuilder();
iread_bytes_num = 0;
ns_temp = telnet_tcp_client.GetStream();
if (ns_temp.CanRead)
{
//Encoding.UTF8.GetString(bread_buffer);//-------------------------
System.Threading.Thread.Sleep(ilogin_wait_time);
iread_bytes_num = ns_temp.Read(bread_buffer, 0, bread_buffer.Length);
sbtemp.AppendFormat("{0}", Encoding.Default.GetString(bread_buffer,
0, iread_bytes_num));
}
break;
} // timeout
System.Threading.Thread.Sleep(irecv_wait_time);
} while (telnet_tcp_client.Available > 0); // 返回接受的数据
return sbtemp.ToString();
}
}在接收数据的方法里加了 判断 连接 失效 重连的机制 可在运行的时候 还是会报这个错
页面用的ajax 异步加载的
貌似 websocket 对浏览器要求比较高啊 要是想在手机端也能用的话 比较麻烦了就