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(); } }
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); } }