Question

Quelqu'un pourrait-il aider s'il vous plaît et me dire comment utiliser des tampons de protocole. En fait, je veux échanger des données via des prises entre un programme en cours d'exécution sur unix et anoother fonctionnant sous Windows afin d'exécuter des études de simulation.

Les programmes qui utilisent des prises pour échanger des données, sont écrites en C / C ++ et je serais heureux si somneone pourrait me aider à utiliser des tampons de protocole afin d'échanger des données sous forme de:

struct snd_data{
    char *var="temp";
    int var1=1;
    float var2;
    double var2;
}

J'ai essayé plusieurs façons, mais les données ne sont pas échangées correctement. Toute aide serait très apprécié

Merci pour votre aide,

Était-ce utile?

La solution

Vous commencez par définir votre message dans un fichier .proto:

package foo;

message snd_data {
  required string var= 1;
  required int32 var1 = 2;
  optional float var2 = 3;
  optional double var3 = 4;
}

(je suppose que le flotteur et le double sont en fait différentes variables ...)

Ensuite, vous le compiler en utilisant protoc et puis vous avez un code d'implémenter votre tampon.

Pour voir plus d'informations: http://code.google.com/apis /protocolbuffers/docs/cpptutorial.html

Autres conseils

Comment écrivez-vous vos messages à la prise? Protobufs est pas lui-même endian sensible, mais ne ni protobufs définir un mécanisme de transport - protobuf définit une correspondance entre un message et sa forme sérialisée (qui est une séquence de (8 bits) octets) et il est votre la responsabilité de transférer cette séquence d'octets à l'hôte distant.

Dans notre cas, nous définissons un protocole de transport très simple; D'abord, nous écrivons la taille du message comme un entier de 32 bits (grand-boutiste), puis vient le message lui-même. (Rappelez-vous aussi que les messages protobuf ne sont pas auto-identification, ce qui signifie que vous avez besoin de savoir quel message que vous envoyez. Ceci est généralement géré en ayant un message d'emballage contenant des champs facultatifs pour tous les messages que vous souhaitez envoyer. Voir les archives liste de site web et diffusion de protobuf pour plus d'informations sur cette technique.)

sont à la fois des machines x86? Sinon, vous devez regarder pour le grand endian et peu de différences endian. Il est aussi important en faisant attention à l'emballage struct. En passant le pointeur peut être problématique aussi en raison du pointeur de fait sont de tailles différentes sur différentes plates-formes. Dans l'information est beaucoup trop peu dans votre poste-à-dire, pour certains, ce qui se passe mal ...

La réponse se trouve dans la endianess des données transmises, c'est quelque chose que vous devez examiner très attentivement et vérifier. Regardez ici pour montrer ce que boutisme peut faire et causer des données pour obtenir foiré sur le récepteur et expéditeur. Il n'y a pas de mesure parfaite de transfert de données en douceur, juste parce que les données envoyées par une boîte unix garantit les données sur la boîte de fenêtres seront dans le même ordre en termes de structure de mémoire pour les données. De plus, le remplissage de la structure de la boîte unix sera différente de la matelassure sur la boîte de fenêtres, il se résume à la façon dont les commutateurs de ligne de commande sont utilisées, penser alignement de la structure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top