示例#1
0
        /** 解密和解压缩数据包 **/
        public void Parse(CrypTea pCryp)
        {
            if (IsCryp())
            {
                pCryp.Decryption(m_pData, (ushort)(GetPacketSize() - SPacketHeader.PACKET_HEADER_SIZE));
            }

            //if (IsZip())
            //{
            //    m_pData.uncompress();
            //}
        }
示例#2
0
        public ClientSocket()
        {
            m_socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            m_queuePacket  = new Queue <byte[]>();

            NewPacket();

            byte[] aKey = new byte[16];
            aKey = System.Text.Encoding.Default.GetBytes("[/28!~&0sM1-)G&z");

            m_pCryp = new CrypTea(aKey);
        }
示例#3
0
        /** 生成完整的数据包: 加密 压缩 计算包头 **/
        public void Build(CrypTea pCryp)
        {
            m_pPacketHeader[0] = 0;
            m_pPacketHeader[1] = 0;
            m_pPacketHeader[2] = 0;
            m_pPacketHeader[3] = 0;
            m_pPacketHeader[4] = 0;
            m_pPacketHeader[5] = 0;

            SetDataSize();

            /// 进行压缩
            if (m_wCurWritePos >= 96)
            {
                // 当前有效数据
                byte[] pValidData = new byte[GetCurDataSize()];
                Array.Copy(m_pData, 0, pValidData, 0, pValidData.Length);
                // 压缩后的数据
                //byte[] pData = Compress.Compression(pValidData);
                byte[] pData;
                Compress.CompressData(pValidData, out pData);
                // 将压缩后的数据拷贝到数据数组中
                Array.Copy(pData, 0, m_pData, 0, pData.Length);
                // 重新设置写位置
                SetCurDataSize((ushort)pData.Length);
                // 设置整个包实际的长度
                SetPacketSize();
                SetZip(true);
            }
            else
            {
                SetZip(false);
            }
            /// 进行加密
            byte[] pKey = pCryp.GetKey();
            if (null == pKey)
            {
                return;
            }
            // 按8字节对齐
            uint wTemp = (uint)(8 - (GetCurDataSize() & 7)); //

            if (8 != wTemp)
            {
                WriteBytes(ref pKey, (uint)0, (uint)wTemp);
            }
            pCryp.Encryption(m_pData, GetDataSize());
            SetCryp(true);

            SetPacketSize();
            SetVerCode();
        }