elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [RESUELTO] Condiciones en C# [Aplicacion de consola]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [RESUELTO] Condiciones en C# [Aplicacion de consola]  (Leído 2,870 veces)
laut3n

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[RESUELTO] Condiciones en C# [Aplicacion de consola]
« en: 24 Febrero 2015, 23:09 pm »

Buenas , como andan ?

Soy nuevo en esto de las aplicaciones de consola en C# , programe con forms bastante tiempo y me acostumbre a ello , y ahora empezar con las aplicaciones de consola es todo un problema Jajajajja.

Les explico mi problema : Tengo un Chat echo con sockets , al momento de apretar enter para enviar el mensaje con un string obtengo dicho mensaje y me fijo si el primer index  
  • es equivalente a / (Es un sistema de comandos) estableciendo la variable "Comando" en true o en false , bueno , aca esta el verdadero problema : Me detecta perfectamente la barra pero cuando envio los mensajes sin la barra se envia uno de cada dos.

El codigo del socket esta bien echo , funciona perfectamente sin este sistema para comprobar la barra.

Imagen :



Codigo :

Parte del main :

Código
  1. while (true)
  2.            {
  3.                MandarMensaje();          
  4.            }



El void :

Código
  1. static void MandarMensaje()
  2.        {
  3.            string texto = Console.ReadLine();
  4.            if (texto[0] == '/')
  5.            {
  6.                Comando = true;
  7.            }
  8.            else
  9.            {
  10.                Comando = false;
  11.            }
  12.  
  13.            if (Comando == false)
  14.            {
  15.                byte[] sdata = Encoding.Default.GetBytes("<" + name + "> " + Console.ReadLine());
  16.                acc.Send(sdata, 0, sdata.Length, 0);
  17.                Console.WriteLine("-"); //Espaciador
  18.            }
  19.            else
  20.            {
  21.                Console.WriteLine("Comando !");
  22.            }
  23.        }

Bueno , espero que me puedan ayudar , Saludos!


« Última modificación: 25 Febrero 2015, 16:39 pm por laut3n » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: [Ayuda] Condiciones en C# [Aplicacion de consola]
« Respuesta #1 en: 25 Febrero 2015, 11:43 am »

aca esta el verdadero problema : Me detecta perfectamente la barra pero cuando envio los mensajes sin la barra se envia uno de cada dos.

Código
  1. static void MandarMensaje()
  2.        {
  3.            string texto = Console.ReadLine();
  4.            if (texto[0] == '/')
  5.            {
  6.                Comando = true;
  7.            }
  8.            else
  9.            {
  10.                Comando = false;
  11.            }
  12.  
  13.            if (Comando == false)
  14.            {
  15.                byte[] sdata = Encoding.Default.GetBytes("<" + name + "> " + Console.ReadLine());
  16.                acc.Send(sdata, 0, sdata.Length, 0);
  17.                Console.WriteLine("-"); //Espaciador
  18.            }
  19.            else
  20.            {
  21.                Console.WriteLine("Comando !");
  22.            }
  23.        }


Fíjate que estás leyendo la entrada de la consola DOS veces cuanda la barra "/" no se detecta, es decir, cuando 'comando' es 'False', primero almacenas el input en la variable 'text', pero esa variable no la usas para nada ya que vuelves a leer el input del usuario una seguna vez, por lo tanto el primer mensaje nunca se llega a enviar.

Si no he entendido mal el problema entonces eso es a lo que te refieres, ¿no?, en ese caso cambia el segundo 'Console.ReadLine' por la variable 'texto'.

De todas formas te sugiero hacer más modificaciones, así:

VB.Net
Código
  1.    Public Sub SendMessage()
  2.  
  3.        Dim text As String = Console.ReadLine()
  4.  
  5.        If String.IsNullOrEmpty(text) Then
  6.            Exit Sub
  7.  
  8.        Else
  9.            Dim command As Boolean =
  10.                text.TrimStart({" "c, ControlChars.NullChar}).
  11.                     StartsWith("/"c, StringComparison.OrdinalIgnoreCase)
  12.  
  13.            Select Case command
  14.  
  15.                Case True
  16.                    Console.WriteLine("Comando !")
  17.  
  18.                Case Else
  19.                    Dim sdata As Byte() = Encoding.Default.GetBytes(String.Format("<{0}> {1}", name, text))
  20.                    acc.Send(sdata, 0, sdata.Length, 0)
  21.                    Console.WriteLine("-")
  22.  
  23.            End Select
  24.  
  25.        End If
  26.  
  27.    End Sub

Traducción a C#:
Código
  1. static void SendMessage()
  2. {
  3. string text = Console.ReadLine();
  4.  
  5. if (string.IsNullOrEmpty(text)) {
  6. return;
  7.  
  8. } else {
  9. bool command = text.TrimStart({' ', ControlChars.NullChar}).StartsWith('/', StringComparison.OrdinalIgnoreCase);
  10.  
  11. switch (command) {
  12.  
  13. case true:
  14. Console.WriteLine("Comando !");
  15. break;
  16.  
  17. default:
  18. byte[] sdata = Encoding.Default.GetBytes(string.Format("<{0}> {1}", name, text));
  19. acc.Send(sdata, 0, sdata.Length, 0);
  20. Console.WriteLine("-");
  21. break;
  22. }
  23. }
  24. }

Saludos


« Última modificación: 25 Febrero 2015, 11:48 am por Eleкtro » En línea

laut3n

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [Ayuda] Condiciones en C# [Aplicacion de consola]
« Respuesta #2 en: 25 Febrero 2015, 16:39 pm »

Muchisimas gracias Elektro!

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines