2017-06-22 53 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服務器端收到相同長度和類型的字符串,但解析不起作用。

我錯過了一些基本的基礎知識嗎?

回答