Frage

Könnte jemand bitte helfen und mir sagen, wie Protokoll-Puffer zu verwenden. Eigentlich mag ich Daten über Sockets zwischen einem Programm läuft auf Unix auszutauschen und anoother läuft auf Windows, um Simulationsstudien zu laufen.

Die Programme, die Sockets verwenden, um Daten auszutauschen, sind in C / C ++ geschrieben und ich würde mich freuen, wenn somneone mir helfen könnte Protokoll-Puffer zu verwenden, um Daten in Form auszutauschen:

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

Ich habe versucht, mehrere Möglichkeiten, aber immer noch Daten werden nicht korrekt ausgetauscht. Jede Hilfe wäre sehr geschätzt

Danke für Ihre Hilfe,

War es hilfreich?

Lösung

Sie beginnen, indem Sie Ihre Nachricht in einer Proto-Datei definieren:

package foo;

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

(Ich denke, den Schwimmer und Doppel sind tatsächlich verschiedene Variablen ...)

Dann kompilieren Sie es protoc verwenden und dann haben Sie Code Umsetzung Ihrer Puffer.

Weitere Informationen finden Sie unter: http://code.google.com/apis /protocolbuffers/docs/cpptutorial.html

Andere Tipps

Wie schreiben Sie Ihre Nachrichten an die Steckdose? Protobufs nicht endian Empfindliches selbst, aber auch nicht protobufs einen Transportmechanismus definieren - protobuf definiert eine Abbildung zwischen einer Nachricht und deren serialisierte Form (das ist eine Folge von (8-Bit) Bytes), und es ist Ihre Verantwortung, diese Folge von Bytes auf den Remote-Host zu übertragen.

In unserem Fall definieren wir ein sehr einfaches Transportprotokoll; erstes schreiben wir die Nachrichtengröße als eine 32-Bit-Ganzzahl (big endian), dann wird die Meldung selbst kommt. (Denken Sie auch daran, dass protobuf Meldungen sind nicht selbstidentifiziere, was bedeutet, dass Sie wissen müssen, welche Nachricht Sie senden. Dieser ist in der Regel verwaltet, indem eine Wrapper Nachricht enthält optionale Felder für alle Nachrichten möchten Sie senden. Siehe die protobuf Website und Mailinglisten-Archive für weitere Informationen über diese Technik.)

Sind beide Maschinen x86? Ansonsten müssen Sie für Big-Endian und Little-Endian-Unterschiede beobachten. Es ist auch wert Aufmerksamkeit Verpackung auf struct. Passing-Pointer kann aufgrund der Tatsache, Zeiger problematisch sein, sind unterschiedliche Größen auf unterschiedlichen Plattformen. Alles in viel zu wenig Informationen in Ihrem Beitrag zu sagen, denn sicher sind, was schief läuft ...

Die Antwort liegt in der Endianess der Daten übertragen werden, ist dies etwas, das Sie sehr sorgfältig betrachten müssen und überprüfen. hier zu zeigen, was endianness können Daten tun und verursachen sowohl auf dem Empfänger durcheinander zu erhalten und Absender. in Bezug auf der Speicherstruktur für die Daten gibt es keine solche perfekten Maßen für die Datenübertragung reibungslos, nur weil Daten von einem Unix-Rechner gesendet garantieren die Daten auf dem Windows-Rechner in der gleichen Reihenfolge sein werden. Auch die Polsterung der Struktur auf dem Unix-Rechner wird auf der Windows-Box an die Polsterung anders sein, es läuft darauf hinaus, wie die Befehlszeilenschalter verwendet werden, denkt Strukturausrichtung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top