2016-03-23 9 views
1

私はZMQとGoogleのprotobufsを使って、C++上でserver-clientというプログラムを実行していましたが、タイプのばらつきに関連する関数に触れました。C++ protobuf、ZMQ。クライアント/サーバインターフェイスの機能

問題:関数ParseFromStringSerializeToStringはパラメータとして文字列型を使用しますが、パラメータなどのzmq::message_tを使用して書き込みプログラムが必要です。

Proto file: 
package core; 
{ message Request 
required uint32 id=1; 
required uint32 class_id=2; 
...} 

zmq::message_t msg; // beginning 
core::Request reqt; 
… 
socket.recv(&msg) ;// receiving messgae, socket.recv(reqt) doesn't work 
ParseFromString (msg); //serialization to structure doesn’t work 

プログラムは、ソケットを使用して、クライアント・サーバの実行である 互いの間で変数の文字列型とメッセージを調整する必要があります。 関数ParseFromString()およびSerializeToString()です。 ВPythonのвсепросто: socket.send(reqt.SerializeToString())и CLASS_ID = reqt.ParseFromString(socket.recv)

答えて

0

あなたが使用する必要がありParseFromArray():シリアル化側では

reqt.ParseFromArray(msg.data(), msg.size()); 

ByteSize()を使用してprotobufメッセージのサイズを取得し、スペースを割り当ててから、SerializeToArray()を入力してスペースに書き込みます。

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message_lite

:これらの方法および他の

完全なドキュメントはで見つけることができます