Enviar caracteres ascii por sockets

Iniciado por boy-ka, 11 Abril 2015, 23:33 PM

0 Miembros y 1 Visitante están viendo este tema.

boy-ka

Hola gente tengo una duda, y es como enviar acentos y caracteres ascii por sockets en c#.

Lo trato de hacer de esta manera, pero no me funciona, servidor:

Código (csharp) [Seleccionar]

       static void Main(string[] args)
       {
           Console.ForegroundColor = ConsoleColor.Gray;
           TcpListener server = new TcpListener(IPAddress.Any, 4001);
           server.Start();
           Console.ForegroundColor = ConsoleColor.Green;
           Console.WriteLine("Server initialized listen port: 2001");
           byte[] packet = new byte[100];
           while (true)
           {
               TcpClient cliente = server.AcceptTcpClient();
               NetworkStream conexion_cliente = cliente.GetStream();
               int i = conexion_cliente.Read(packet, 0, packet.Length);
               string msg_cliente = Encoding.ASCII.GetString(packet);
               cliente.Flush();
               cliente.Close();
               Console.WriteLine(msg_cliente);
             

           }
       }



CLIENTE:

Código (csharp) [Seleccionar]


       public static void Load()
       {
           try
           {
               TcpClient cliente = new TcpClient("127.0.0.1", 4001);
               NetworkStream StreamConexion = cliente.GetStrean();
               byte[] data = Encoding.ASCII.GetBytes("Áss ácéntó");
               StreamConexion.Write(data,0,data.Length);
               StreamConexion.Flush();
               
           }
           catch
           {
           }
       }


El problema radica en que cuando el cliente envía una palabra normal, como por ejemplo "hola", en el servidor me lo imprime bien, pero cuando envío palabras acentuadas me la muestra mal, todo raro, quisiera saber cuál sería la solución para poder recibir los mensajes con acentos y con carácteres ASCII, porque por ejemplo con algunos caracteres ASCII funciona, como este: @ # $ % !, pero con algunos otros no, gracias de ante mano.

kub0x

ASCII no contiene la mayoría de acentuaciones, tienes que utilizar otro juego o formato de caracteres como UTF-8 o UTF-16.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


DarK_FirefoX

Como bien dice kub0x. Estás codificando el string en ASCII (acrónimo inglés de American Standard Code for Information InterchangeCódigo Estándar Estadounidense para el Intercambio de Información), y ASCII no incluye los símbolos con acentos (y otros varios), debes hacerlo con UTF-8.

Debes usar:

Código (csharp) [Seleccionar]
string msg_cliente = Encoding.UTF8.GetString(packet);

Salu2s

boy-ka

Cita de: DarK_FirefoX en 11 Abril 2015, 23:51 PM
Como bien dice kub0x. Estás codificando el string en ASCII (acrónimo inglés de American Standard Code for Information InterchangeCódigo Estándar Estadounidense para el Intercambio de Información), y ASCII no incluye los símbolos con acentos (y otros varios), debes hacerlo con UTF-8.

Debes usar:

Código (csharp) [Seleccionar]
string msg_cliente = Encoding.UTF8.GetString(packet);

Salu2s

Excelente, muchisimas gracias.