Envoi structure dans une Socket

Résolu
meastalavista Messages postés 6 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 22 novembre 2009 - 8 déc. 2007 à 19:23
meastalavista Messages postés 6 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 22 novembre 2009 - 9 déc. 2007 à 18:17
Bonjour

je programme un client-serveur qui gére des réservations.
Au début je voulais me contenter d'envoyer des simples message,mais ca s'est avéré trop lourd.

on suppose que j'ai une structure de type:

structure reserv
{char num [5];
  char nom [10];
  char description [20];
};

Le probléme, c'est que je ne vois pas comment envoyer des structures par socket et comment les récupérer du coté serveur.

Si quelqu'un peut m'aider à avancer,ca serait sympa.
Au plaisir de vous lire

5 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
8 déc. 2007 à 19:56
Ben

struct struct_test {
    int toto;
};

int main () {
    struct struct_test test = {5};
    ...
    send(..., (char*)&test, sizeof(struct struct_test), ...);
    ...
}

Non ?

C++ (@++)<!--
3
lektrosonic Messages postés 145 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 21 février 2013
9 déc. 2007 à 15:53
salut,
tu definit un caractere en tant que separateur (exemple "~"), ou meme char seperator = 1  (caractere de code ascii 1 donc vraiment le caractere qui s utilise rarement)
dans ton buffer d envoi:
strcpy(buffer,reserv.num);
strcat(buffer,"~"));
strcat(buffer,reserv.nom);

strcat(buffer,"~"));
strcat(buffer,reserv.descritpion);

strcat(buffer,"~"));

a l'arrivee des donnees:
tu auras un truc qui ressemble a sa dans le buffer de reception:
"45~setphane~test~"

char* part[3];
int len=strlen(buffer_reception);
part[0]=&buffer_repection[0];
int j=0;
for(i=0;i<=len;i++)
{
    if(buffer_repection[i]=='~'
    {
        if(j==3)
        { 
             buffer_reception[i]=0;
             break;
       }
       else
       {
                j++;
              part[j]=&buffer_repection[i+1];
             buffer_reception[i]=0;
       }
    }
}

au final tu auras part[0]=="45" part[1]=="stephane" et part[2]=="test"

l3KTr0 Was HeRe
3
lektrosonic Messages postés 145 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 21 février 2013
9 déc. 2007 à 15:59
correction

if(j==2) au lien de if(j==3)

l3KTr0 Was HeRe
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 déc. 2007 à 16:59
Il envoit une structure contenant des tableaux de taille bien définie.
Si il utilise le même principe à la réception qu'à l'envois, c'est à dire:

recv(..., (char*)&test, sizeof(struct struct_test), ...);

Il devrait être capable de récupérer toute ses chaines correctement.

C++ (@++)<!--
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
meastalavista Messages postés 6 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 22 novembre 2009
9 déc. 2007 à 18:17
Bonjour,

Merci bcp pour vos reponses,ca m'a été de grande utilité.

tout marche nikel maintenant :d

Hasta La Vista Baby

L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai...
0
Rejoignez-nous