Pregunta

Podría alguien por favor ayuda y dime cómo usar búferes de protocolo. En realidad, yo quiero intercambiar datos a través de sockets entre un programa en ejecución en UNIX y anoother se ejecuta en Windows con el fin de ejecutar los estudios de simulación.

Los programas que utilizan sockets para el intercambio de datos, están escritas en C / C ++ y yo estaría contento si somneone me podría ayudar a utilizar tampones de protocolo con el fin de intercambiar datos en forma de:

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

He intentado varias maneras, pero todavía no se intercambian los datos correctamente. Cualquier ayuda sería muy apreciada

Gracias por su ayuda,

¿Fue útil?

Solución

Se empieza por definir el mensaje en un archivo .proto:

package foo;

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

(supongo que el flotador y el doble en realidad son variables diferentes ...)

A continuación, compilarlo usando protoc y entonces usted tiene código de la implementación de su memoria intermedia.

Para más información ver: http://code.google.com/apis /protocolbuffers/docs/cpptutorial.html

Otros consejos

¿Cómo estás escribiendo sus mensajes a la toma? Protobufs no es en sí misma endian sensible, pero tampoco protobufs definir un mecanismo de transporte - protobuf define una asignación entre un mensaje y su forma serializada (que es una secuencia de (8-bit) bytes) y es su responsabilidad de transferir esta secuencia de bytes al host remoto.

En nuestro caso, se define un protocolo de transporte muy simple; primero escribimos el tamaño del mensaje como un entero de 32 bits (big endian), luego viene el mensaje en sí mismo. (También recuerde que los mensajes protobuf no son auto-identificación, lo que significa que lo que necesita saber cuál es el mensaje que está enviando. Normalmente, esto se logró por tener un Mensaje de envoltorio que contiene campos opcionales para todos los mensajes que desea enviar. Ver los archivos del sitio web protobuf y la lista de correo para obtener más información sobre esta técnica.)

Los dos somos máquinas x86? De lo contrario, usted necesita mirar para big endian y little endian diferencias. También vale la pena prestar atención a struct embalaje. Al pasar el puntero puede ser problemático también debido al hecho de puntero de diferentes tamaños en diferentes plataformas. Todo allí es demasiado poca información en su puesto decir, a ciencia cierta, lo que va mal ...

La respuesta está en la endianess de los datos que están siendo transmitidos, esto es algo que debe considerar con mucho cuidado y comprobar. Mira aquí para mostrar lo que puede hacer endianness y hacer que los datos llegar en mal estado en el receptor y en remitente. No hay tal medida perfecta de la transferencia de datos sin problemas, sólo porque los datos enviados desde una máquina Unix garantiza los datos en la caja de ventanas estarán en el mismo orden en términos de estructura de memoria para los datos. También el relleno de la estructura de la máquina Unix será diferente para el relleno en la caja de ventanas, que se reduce a cómo se utilizan los parámetros de línea de comandos, piense alineación de la estructura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top