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服务器端以相同的长度和类型接收它,但解析不起作用。
我是否错过了一些基本的基础知识?
答案 0 :(得分:0)
我使用SerializeToArray
而不是SerializeToString
方法解决了这个问题。
以下是我从https://groups.google.com/forum/#!topic/protobuf/AmdloRxdFUg找到的代码解决了这个"问题"
int size = request.ByteSize();
char* array = new char[size];
request.SerializeToArray(array, size);