예제 #1
0
        void HandleDataReceived(IAsyncResult ar)
        {
            var sock = ar.AsyncState as Socket;

            try
            {
                int bytesRead = sock.EndReceive(ar);
                if (bytesRead > 0)
                {
                    m_BufferReceivedSize += bytesRead;
                    if (m_BufferReceivedSize == m_Buffer.Length)
                    {
                        //解Aes Key IV
                        byte[] bytes;
                        if (!Rsa.Decrypt(m_RsaKey, m_Buffer, out bytes))
                        {
                            LogHelper.Error("Rsa Decrypt Error {0}", m_RsaKey);
                            sock.Close();
                            return;
                        }
                        if (!AesKeyIV.Check(bytes))
                        {
                            LogHelper.Error("Aes Key IV len error {0}", bytes.Length);
                            sock.Close();
                        }
                        else
                        {
                            var kiv = AesKeyIV.GenKeyIV();
                            AesKeyIV.SendAesKeyIVAes(sock, bytes, kiv);
                            m_Handler.HandleAcceptConnected(sock, kiv);
                        }
                    }
                    else
                    {
                        sock.BeginReceive(m_Buffer, m_BufferReceivedSize, m_Buffer.Length - m_BufferReceivedSize, SocketFlags.None, new AsyncCallback(HandleHeadReceived), sock);
                    }
                }
                else
                {
                    LogHelper.Error(SocketError.NoData.ToString());
                    sock.Close();
                }
            }
            catch (Exception e)
            {
                LogHelper.Exception(e);
                sock.Close();
            }
        }
예제 #2
0
        void HandleDataReceived(IAsyncResult ar)
        {
            var args = ar.AsyncState as NetClient.SocketArgs;

            try
            {
                int bytesRead = args.m_Socket.EndReceive(ar);
                if (bytesRead > 0)
                {
                    m_BufferReceivedSize += bytesRead;
                    if (m_BufferReceivedSize == m_Buffer.Length)
                    {
                        //解Aes Key IV
                        var decrypt = new AesDecryptor(m_KeyIV, m_KeyIV);
                        var bytes   = decrypt.Decrypt(m_Buffer);
                        if (!AesKeyIV.Check(bytes))
                        {
                            LogHelper.Error("Aes Key IV len error {0}", bytes.Length);
                            m_HandleClose?.Invoke(args);
                        }
                        else
                        {
                            m_HandleConnected?.Invoke(args, bytes);
                        }
                    }
                    else
                    {
                        args.m_Socket.BeginReceive(m_Buffer, m_BufferReceivedSize, m_Buffer.Length - m_BufferReceivedSize, SocketFlags.None, new AsyncCallback(HandleHeadReceived), args);
                    }
                }
                else
                {
                    LogHelper.Error(SocketError.NoData.ToString());
                    m_HandleClose?.Invoke(args);
                }
            }
            catch (Exception e)
            {
                LogHelper.Exception(e);
                m_HandleClose?.Invoke(args);
            }
        }