/// <summary>
        /// 接收数据回调方法
        /// </summary>
        /// <param name="ar">回调参数</param>
        private void OnReceive(IAsyncResult ar)
        {
            TCPEndPoint end = ar.AsyncState as TCPEndPoint;

            try
            {
                int real_recv = end.Socket.EndReceive(ar);
                end.MStream.Write(end.Buffer, 0, real_recv);  //写入消息缓冲区
                //尝试读取一条完整消息
                ZMessage msg;
                while (end.MStream.ReadMessage(out msg))
                {
                    if ((Msg)msg.head == Msg.Default)  //心跳包 跳过
                    {
                        foreach (KeyValuePair <int, int> p in _pulse_time)
                        {
                            if (p.Key == end.UID)
                            {
                                _pulse_time[p.Key] = _pulse; //重置
                                break;
                            }
                        }
                        continue;
                    }
                    //处理消息
                    if (TCPMessageReceived != null)
                    {
                        TCPMessageReceivedEventArgs args = new TCPMessageReceivedEventArgs();
                        args.Msg  = (Msg)msg.head;
                        args.Time = DateTime.Now;
                        args.End  = end;
                        args.Data = msg.content;
                        TCPMessageReceived.BeginInvoke(_server_id, args, null, null);  //激发事件,通知事件注册者处理消息
                    }
                }
                end.Socket.BeginReceive(end.Buffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceive), end);  //开始下一次数据接收
            }
            catch
            {
                if (TCPClientDisConnected != null)  //通知客户端断开
                {
                    TCPClientDisConnectedEventArgs args = new TCPClientDisConnectedEventArgs();
                    args.End  = end;
                    args.Time = DateTime.Now;
                    TCPClientDisConnected(_server_id, args);
                }
                int tmp;
                _pulse_time.TryRemove(end.UID, out tmp);
            }
        }
        /// <summary>
        /// 接收数据回调方法
        /// </summary>
        /// <param name="ar"></param>
        private void OnReceive(IAsyncResult ar)
        {
            TCPEndPoint end = ar.AsyncState as TCPEndPoint;

            try
            {
                int real_recv = end.Socket.EndReceive(ar);
                end.MStream.Write(end.Buffer, 0, real_recv); //写入消息缓冲区
                //尝试读取一条完整消息
                ZMessage msg;
                while (end.MStream.ReadMessage(out msg))
                {
                    //处理消息
                    if (TCPMessageReceived != null)
                    {
                        TCPMessageReceivedEventArgs args = new TCPMessageReceivedEventArgs();
                        args.Msg  = (Msg)msg.head;
                        args.Time = DateTime.Now;
                        args.End  = end;
                        args.Data = msg.content;
                        TCPMessageReceived.BeginInvoke(_client_id, args, null, null);  //激发事件,通知事件注册者处理消息
                    }
                }
                end.Socket.BeginReceive(end.Buffer, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceive), end);
            }
            catch
            {
                if (TCPClientDisConnected != null)  //通知客户端断开
                {
                    TCPClientDisConnectedEventArgs args = new TCPClientDisConnectedEventArgs();
                    args.End  = end;
                    args.Time = DateTime.Now;
                    TCPClientDisConnected(_client_id, args);
                }
            }
        }