Pergunta

Poderia alguém por favor me ajude e me diga como usar buffers de protocolo. Na verdade eu quero trocar dados através de sockets entre um programa em execução em unix e anoother em execução no Windows para executar estudos de simulação.

Os programas que usam soquetes para trocar dados, são escritos em C / C ++ e eu ficaria feliz se somneone poderia me ajudar a usar buffers de protocolo, a fim de trocar dados na forma de:

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

Eu tentei várias maneiras, mas ainda assim os dados não são trocados corretamente. Qualquer ajuda seria muito apreciada

Obrigado por sua ajuda,

Foi útil?

Solução

Você começar por definir a sua mensagem em um arquivo .proto:

package foo;

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

(acho que o float e double são realmente diferentes variáveis ??...)

Depois de compilá-lo usando protoc e então você tem código de implementação do seu buffer.

Para mais informações consulte: http://code.google.com/apis /protocolbuffers/docs/cpptutorial.html

Outras dicas

Como você está escrevendo suas mensagens à tomada? Protobufs não é em si endian-sensível, mas também não protobufs definir um mecanismo de transporte - protobuf define um mapeamento entre uma mensagem e sua forma serializada (que é uma sequência de (8-bit) bytes) e é o responsabilidade de transferir essa seqüência de bytes para o host remoto.

No nosso caso, nós definimos um protocolo de transporte muito simples; primeiro nós escrevemos o tamanho da mensagem como um inteiro de 32 bits (big endian), em seguida, vem a própria mensagem. (Lembre-se também que protobuf mensagens não são auto-identificação, o que significa que você precisa saber que a mensagem que você está enviando. Isso normalmente é gerida por ter um invólucro mensagem que contém campos opcionais para todas as mensagens que você deseja enviar. Ver os arquivos do site protobuf e da lista de discussão para mais informações sobre essa técnica.)

Tem ambas as máquinas x86? Caso contrário, você precisa prestar atenção para big endian e pequenas diferenças endian. Seu também vale a pena prestar atenção para a estrutura de embalagem. ponteiro passando pode ser problemático também devido ao fato de ponteiro diferentes tamanhos em diferentes plataformas. Tudo lá é muito pouca informação no seu post para dizer, ao certo, o que está errado ...

As mentiras resposta na endianess dos dados a serem transmitidos, isto é algo que você precisa considerar com muito cuidado e verificar. Olhar aqui para mostrar o que endianness pode fazer e causa dados para ficar confuso sobre o receptor e remetente. Não existe tal medida perfeita de transferência de dados sem problemas, só porque os dados enviados a partir de uma caixa de unix garante os dados sobre as janelas caixa será na mesma ordem em termos de estrutura de memória para os dados. Além disso, o preenchimento da estrutura na caixa de unix será diferente para o preenchimento nas janelas caixa, tudo se resume à forma como as opções de linha de comando são usadas, pense alinhamento estrutura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top