SDL_net enviar un entero

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

SDL_net enviar un entero

Notapor drinor » Lun Feb 22, 2010 7:13 pm

Hola buenas a todos, mi problema es el siguiente:

El ejemplo que tengo de envio de datos usando la estructura UDPpacket es el siguiente:

Código: Seleccionar todo
UDPsocket sd;
IPaddress srvadd;
UDPpacket *p;printf("Fill the buffer\n>");

...

scanf("%s", (char *)p->data);

p->len = strlen((char *)p->data) + 1;
SDLNet_UDP_Send(sd, -1, p); /* This sets the p->channel */


En este ejemplo lo que enviamos son cadenas de texto.

¿Es posible enviar tipos de datos enteros (int), o hay que hacer uso de las funciones sprintf, atoi ... para convertir el entero a cadena y viceversa?

Mucha gracias.
No molestar, programando ... XD
drinor
 
Mensajes: 11
Registrado: Mar Sep 15, 2009 10:50 pm

Notapor Juan Carlos » Lun Feb 22, 2010 9:54 pm

En teoria es posible enviar un entero, pero no es recomendable.

Un entero es representado como una serie de bits, agrupados en paquetes de 8 bits llamados bytes. Algunas maquinas interpretan la serie de bytes leyendo de izquierda a derecha mientras que otras computadoras lo hacen al revez. (1)

Esto plantea un grave problema, pues si envias un numero, la maquina que recibe el mensaje puede interpretarlo como otro.
Una solucion simple seria enviar el numero pasado a texto, y en la maquina que recibe el mensaje reintepretarlo a numero.

Saludos

(1) Esta diferenciacion entre maquinas se conoce como little endian y big endian. Puedes buscar una definicion mucho mas precisa de la que yo esboce en la wikipedia.
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor lacabra25 » Mié Mar 03, 2010 4:50 pm

Como te han dicho, el enviar un entero supone un problema por en que sentido leera los bytes del entero la maquina que los reciva y como lo hace la que lo envia.

Entre las opciones esta la de pasar el numero a texto, no lo recomiendo pues tendrias un byte por cada cifra del numero. Otra opcion es que en lugar de enviar un entero lo que envies sea una cadena de caracteres cuyos bytes sean los bytes del entero de forma que antes de enviarlo tendras que con un char y una operacion a nivel de bytes and obtener 8 bits del entero, desplazar el entero 8 bits, el char enviarlo o concatenarlo en una cadena de caracteres para enviarlos todos los bytes juntos, y asi obtener cada byte del entero. Esa cadena de bytes antes de enviarla se convierte a una cadena de tipo void, para no enviar chars sino datos simplemente, sin criterio alguno de si es texto, numeros o que es (de hay que al llamar a la funcion strlen delante de p->data este (char *), por como strlen recive una cadena de caracteres). Al recivir el paquete UDP, teniendo todos los bytes del entero tendras que en un entero inicializado a cero ir realizando la operacion a nivel de bits or e ir desplazando 8 bits para volver a tener el entero.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron