Domanda

Qualcuno potrebbe aiutare e dirmi come utilizzare i buffer di protocollo. In realtà voglio scambiare dati attraverso le prese tra un programma in esecuzione su UNIX e anoother in esecuzione su Windows, al fine di eseguire studi di simulazione.

I programmi che utilizzano le prese per lo scambio di dati, sono scritte in C / C ++ e sarei felice se somneone mi potrebbe aiutare ad utilizzare i buffer di protocollo per lo scambio di dati in forma di:

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

Ho provato diversi modi, ma ancora i dati non vengono scambiati correttamente. Qualsiasi aiuto sarebbe molto apprezzato

Grazie per il vostro aiuto,

È stato utile?

Soluzione

Si inizia definendo il vostro messaggio in un file di Proto:

package foo;

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

(credo che il float e double in realtà sono diverse variabili ...)

Poi si compilarlo usando protoc e poi avete codice che implementa il buffer.

Per ulteriori informazioni consultare: http://code.google.com/apis /protocolbuffers/docs/cpptutorial.html

Altri suggerimenti

Come stai scrivendo i propri messaggi nella presa di corrente? Protobufs non è endian sensibile sé, ma che non protobufs definire un meccanismo di trasporto - protobuf definisce una mappatura tra un messaggio e la sua forma serializzato (che è una sequenza di (8-bit) byte) ed è tuo responsabilità per trasferire questa sequenza di byte all'host remoto.

Nel nostro caso, si definisce un semplice protocollo di trasporto; prima scriviamo la dimensione del messaggio come un intero a 32 bit (big endian), poi arriva il messaggio stesso. (Anche ricordare che i messaggi protobuf non sono auto-identificazione, il che significa che è necessario sapere quale messaggio che si sta inviando. Questo è in genere gestita da avere un messaggio involucro che contiene campi opzionali per tutti i messaggi che si desidera inviare. Vedere gli archivi del sito web protobuf e mailing list per maggiori informazioni su questa tecnica.)

sono entrambi macchine x86? In caso contrario, è necessario guardare per big endian e little endian differenze. La sua attenzione pagare anche la pena a struct imballaggio. Passando puntatore può essere problematico anche dovuto al fatto puntatore sono diverse dimensioni su piattaforme diverse. Tutto v'è troppo poca informazione nel tuo post per dire, con certezza, che cosa sta andando male ...

La risposta sta nel endianess dei dati che vengono trasmessi, questo è qualcosa che è necessario considerare con molta attenzione e controllare. Guardate qui per mostrare cosa può fare endianness e causare i dati per ottenere incasinato sia sul ricevitore e mittente. Non esiste una misura perfetta per trasferire dati senza intoppi, proprio perché i dati inviati da un sistema Unix garantisce i dati sulla scatola di finestre saranno nello stesso ordine in termini di struttura di memoria per i dati. Anche l'imbottitura della struttura sulla scatola unix sarà diverso all'imbottitura sulla scatola di finestre, si riduce a come vengono utilizzate le opzioni della riga di comando, pensare allineamento della struttura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top