void ReadAsync(IAsyncResult result)
        {
            try
            {
                int readCount = stream.EndRead(result);
                if (readCount == 0)
                {
                    throw new Exception("读取到0字节");
                }
                NetMsgData receive = NetUtilcs.UnpackNetMsg(buffer);
                this.mRecvingMsgQueue.Enqueue(receive);
                //string msg = Encoding.UTF8.GetString(buffer, 0, readCount);
                Debug.Log("接收到消息 -> " + receive.ProtoId);

                lock (stream) //再次开启读取
                {
                    Array.Clear(buffer, 0, buffer.Length);
                    stream.BeginRead(buffer, 0, BuffseSize, ReadAsync, null);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        //发送消息到服务器
        public void SendMsg(ProtoDefine protoType, IExtensible protoData)
        {
            //byte[] temp = Encoding.UTF8.GetBytes(msg);
            NetMsgData msg = NetMsgData.GetMsgData(protoType, protoData);

            byte[] data = NetUtilcs.PackNetMsg(msg);
            stream.Write(data, 0, data.Length);
            Debug.Log("发送消息 -> " + msg.ProtoId + data);
        }
        void Send()
        {
            while (this.mIsRunning)
            {
                if (mSendingMsgQueue.Count == 0)
                {
                    lock (this.mSendLock)
                    {
                        while (this.mSendWaitingMsgQueue.Count == 0)
                        {
                            Monitor.Wait(this.mSendLock);
                        }
                        Queue <NetMsgData> temp = this.mSendingMsgQueue;
                        this.mSendingMsgQueue     = this.mSendWaitingMsgQueue;
                        this.mSendWaitingMsgQueue = temp;
                    }
                }
                else
                {
                    try
                    {
                        NetMsgData msg  = this.mSendingMsgQueue.Dequeue();
                        byte[]     data = NetUtilcs.PackNetMsg(msg);
                        mSocket.Send(data, data.Length, SocketFlags.None);
                        Debug.Log("client send: " + (ProtoDefine)msg.ProtoId);
                    }
                    catch (System.Exception e)
                    {
                        Debug.LogError(e.Message);
                        Disconnect();
                    }
                }
            }

            this.mSendingMsgQueue.Clear();
            this.mSendWaitingMsgQueue.Clear();
        }
        void Receive()
        {
            byte[] data = new byte[1024];
            while (this.mIsRunning)
            {
                try
                {
                    //将收到的数据取出来
                    int        len     = mSocket.Receive(data);
                    NetMsgData receive = NetUtilcs.UnpackNetMsg(data);
                    Debug.Log("client receive : " + (ProtoDefine)receive.ProtoId);

                    lock (this.mRecvLock)
                    {
                        this.mRecvWaitingMsgQueue.Enqueue(receive);
                    }
                }
                catch (System.Exception e)
                {
                    Debug.LogError(e.Message);
                    Disconnect();
                }
            }
        }