2017-06-22 98 views
0

C++系列化解析:发送protobuf的C++在ZeroMQ连续字符串使用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服务器端收到相同长度和类型的字符串,但解析不起作用。

我错过了一些基本的基础知识吗?

回答