gpt4 book ai didi

c++ - 当我使用 Protocol Buffer 时,我怎么知道服务器端的 ByteSize()?

转载 作者:行者123 更新时间:2023-11-30 05:39:44 25 4
gpt4 key购买 nike

根据 Protocol Buffer api,如果格式错误,ParseFromArray(const void * data, int size) 将失败,在我的例子中,当 size 参数不对。很多回答都指出在使用SerializeToArray(void * data, int size)时应该使用ByteSize(),并确保解析正确的大小,但是都没有他们清楚地指出了如何。那么如何将 ByteSize() 值传递到服务器端以确保 ParseFromArray 不返回 false?

据我所知,我找到的所有示例都使 size 参数成为接收缓冲区的完整大小,并且根本不检查返回值,因为字段将解析任何方式。不检查返回值是个好主意吗?

最佳答案

Is this a good idea leaving the return value unchecked?

不!

你从哪里得到数据缓冲区?无论你从哪里得到它,都应该告诉你缓冲区中有多少字节。

例如,如果您使用 recv() 从网络接收 UDP 数据报,它会返回接收到的字节数。

如果您使用的是 TCP,则 recv() 会返回接收到的字节数,但请注意消息可能会分多个部分到达。您需要通过某种方式知道何时完成,例如在消息发送后使用 shutdown() 结束流,或者在消息前单独写入大小。对于后一种解决方案,您可能对我的 pull request 感兴趣,它将帮助器添加到 protobufs 以实现此目的(但你自己也不太难)。

关于c++ - 当我使用 Protocol Buffer 时,我怎么知道服务器端的 ByteSize()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com