IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Types portables


Sujet :

C++

  1. #1
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut Types portables
    Bonjour,

    Je souhaiterais pouvoir utilisé des types portables dans le but d'un transfert sur réseau. Je m'explique :
    Je voudrais creer un objet de type u16 qui permetterais de contenir un entier coder sur 2 octets et qui serais invariant en taille sur différentes machines et également invariant dans sa structure LITTLE / BIG ENDIAN.
    En gros je voudrais pouvoir envoyer une valeur et etre sur de pouvoir la récupérer à l'autre bout du réseau...

    Est ce que quelqu'un pourrais m'aider ?

    Merci
    J'aime pas les épinards... Mais alors pas du tout

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Il te faut choisir un codage (little/big endian) et créer un type qui va stocker une donnée dans ce format. Ca veut dire ne rien faire sur certaines platformes, et "chatouiller les bits de poids fort" sur d'autres...
    Mais pour le réseau y'a déjà des fonctions prévues pour (htons, ...)

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Tu devrais peut-etre te tourner vers des protocoles commes RPC ou CORBA qui ont ce genre de Pb. Ils utilisent XDR.

    Sinon transmet tes valeurs en ASCII

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    salut

    je sais que sous OminiOrb (va sur ma page web), dont tu peux telecharger les sources sur le site sourceForge

    tu as la classe CDRStream.hh et CDRStream.cpp qui traite
    ces problemes de reprensentation et d'architecture

    CDR = common data representation

    Le format xdr pour rpc : je connais que de nom, est-ce que c'est performant ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    La question se serait performant par rapport à quoi ?
    les deux principaux defaut à ma connaissance sont :
    les transmissions se font en Big endian ce qui impose donc des transtypages inutiles pour des transmisson de PC à PC par exemple...
    tout les format XDR sont alignes sur 4 octets (remplissage avec des zeros en cas de taille plus petite.

    sinon RPC est basé dessus. et comme il me semble bien que CORBA est basé sur RPC... je pense que ton CDR est une surcouche de XDR.

    Il est possible d'utiliser XDR sans RPC : le fichier de definition d'un structure XDR doit etre transcodé à l'aide de RPCGEN

    page Man (Sun) :
    Networking Services Library Functions xdr_create(3NSL)

    NAME
    xdr_create, xdr_destroy, xdrmem_create, xdrrec_create,
    xdrstdio_create - library routines for external data
    representation stream creation

    DESCRIPTION
    XDR library routines allow C programmers to describe arbi-
    trary data structures in a machine-independent fashion. Pro-
    tocols such as remote procedure calls (RPC) use these rou-
    tines to describe the format of the data.

    These routines deal with the creation of XDR streams. XDR
    streams have to be created before any data can be translated
    into XDR format.

    Routines
    See rpc(3NSL) for the definition of the XDR, CLIENT, and
    SVCXPRT data structures. Note that any buffers passed to the
    XDR routines must be properly aligned. It is suggested that
    malloc(3C) be used to allocate these buffers or that the
    programmer insure that the buffer address is divisible
    evenly by four.

  6. #6
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    si à chaque bout du réseau, les matos sont différents ou si simplement
    les logiciels sont différents ou les compilos différents, vaut mieux,
    comme le dit Gandalf, l'ASCII 7 bits (0-127), codif interprétée de la
    même manière par toutes les machines

    ainsi si vous devez transmettre un entier compris entre 0 et 99999,
    la valeur 123 sera codifiée 00123 en caractères ascii (toujours un
    nombre de caractères identiques)

  7. #7
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Ce qui m'ennuie dans la methode de passer tout ca en ascii c'est les performances... Je vais etre ammener à transmettre un tres grand nombre de données. Mais je pense ne pas avoir vraiment de choix...
    Je vais regarder de plus pres corba mais aparemment je suis obliger de passer par l'interface réseau de corba pour l'utiliser et j'avoue que ca m'ennuie un peu car j'aurais aimé etre le plus indépendant possible au niveau API.
    En tout cas fo que je trouve une solution car je sent qu'avec la démocratisation des processeurs 64 bits ca vas devenir le bordel
    J'aime pas les épinards... Mais alors pas du tout

Discussions similaires

  1. [Débutant] Créer une application portable de type "WindowsApplication"
    Par carjo dans le forum VB.NET
    Réponses: 8
    Dernier message: 27/08/2014, 15h00
  2. Application portable type "bande annonce", quel langage utiliser ?
    Par boubou_s dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 12/12/2006, 15h23
  3. type portable
    Par aymeric__ dans le forum C++
    Réponses: 25
    Dernier message: 21/02/2006, 08h56
  4. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59
  5. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo