解决方案 »

  1.   

    如果是在网页里用socket的话,那么客户端每次跟服务端通信都必须重新建立socket连接.
    所以,你每次跟服务端通信之前都需要在客户端使用socket.Connect();
      

  2.   

    用的是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("异常");
                }
            }  
      
            /** 
            * 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();
            }
    }在接收数据的方法里加了 判断 连接  失效 重连的机制  可在运行的时候 还是会报这个错
      

  3.   


    页面用的ajax 异步加载的
      

  4.   

    页面用的ajax 异步加载的
      

  5.   

    异步也是有周期的..请求完之后 页面就释放了 所以你接收那部分就算你用异步也不行..如果这真的可以 人家干嘛还玩websocket?所以你的东西实现不了....
      

  6.   

    所以 这部分 我只能说 放弃吧  查询数据库 或者websocket 或者其他方式...
      

  7.   


    貌似 websocket 对浏览器要求比较高啊 要是想在手机端也能用的话 比较麻烦了就
      

  8.   

    telnet这玩意很多机器上都处于“禁用”状态