繁体   English   中英

通过ZeroMQ发送Protobuf C ++序列化字符串并使用python进行解析

[英]Sending a protobuf C++ serialized string over ZeroMQ and parsing using python

C ++序列化:

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服务器端发送具有相同长度和类型的字符串,以及接收到的字符串,但是解析不起作用。

我是否错过了一些基础知识?

我使用SerializeToArray而不是SerializeToString方法解决了此问题。

这是我从https://groups.google.com/forum/#!topic/protobuf/AmdloRxdFUg找到的代码,它解决了此“问题”

 int size = request.ByteSize();
 char* array = new char[size];
 request.SerializeToArray(array, size);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM