/// <summary>
        /// 断线处理 - *****
        /// </summary>
        /// <param name="state"></param>
        private void DisconnectProcessing(object state)
        {
            if (!this.Disposed)
            {
                bool bCallDisconnect = false;

                SocketEventArgs  pSocketEventArgs = null;
                ConnectionManage pConnection      = null;
                IAsyncResult     AsyncResult      = null;

                try
                {
                    if (state is SocketEventArgs)
                    {
                        //----- NT5 / Win2000!
                        pSocketEventArgs = (SocketEventArgs)state;
                        bCallDisconnect  = false;
                    }
                    else
                    {
                        //----- NT5 / WinXP and later!
                        AsyncResult      = (IAsyncResult)state;
                        pSocketEventArgs = (SocketEventArgs)AsyncResult.AsyncState;
                        bCallDisconnect  = true;
                    }

                    pConnection = (ConnectionManage)pSocketEventArgs.Connection;

                    if (pConnection.Active)
                    {
                        if (bCallDisconnect)
                        {
                            pConnection.CurrentSocket.EndDisconnect(AsyncResult);
                        }

                        lock (pConnection.ActiveLock)
                        {
                            pConnection.Active = false;
                            pConnection.CurrentSocket.Close();
                        }

                        this.SocketDisconnectEvent(pSocketEventArgs);
                    }

                    this.RemoveSocketConnection(pConnection);
                    this.StopConnections(ref pConnection);
                }
                catch (Exception ex)
                {
                    this.SocketExceptionEvent(pConnection, ex);
                }
            }
        }
        /// <summary>
        /// 断线方法 - *****
        /// </summary>
        /// <param name="pConnection"></param>
        /// <param name="DisconnectException"></param>
        internal void SocketDisconnect(ConnectionManage pConnection)
        {
            //判断对象有效
            if (!this.Disposed)
            {
                SocketEventArgs pSocketEventArgs = new SocketEventArgs(pConnection, false);

                if (pConnection.Active)
                {
                    try
                    {
                        //判断操作系统版本号
                        if ((Environment.OSVersion.Version.Major == 5) &&
                            (Environment.OSVersion.Version.Minor >= 1))
                        {
                            //--- NT5 / WinXP and later!
                            pConnection.CurrentSocket.BeginDisconnect(false, new AsyncCallback(DisconnectCallback), pSocketEventArgs);
                        }
                        else
                        {
                            //---- NT5 / Win2000!
                            ThreadPool.QueueUserWorkItem(new WaitCallback(DisconnectProcessing), pSocketEventArgs);
                        }//end Version if...else...
                    }
                    catch (Exception ex)
                    {
                        this.SocketExceptionEvent(pConnection, ex);
                    }
                }
                else
                {
                    this.RemoveSocketConnection(pConnection);
                    this.StopConnections(ref pConnection);
                }
            }//end if
        }
 /// <summary>
 /// 断线事件
 /// </summary>
 /// <param name="DisconnectedEvent"></param>
 internal void SocketDisconnectEvent(SocketEventArgs pDisconnectedEvent)
 {
     this._SocketService.OnDisconnected(pDisconnectedEvent);
 }
 public virtual void OnException(SocketEventArgs pEventArgs)
 {
 }
 public virtual void OnDisconnected(SocketEventArgs pEventArgs)
 {
 }