Exemplo n.º 1
0
        /// <summary>
        /// 找到包头标志后,对数据进行处理
        /// </summary>
        /// <param name="nAlreadyRecCount">接收的数据长度</param>
        /// <param name="nDataPointer">第几个字节开始为包头位置</param>
        private void FindPackHead(int nAlreadyRecCount, int nDataPointer)
        {
            // 找到一个数据报头信息
            // 网络包长度小于包头时不是一个完整的包
            if (nAlreadyRecCount - nDataPointer < PacketHeadSize)
            {
                return;
            }

            PackHead m_PackHead = new PackHead();

            SetPackHead(nDataPointer, ref m_PackHead);

            // 判断获得的数据除去表头 是否大于数据长度
            if (nAlreadyRecCount - nDataPointer - PacketHeadSize < m_PackHead.DataLength)
            {
                return;
            }

            //完整的包数据
            byte[] m_ComData = new byte[PacketHeadSize + m_PackHead.DataLength];
            Array.Copy(m_TmpData, nDataPointer, m_ComData, 0, PacketHeadSize + m_PackHead.DataLength);

            PackData pd = new PackData();

            pd.m_Index    = m_lstPackData.Count;
            pd.m_Head     = m_PackHead;
            pd.m_ByteData = m_ComData.ToList();

            lock (m_lock)
            {
                nNetPos += PacketHeadSize + pd.m_Head.DataLength;
                m_lstPackData.Add(pd);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 设置包头
        /// </summary>
        private void SetPackHead(int nDataPointer, ref PackHead m_PackHead)
        {
            m_PackHead.Reset();
            m_PackHead.m_Signature[0] = m_TmpData[nDataPointer];
            m_PackHead.m_Signature[1] = m_TmpData[nDataPointer + 1];
            m_PackHead.m_Signature[2] = m_TmpData[nDataPointer + 2];
            m_PackHead.m_Signature[3] = m_TmpData[nDataPointer + 3];
            m_PackHead.m_Command[0]   = m_TmpData[nDataPointer + 4];
            m_PackHead.m_Command[1]   = m_TmpData[nDataPointer + 5];
            m_PackHead.m_Command[2]   = m_TmpData[nDataPointer + 6];
            m_PackHead.m_Command[3]   = m_TmpData[nDataPointer + 7];
            m_PackHead.m_Length[0]    = m_TmpData[nDataPointer + 8];
            m_PackHead.m_Length[1]    = m_TmpData[nDataPointer + 9];
            m_PackHead.m_Length[2]    = m_TmpData[nDataPointer + 10];
            m_PackHead.m_Length[3]    = m_TmpData[nDataPointer + 11];

            m_PackHead.DataLength  = BitConverter.ToInt32(m_PackHead.m_Length, 0);
            m_PackHead.DataCommand = BitConverter.ToInt32(m_PackHead.m_Command, 0);
        }