相关疑难解决方法(0)

Java中是否存在用于协议缓冲区分隔I/O函数的C++等价物?

我正在尝试从C++和Java中的文件读取/写入多个Protocol Buffers消息.谷歌建议在消息之前写长度前缀,但默认情况下没办法(我可以看到).

但是,2.1.0版中的Java API收到了一组"Delimited"I/O函数,显然可以完成这项工作:

parseDelimitedFrom
mergeDelimitedFrom
writeDelimitedTo
Run Code Online (Sandbox Code Playgroud)

有C++等价物吗?如果没有,那么Java API附加的大小前缀是什么,所以我可以用C++解析这些消息?


更新:

这些现在存在于google/protobuf/util/delimited_message_util.hv3.3.0中.

c++ java serialization protocol-buffers

64
推荐指数
7
解决办法
2万
查看次数

使用boost :: asio发送Protobuf消息

我试图使用Google的Protocol Buffers和boost :: asio在C++中一起破解客户端.

我的问题是我不知道如何将protobuf消息提供给asio.我有的是这个:

// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
Run Code Online (Sandbox Code Playgroud)

现在我知道以下是错误的,但我会发布它:

size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
Run Code Online (Sandbox Code Playgroud)

我知道我必须以不同的方式将我的信息打包到缓冲区 - 但是如何?

一般来说,我很难搞清楚boost :: asio是如何工作的.有一些教程,但它们通常只包括发送标准数据格式,如ints,它是开箱即用的.我认为我的问题是序列化,但另一方面我了解到protobuf应该为我做这个......现在我很困惑;)

谢谢你的帮助!

- > Daniel Gehriger提供了解决方案,非常感谢!

c++ networking boost protocol-buffers boost-asio

11
推荐指数
1
解决办法
6405
查看次数