| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
yarblek_de_logh

Registrado: 14 Abr 2004 Mensajes: 69
| Publicado: 12/12/2005 7:13 am | | | Título: Problema al enviar estructura mediante un socket |
| Hola a todos/as:
Tengo que hacer una aplicación cliente-servidor que corra en Windows el cliente y en Solaris el servidor. Tengo un problema a la hora de que Windows envíe una estructura de datos a Solaris. Los correspondientes códigos son estos:
| Código: |
// CÓDIGO DEL SERVIDOR (SOLARIS - UNIX)
[...] struct participante datos; struct mensaje mens; [...] printf ("Esperando datos\n"); // En primer lugar, pedimos los datos if ((recv (s,(void *)&datos,sizeof(struct participante),0))==-1) { printf ("ERROR\n"); exit (1); } printf ("Datos del usuario: %ld, %s, %s\n",datos.dni,datos.nick,datos.email);
wait_(0); strncpy (mens.panel,panel_actual,100); if ((send (s,(void *)&mens,sizeof(struct mensaje),0)) == -1) { printf ("Error al enviar el panel\n"); eliminar_recursos(); signal_(0); exit(1); }
printf ("PANEL ENVIADO\n"); eliminar_recursos(); exit(0);
|
| Código: |
// CÓDIGO DEL CLIENTE (WINDOWS)
[...] struct participante datos; struct mensaje mens; [...]
printf ("DNI --> "); scanf ("%ld",&datos.dni); fflush (stdin); printf ("Nick --> "); gets (datos.nick); fflush (stdin); printf ("E-mail --> "); gets (datos.email); printf ("Datos: %ld -- %s -- %s\n\n",datos.dni,datos.nick,datos.email); if ((send (socket_inf.sock, (void *)&datos,sizeof(struct participante),0)) == SOCKET_ERROR) { printf ("ERROR al enviar datos.\n\n"); exit (1); } if ((recv(socket_inf.sock, (void *)&mens, sizeof(struct mensaje), 0)) == SOCKET_ERROR) { printf ("ERROR al recibir el panel.\n\n"); WSACleanup(); exit(1); }
|
En ambos casos, las estructuras "mensaje" y "participante" son las siguientes:
| Código: |
struct participante { long dni; char nick[21]; char email[51]; };
struct mensaje { int tipo; char panel[101]; char coordenadas[3]; char puntuaciones[300]; char mensaje[100]; };
|
En los trozos de código vemos que primero Windows le envía a Unix datos del tipo "participante" y luego Unix le envía a Windows datos del tipo "mensaje".
Sin embargo, nos da problemas porque unas veces da error el envío y otras envía basura (la conexión no nos da ningún error, solo es el envío de mensajes).
¿A alguien se le ocurre cómo solucionarlo? Un saludo:
Yarblek de Logh
Pd: Las funciones wait_(int), signal_(int) y eliminar_recursos() son funciones personales. |
| | Volver arriba | |  | _Leo_
Registrado: 20 Oct 2005 Mensajes: 285 Ubicación: Buenos Aires, Argentina
| Publicado: 12/12/2005 5:21 pm | | | Título: |
| Si querés enviarme el código, lo puedo probar y ver que ocurre. _________________ _Leo_ drk.com.ar
clasdix.com.ar |
| | Volver arriba | |  | Tab3r
Registrado: 01 Feb 2006 Mensajes: 9 Ubicación: Madrid, España
| Publicado: 07/02/2006 5:04 am | | | Título: |
| ¿Haces las conversiones del tipo htons o ntohs?
Ese puede ser tu problema. Mira algun ejemplo en la red del uso de estas funciones. |
| | Volver arriba | |  | | holylance
Registrado: 03 Ene 2006 Mensajes: 114 Ubicación: Argentina
| Publicado: 07/02/2006 7:12 am | | | Título: |
| | como bien dijo la person que estaba antes que yo, no sera un problema de compatbilidad de como interpretan los datos las máquinas cuando los envias y recibis, no conviene ponerlos en un formato canónico o algo así? |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |