• socket测试远程地址能否连接并为连接设置超时


     public   class TestConnect
        {
            string hostIp = "";
            int port = 3314;
            public string recMsg = "";
            Socket socketC = null;
            private readonly ManualResetEvent TimeoutObject = new ManualResetEvent(false);
           public TestConnect(string hostIp, int port)
           {
    
               this.hostIp = hostIp;
               this.port = port;
           }
           public bool connect()
           {
               ///创建终结点(EndPoint)
               IPAddress ip = IPAddress.Parse(hostIp);//把ip地址字符串转换为IPAddress类型的实例
               IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例
               ///创建socket
               socketC = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字
               try
               {
                   
                 
    
                   return Connect(ipe,3000);
    
               }
    
               catch (SocketException ex)
               {
    
                   socketC.Close();
                   socketC = null;
                
                   return false;
               }
    
           }
           /// <summary>
    
           /// Socket连接请求
    
           /// </summary>
    
           /// <param name="remoteEndPoint">网络端点</param>
    
           /// <param name="timeoutMSec">超时时间</param>
    
           public bool Connect(IPEndPoint remoteEndPoint, int timeoutMSec)
           {
    
               TimeoutObject.Reset();
    
               socketC = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
               socketC.BeginConnect(remoteEndPoint, CallBackMethod, socketC);
    
               //阻塞当前线程
    
               if (TimeoutObject.WaitOne(timeoutMSec, false))
               {
                  
    
                   return true;
    
               }
    
               else
               {
    
                   return false;
    
               }
    
           }
    
           //--异步回调方法
    
           private void CallBackMethod(IAsyncResult asyncresult)
           {
    
               //使阻塞的线程继续
               Socket socket = asyncresult.AsyncState as Socket;
    
               if (socket.Connected)
                {
                    socket.EndConnect(asyncresult);
                   
                }
    
               TimeoutObject.Set();
    
           }
           public void testOnline(string msg)
           {
                  socketC.Send(Encoding.GetEncoding("gb2312").GetBytes(msg));
    
          try
    
          {
              //创建一个通信线程 
                    ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
                    Thread thr = new Thread(pts);
                    thr.IsBackground = true;
                    //启动线程
                    thr.Start(socketC);
          }
    
          catch
    
          { throw ;}
    
        }
    
      
        
       /// <summary>
            /// 接收客户端发来的信息 
            /// </summary>
            /// <param name="socketClientPara">客户端套接字对象</param>
            private void ServerRecMsg(object socketClientPara)
            {
                Socket socketServer = socketClientPara as Socket;
                byte[] arrServerRecMsg = new byte[100];
                int len;
                while ((len = socketServer.Receive(arrServerRecMsg)) != 0)
                {
    
                    //将机器接受到的字节数组转换为人可以读懂的字符串
                    recMsg = Encoding.Default.GetString(arrServerRecMsg, 0, len);
    
    
                    if (recMsg == "online")
                    {
                        break;
                    }
                }
               
            }
    
         
        }
  • 相关阅读:
    beagle ubuntu
    screen usage
    centos install nginx¢os 添加网易源
    心情舒畅,升级到u10.04了
    nginx 运行,检测
    联通宽带测速
    virtualenv usage
    linux 终端下utf8 和gbk相互转换
    [梦]2005725
    git install on centos
  • 原文地址:https://www.cnblogs.com/bile/p/3607213.html
Copyright © 2020-2023  润新知