zoukankan      html  css  js  c++  java
  • 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;

                    }

                }

              

            }

        

        }

  • 相关阅读:
    金蝶软件常用基础SQL数据表
    改变cxgrid行字体颜色
    C#默认修饰符
    const和static
    怎么写动态游标
    Report Machine支持导出PDF
    C1TrueDBGrid注册码
    免费在线思维导图工具Mindv V1.1.0发布
    支持中文输入的免费的Silverlight Richtextbox
    云计算浅谈之一:云计算介绍
  • 原文地址:https://www.cnblogs.com/xihong2014/p/4216646.html
Copyright © 2011-2022 走看看