2017-06-22 12 views
0

C++シリアライズ使用して解析する:ZeroMQオーバーいるProtobuf C++シリアライズされた文字列を送信するとPython

int main() 
{ 
    GOOGLE_PROTOBUF_VERIFY_VERSION; 

    proto::Request request; 
    std::string output; 

    request.set_fieldone("X"); 
    request.set_fieldtwo("Y"); 

    // Prepare our context and socket 
    zmq::context_t context (1); 
    zmq::socket_t socket (context, ZMQ_REQ); 
    socket.connect ("tcp://localhost:5555"); 

    request.SerializeToString(&output); 

    long size = output.length(); 
    zmq::message_t request(size); 
    memcpy(request.data(), &output, size); 

    socket.send(request); 

    return 0; 

}

Pythonのデシリアライズ:私は、エラーメッセージを表示します

def __init__(self): 
    self.database.connect() 
    self.context = zmq.Context() 
    self.socket = self.context.socket(zmq.REP) 
    self.socket.bind("tcp://*:5555") 
    self.request = call_init_pb2.DialRequest() 

def run(self): 
    message = self.socket.recv() 
    self.request.ParseFromString(message) 

self.request.ParseFromString(message) 
google.protobuf.message.DecodeError: Error parsing message 

私が達成したいのは、メッセージをC++でシリアル化し、ネットワーク経由でPythonサーバーに送信することです。メッセージのシリアル化を解除し、サーバー側でビジネスロジックを実行して、メッセージの特定のプロパティを確認します。私は、Pythonサーバー側で同じ長さとタイプの文字列を受け取ることができますが、解析は機能しません。

私はいくつかの基本的な基礎知識を欠場しましたか?

答えて

0

SerializeToStringアプローチではなくSerializeToArrayを使用してこの問題を解決しました。ここで

は、私はこの「問題」

int size = request.ByteSize(); 
char* array = new char[size]; 
request.SerializeToArray(array, size); 
を解決 https://groups.google.com/forum/#!topic/protobuf/AmdloRxdFUg見つかりコードです
関連する問題