Problème socket

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 26 janv. 2004 à 20:25
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 26 janv. 2004 à 22:20
Voila, j'ai un problème d'envoi de structure. (Sous UNIX)
J'ai une structure comme cellle-ci.
struct SPDU_TYPE
{
char SI;
int LI;
struct PARAM_TYPE PARAM[NB_MAX_PARAM];
char* INFO;
};
struct PARAM_TYPE
{
char PI;
int LI;
char* PV;
};
J'ai deux programmes un client et un serveur, le client envoi une structure au serveur.
// Le client après avoir initialisé MonSPDU (de type struct SPDU_TYPE), jusqu'ici pas de
// problèmes
send(s, &MonSPDU , sizeof(MonSPDU), 0);

// Mais c'est a la reception que ca marche pas bien, voici ce que fait le serveur
recv(point_de_connexion , &MonSPDU, sizeof(struct SPDU_TYPE), 0);
printf("| SPDU reçu:\n");
printf("| - SI = %d\n", MonSPDU.SI);
printf("| - Champ d'informations: "%s"\n", MonSPDU.INFO);

En fait y'a un problème pour les chaînes de caractère que je n'arrive pas résoudre, voici ce que m'affiche le programme serveur

| SPDU reçu:
| - SI = 1
| - Champ d'informations: "ÿ³▒ÿÿÿòNÒuòëåUåSR¡øÿ»t
ëÿÐøÿuôX[ÉÃUåSè"

Merci pour vos réponses.
Bouba

3 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 janv. 2004 à 20:45
Salut,
Dans la structure il n'y a pas de tableau de char, mais juste un pointeur char*. Lors du transfert, tu n'envoies que le pointeur, mais pas la chaine.
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
26 janv. 2004 à 22:14
Merci, mais comment faire pour garder les structures comme elles sont et les recevoir correctement alors ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 janv. 2004 à 22:20
Salut,
La structure que tu recois est exactement identique a celle que tu envoies. Seulement, la chaine pointée par INFO est exterieure a la structure, et donc elle n'est pas envoyée.
Moi je mettrais un tableau de char directement dans la structure.

struct SPDU_TYPE
{
char SI;
int LI;
struct PARAM_TYPE PARAM[NB_MAX_PARAM];
char INFO[256];
};
0
Rejoignez-nous