Forum général.cherche-logiciel buffer

Posté par  .
Étiquettes : aucune
0
13
juil.
2006
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  . Évalué à 3.

    man send :
    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  . Évalué à 4.

      Je rajouterai que, bien qu'on puisse transmettre les données de façon "opaque" en comptant sur le fait qu'en face le gros paquet d'octets rentrera pile dans les cases de la structure, ça n'est valable que quand on est sur la même architecture des deux cotés.
      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  . Évalué à 1.

        En effet mon client est sur un x86 32 bits et mon serveur se situe sur un powerPC 32 bits et je suivrai bien tes conseils pour l'implementation.Mais pour l'instant au niveau serveur je dispose des modules noyaux qui permetetent de stocker des règles de routage et ces règles sont envoyés à travers un char device (je precise qu'une règle est representé par une structure de données). Mon API d'envoie/suppression des règles est linké avec mon serveur.Et voila que j'arrive à envoyer et à supprimer des règles mais quant je consulte l'endroit (/proc/net... )ou doivent se stocker les règles je ne trouve rien.

        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.