void ParseRecvBuff(byte[] data)
        {
            int readLength = 0;

            if (null == mLastPacketStream)
            {
                if (null != mLastNotEnoughSizeBuffer)
                {
                    List <byte> tmpBuff = new List <byte>();
                    tmpBuff.AddRange(mLastNotEnoughSizeBuffer);
                    tmpBuff.AddRange(data);
                    data = tmpBuff.ToArray();
                    mLastNotEnoughSizeBuffer = null;
                }
                if (data.Length < sizeof(Int32) + sizeof(Byte))
                {
#if DEBUG_OUTPUT
                    NGUI2DRootPanel.Inst.AddDebugText("收到的网络数据包长度小于4字节:" + data.Length.ToString());
#else
                    Debug.Log("收到的网络数据包长度小于4字节, 等待后续处理!");
#endif
                    mLastNotEnoughSizeBuffer = data;
                    return;
                }
                int  headerLen  = sizeof(Int32) + sizeof(Byte);
                int  dataLength = data.Length - headerLen;
                Byte version    = 0;
                StreamUtils.BitConvert(data, out version);
                StreamUtils.BitConvert(data, 1, out mLastPacketLength);
                mLastPacketStream = new MemoryStream();
                readLength        = Math.Min(dataLength, mLastPacketLength);
                mLastPacketStream.Write(data, headerLen, readLength);
                mLastPacketLength -= readLength;
                readLength        += headerLen;
#if DEBUG_OUTPUT
                string hits  = "";
                Int32  msgID = 0;
                if (data.Length > 8)
                {
                    if (data[4] == 0)
                    {
                        List <byte> buff1 = new List <byte>();
                        buff1.AddRange(new byte[] { data[5], data[6], data[7], data[8] });
                        msgID = StreamUtils.BitConvert(buff1.ToArray(), out msgID);
                    }
                }
                string msgHints = "";
                if (msgID <= 0)
                {
                    msgHints = string.Format("接收网络包[无法解析ID]剩余拆分长度[{0}]]", data.Length);
                }
                else
                {
                    msgHints = string.Format("接收网络包[{0}:{1}]", msgID, ((接收消息类型)msgID).ToString());
                }
                if (mLastPacketLength == 0)
                {
                    hits = string.Format("<font size=\"18\" color=\"0000ff\" effect=\"o,1,1,00ff00\">{0}完成,大小[{1}]</font>",
                                         msgHints, mLastPacketStream.Length);
                }
                else
                {
                    hits = string.Format("<font size=\"18\" color=\"00ff00\" effect=\"o,1,1,ff0000\">{0},已接[{1}],剩余[{2}]</font>",
                                         msgHints, mLastPacketStream.Length, mLastPacketLength);
                }
                NGUI2DRootPanel.Inst.AddDebugText(hits);
#endif
            }
            else
            {
                readLength = Math.Min(data.Length, mLastPacketLength);
                mLastPacketStream.Write(data, 0, readLength);
                mLastPacketLength -= readLength;
#if DEBUG_OUTPUT
                string hits  = "";
                Int32  msgID = 0;
                if (data[0] == 0)
                {
                    byte[]      tmpBuff = mLastPacketStream.GetBuffer();
                    List <byte> buff1   = new List <byte>();
                    buff1.AddRange(new byte[] { tmpBuff[1], tmpBuff[2], tmpBuff[3], tmpBuff[4] });
                    msgID = StreamUtils.BitConvert(buff1.ToArray(), out msgID);
                }
                if (mLastPacketLength == 0)
                {
                    hits = string.Format("<font size=\"18\" color=\"0000ff\" effect=\"o,1,1,00ff00\">接收网络包[{0}:{1}]完成,大小[{2}]</font>",
                                         msgID, ((接收消息类型)msgID).ToString(), mLastPacketStream.Length);
                }
                else
                {
                    hits = string.Format("<font size=\"18\" color=\"00ff00\" effect=\"o,1,1,ff0000\">接收网络包[{0}:{1}],已接[{2}],剩余[{3}]</font>",
                                         msgID, ((接收消息类型)msgID).ToString(), mLastPacketStream.Length, mLastPacketLength);
                }
                NGUI2DRootPanel.Inst.AddDebugText(hits);
#endif
            }
            if (mLastPacketLength < 0)
            {
#if DEBUG_OUTPUT
                NGUI2DRootPanel.Inst.AddDebugText("OnTcpIPClientReceived哪里出问题了:" + mLastPacketLength.ToString());
#else
                Debug.LogWarning("OnTcpIPClientReceived哪里出问题了!!!");
#endif
                return;
            }
            if (mLastPacketLength == 0)
            {
                Packet.CreateS2CPacket(mLastPacketStream);
#if NETFX_CORE && UNITY_METRO && !UNITY_EDITOR
                mLastPacketStream.Dispose();
#else
                mLastPacketStream.Close();
#endif
                mLastPacketStream = null;
                mLastPacketLength = 0;
            }
            if (data.Length > readLength)
            {
                // data没读完,继续处理
                byte[] buff = new byte[data.Length - readLength];
                //data.CopyTo(buff, readLength);
                Array.Copy(data, readLength, buff, 0, data.Length - readLength);
#if DEBUG_OUTPUT
                string hits = "";
                Int32  id   = 0;
                if (buff.Length > 8)
                {
                    List <byte> buff1 = new List <byte>();
                    buff1.AddRange(new byte[] { buff[5], buff[6], buff[7], buff[8] });
                    id = StreamUtils.BitConvert(buff1.ToArray(), out id);
                }
                if (id > 0)
                {
                    hits = string.Format("<font size=\"18\" color=\"0099ff\" effect=\"o,1,1,ff5500\">拆包消息[{0}:{1}]剩余拆分长度[{2}]</font>",
                                         id, ((接收消息类型)id).ToString(), data.Length - readLength - sizeof(Int32));
                }
                else
                {
                    hits = string.Format("<font size=\"18\" color=\"00ffff\" effect=\"o,1,1,ff0000\">拆包消息[无法解析ID]剩余拆分长度[{0}]]</font>",
                                         data.Length - readLength - sizeof(Int32));
                }
                NGUI2DRootPanel.Inst.AddDebugText(hits);
#endif
                ParseRecvBuff(buff);
            }
            //if (mLastPacketLength > 0)
            //{
            //    // data读完了,不是一个完整的包,等下次继续
            //    return;
            //}
        }