验证socket能否连接

来源:互联网 发布:unity3d raycasthit2d 编辑:程序博客网 时间:2024/05/18 01:33
        //用于控制进程等待        private static ManualResetEvent socketReset = new ManualResetEvent(true);        //暂时使用的超时时间的设定 单位:秒        public static int overTimes = 2;        #region 判断socket状态        /// <summary>        /// 在超时时间内判断连接是否存在或通畅        /// </summary>        /// <param name="ip"></param>        /// <param name="port"></param>        /// <returns></returns>        public static bool IsConnect(string ip, int port)        {            //重置等待变量            socketReset.Reset();            //准备参数            bool connected = false;            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            IPAddress ipAddress = null;            IPAddress.TryParse(ip, out ipAddress);            //获取ipe            IPEndPoint iep = new IPEndPoint(ipAddress, port);            //尝试请求            socket.BeginConnect(ipAddress, port, new AsyncCallback(ConnCallback), socket);            //等待尝试请求            socketReset.WaitOne(overTimes * 1000);            connected = socket.Connected;            socket.Close();            return connected;        }        /// <summary>        /// Connect的回调函数           /// </summary>        /// <param name="result"></param>        private static void ConnCallback(IAsyncResult result)        {            try            {                Socket socketAsync = result.AsyncState as Socket;                if (socketAsync != null)                {                    //开始连接                    socketAsync.EndConnect(result);                    //连接成功,提前结束等待                    socketReset.Set();                }            }            catch (Exception ex)            {                //连接失败            }        }        #endregion

0 0
原创粉丝点击