SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Quity_Ibias en Domingo 27 de Enero de 2008, 16:14

Título: Problemas Con Sockets Udp.
Publicado por: Quity_Ibias en Domingo 27 de Enero de 2008, 16:14
Hola!

Estoy programando una aplicación que utiliza sockets udp. Necesito enviar una estructura que yo misma he declarado.

struct Datos_Componentes_Conexion
{

int Estado;
int Puerto_Origen;
int Puerto_Remoto;
int Direccion_Origen;
int Direccion_Remota;
int RST;
Componentes_TCB *TCB;
bool Pasivo;
int Puerto_Modificar;
int Puerto_Inicio_Conexion;


};

Para enviar necesito utilizar la funcion sendto, pero está función envía un char*, asi que no se como hacer para enviarlo. ¿Hay alguna forma de convertir esa estructura en un char *?. ¿Podría declarar un Datos_Componenes_Conexion *dc y enviar dicho puntero?

Muchas graciasss Si alguien me pudiese mostrar un ejemplo se lo agradecería.
Título: Re: Problemas Con Sockets Udp.
Publicado por: Eternal Idol en Domingo 27 de Enero de 2008, 16:31
Tenes que enviar bytes y a sendto pasarle como parametro un puntero a tu estructura. En este caso solo tenes un inconveniente TCB (Componentes_TCB *TCB;) es un puntero y por lo tanto no tiene ningun sentido en el programa que reciba esta estructura ... o cambias la estructura o envias otra cosa.

Ejemplo orientativo:
Código: Text
  1.  
  2. Datos_Componenes_Conexion dc;
  3. sendto(s, &dc, sizeof(dc), 0, &toaddr, sizeof(toaddr));
  4.  
  5.  
Título: Re: Problemas Con Sockets Udp.
Publicado por: Quity_Ibias en Domingo 27 de Enero de 2008, 17:09
Gracias por contestar!!

Realizo lo que usted me dijo:

Datos_Componenes_Conexion dc;
sendto(s, &dc, sizeof(dc), 0, &toaddr, sizeof(toaddr));

Pero me da un error
Error   8   error C2664: 'recvfrom' : cannot convert parameter 2 from 'Datos_Componentes_Conexion *__w64 ' to 'char *'   

Y he estado mirando y si lo declaro de la siguiente forma no me daria el error:

Datos_Componentes_Conexion *dc;

sendto(s, (char*)dc, sizeof(dc), 0, &toaddr, sizeof(toaddr));

Sería correcto, o me daría problemas al recibirlos?, tambien los recibo con Datos_Componentes_conexion *dc.

Gracias, de todas formas.
Título: Re: Problemas Con Sockets Udp.
Publicado por: Eternal Idol en Domingo 27 de Enero de 2008, 17:22
Es lo mismo (aunque en tu caso tenes que usar memoria dinamica), en ambos casos necesitas el casting [(char *)] excepto que siendo dc un puntero cuando hagas sizeof te devolvera 4, hace sizeof del nombre de la estructura o de *dc.