Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/06/2016, 08:51
Ace_Slelt
 
Fecha de Ingreso: agosto-2010
Mensajes: 20
Antigüedad: 13 años, 8 meses
Puntos: 0
Protocol Buffers , Sockets

Buenas tardes estoy intentando enviar una estructura de datos mediante sockets entre dos plataformas distintas. El sender esta programado en c++ y el que recibe el mensaje es c#. Para serializar la estructura utilizo Protocol buffers [URL="https://developers.google.com/protocol-buffers/"]https://developers.google.com/protocol-buffers/[/URL]

Si utilizo protocol buffers con archivos en mi ordenador no tengo ningun problema en serializar y deserializar los datos, todo empieza cuando intento enviar esa informacion a traves de un socket. A continuacion os pongo el codigo para que os hagais una idea y luego el error:

C++
Código:
        // Aqui relleno mi mensaje que es exactamente igual que el ejemplo de la pagina oficial.

        tutorial::AddressBook address_book;
	tutorial::Person* person = address_book.add_person();
	person->set_email("abcdefgh");
	person->set_id(13);
	person->set_name("pepito");

        // Serializo el mensaje en un string y lo envio a traves del socket
        
        string buf;
        person->SerializeToString(&buf);
	send(newsockfd,buf.data(),buf.length(), 0);
C#
Código:
        private AddressBook newdata; // esta es la variable donde se va a alojar el mensaje
        ............
        byte[] buffer = new byte[1024];
        int bytes = 0;
        bytes=handler.Receive(buffer);
        newdata = AddressBook.Parser.ParseFrom(buffer);
Una vez aqui...el error que se produce es : Protocol message contained an invalid tag ( zero )

Este error ya me sucedia al leer desde archivos en vez de los sockets y lo solucione creando un array del mismo tamaño que los byes que ocupaba el archivo. Pero el buffer de sockets da igual que le ponga los 24 bytes que se envian que no funciona, sale ese mensaje de arriba. Alguien sabe que estoy haciendo mal?