/// <summary>
        ///     Envia dados de forma assíncrona
        /// </summary>
        /// <param name="packet"></param>
        public void AsyncSend(byte[] packet)
        {
            try
            {
                // cria o cabeçalho
                byte[] header = CreateHeader(packet);
                // combina o corpo do pacote com o cabeçalho
                byte[] finalPacket = BufferOperation.Combine(header, packet);

                asyncState.Socket.BeginSend(finalPacket, 0, finalPacket.Length, SocketFlags.None, AsyncSend, this);

                // espera a sinalização de que os dados foram transmitidos ou aguarda 1 segundo
                manualReset.WaitOne(1000);
            }
            catch (SocketException ex)
            {
                if (ex.SocketErrorCode != SocketError.Disconnecting &&
                    ex.SocketErrorCode != SocketError.NotConnected &&
                    ex.SocketErrorCode != SocketError.ConnectionReset &&
                    ex.SocketErrorCode != SocketError.ConnectionAborted &&
                    ex.SocketErrorCode != SocketError.Shutdown)
                {
                    Debug.WriteLine(ex);
                }
            }
        }
        /// <summary>
        ///     Envia dados
        /// </summary>
        /// <param name="packet"></param>
        public void Send(byte[] packet)
        {
            try
            {
                // cria o cabeçalho
                byte[] header = CreateHeader(packet);
                // combina o corpo do pacote com o cabeçalho
                byte[] finalPacket = BufferOperation.Combine(header, packet);

                asyncState.Socket.Send(finalPacket);
            }
            catch (SocketException ex)
            {
                if (ex.SocketErrorCode != SocketError.Disconnecting &&
                    ex.SocketErrorCode != SocketError.NotConnected &&
                    ex.SocketErrorCode != SocketError.ConnectionReset &&
                    ex.SocketErrorCode != SocketError.ConnectionAborted &&
                    ex.SocketErrorCode != SocketError.Shutdown)
                {
                    Debug.WriteLine(ex);
                }
            }
        }