Bonjour,
je viens de faire un serveur et un client,j'arrive à communiquer en envoyant une chaine de caractère depuis le client et réçu par le serveur. Pour faire cela j'ai declaré un buffer de chaine de cartacère de chaque coté. Mais je ne sais pas comment declarer les buffers pour envoyer/recevoir une structure de données. Est -ce que les buffers doivent toujours être des tableaux char ?
# buffer
Posté par JereMe . Évalué à 3.
int send(int s, const void *msg, size_t len, int flags);
on envoit donc des messages de n'importe quoi.
Tu donnes : un pointeur vers le début des données et la taille des données
Exemple : message de int :
int* blabla = malloc(sizeof(int)*len);
send(socket, blabla, sizeof(int)*len) .
[^] # Re: buffer
Posté par daggett . Évalué à 4.
En effet un "int" sur un linux powerPC 32bits, n'est pas du tout la même chose qu'un "int" sur un linux X86-64 bits: nombre et ordre des octets sont différents. La structure ne sera du coup plus lisible telle-quelle.
Pour que ton implémentation soit correcte, il est donc conseillé de passer par un format "universel", par exemple en utilisant les fonctions XDR (man 3 xdr) que tu appeleras pour convertir les champs de ta structure en une suite d'octets dans un sens, puis refaire la conversion inverse dans l'autre.
Bien sur, tu peux débuter ton implémentation par l'envoi direct de ta structure (c'est plus simple à faire), mais il faudra un jour passer par le formatage XDR pour être propre.
[^] # Re: buffer
Posté par ham333 . Évalué à 1.
si je ne suis abstrait je peux encore expliciter.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.