Ricezione di messaggi di dimensione 0 durante l’utilizzo di ZMQ e protobuf

Sto cercando di configurare un sistema di comunicazione di base tra client e server usando ZMQ. Sto usando protobuf per il formato del messaggio. Il mio problema è quando invio il messaggio dal client la dimensione del messaggio è 34 ma la dimensione del messaggio ricevuta sul server è 0.

Di seguito è riportato il mio codice;

Client.cpp

tutorial::Person person; person.set_id(1234); person.set_name("john"); person.set_email("[email protected]"); person.set_phonenumber("12345678"); zmq::context_t context (1); // Prepare our context and socket zmq::socket_t socket (context, ZMQ_PAIR); std::cout << "Connecting to server…" << std::endl; int linger = 0;// ms socket.setsockopt(ZMQ_LINGER, &linger, sizeof(linger)); socket.connect ("tcp://127.0.0.1:20000"); std::string msg_str; person.SerializeToString(&msg_str); std::cout << "Size of message string is "<< msg_str.size()<<std::endl; zmq::message_t request (msg_str.size()); memcpy ((void *) request.data (), msg_str.c_str(), msg_str.size()); std::cout << "Sending Person data ..." << std::endl; socket.send (request); socket.close(); google::protobuf::ShutdownProtobufLibrary(); return 0; 

Server.cpp:

 zmq::context_t context(1); // Prepare our context and socket zmq::socket_t socket(context, ZMQ_PAIR); int linger = 0; // ms socket.setsockopt(ZMQ_LINGER, &linger, sizeof(linger)); socket.bind("tcp://127.0.0.1:20000"); while (true) { zmq::message_t request; int recieved = socket.recv(&request); std::string msg(static_cast(request.data()),request.size()); std::cout<<"Size of message recieved is "<< msg.size()<<std::endl; tutorial::Person person; person.ParseFromString(msg); std::string text_str1; google::protobuf::TextFormat::PrintToString(person, &text_str1); } socket.close(); 

L’output del client è:

 Size of message string is 34 

L’output del server è:

 Size of message received is 0 

Ho provato a provare a passare a ParseToArray anche se non ha aiutato. Ogni tipo di aiuto è apprezzato.

L’ho risolto con un altro modo. In realtà prima ho installato libzmq lib, ma in seguito quando sono passato a libzmq3-dev ha funzionato per me.