当我使用协议缓冲区时,我如何知道服务器端的ByteSize()
When I use protocol-buffers, how could I know ByteSize() on the server side?
根据协议缓冲区api,如果格式错误,ParseFromArray(const void * data, int size)
将失败,在我的情况下,当size
参数不正确时,它返回false。许多回答都指出在使用SerializeToArray(void * data, int size)
时应使用ByteSize()
,并确保解析正确的大小,但都没有明确指出如何使用。那么如何将ByteSize()
值传递到服务器端以确保ParseFromArray不返回false?
据我所知,我发现的所有示例都使size
参数成为接收缓冲区的完整大小,并且根本没有检查返回值,因为字段将以任何方式解析。不检查返回值是个好主意吗?
不检查返回值是个好主意吗?
不!
你从哪里得到数据缓冲区?无论你在哪里得到它,它都应该告诉你缓冲区中有多少字节。
例如,如果您使用recv()
从网络接收UDP数据报,它将返回接收到的字节数。
如果您使用的是TCP,那么recv()
再次返回接收到的字节数,但请注意消息可能以多个部分到达。您需要某种方法来知道它何时完成,例如在发送消息后使用shutdown()
结束流,或者在消息之前单独写入大小。对于后一种解决方案,您可能会对我的pull request感兴趣,它向protobufs添加了帮助程序来完成此任务(但您自己也可以完成)。
相关文章:
- 服务器端事件C++实现?
- 如何使用 GRPC c++ 读取异步服务器端流
- QAbstractSocket 从服务器端关闭连接时的奇怪行为
- 从服务器端关闭主套接字
- 在GRPC服务器端呼叫时检索SSL证书
- BLE在Linux环境中使用C++的服务器端实现
- 如何在服务器端验证用户请求(在我的特定情况下)
- 如何检测端口是否已在服务器端使用(在windows上的C++中)
- RPC C++服务器端动态终结点
- 如果另一侧失去了他的净连接,我该如何从客户端/服务器端检测
- 如何使用php级别以下的代码进行服务器端编程
- 我必须编写一个FTP客户端.不知道从哪里开始.C++
- 在没有 SO_LINGER > 0 的情况下强制关闭服务器端套接字可能会丢失数据,对吧?
- 提升ASIO TCP,为什么我不能在服务器端只有一个数据套接字可以打开和关闭
- FTP服务器端口处于主动模式和被动模式
- MongoDB C++驱动程序服务器端查询计数
- CORBA C++/Java应用程序中服务器端的分段故障(核心转储)
- 正在比较服务器端收到的字符串-C++
- 如何在boostc++中添加http服务器端口的路径
- 当我使用协议缓冲区时,我如何知道服务器端的ByteSize()