1

我正在使用 protobuf-net 制作一个应用程序,使用它通过网络发送/接收数据。

我很好奇某人是否/如何发送一些会使该行抛出异常的东西:

var message = Serializer.DeserializeWithLengthPrefix<ReceiveType>(
                                   memoryStream, PrefixStyle.Fixed32);

我假设到目前为止我们已经检查过:

  • (编辑)整个消息已经被接收并被放入 aMemoryStream中,这将用于反序列化消息(即没有流切断的风险)。
  • 长度前缀包含一些合理的大小(即不会耗尽内存)
  • 消息正文与前缀所承诺的一样大。

到目前为止,我已经尝试了各种可能性,最坏的情况是这些message字段是null或其他默认值,即使对于必填字段以及当消息正文包含随机乱码时也是如此。

4

1 回答 1

1

当消息正文包含随机乱码时

不完全的。胡言乱语通常会使其抛出“无效的电线类型”异常。您还可能会收到有关格式错误的 varint、UTF8 和其他一些内容的错误。消息必须是有效的 protobuf 数据。有些东西它不会检测到,但在大多数情况下,它会因为无效数据而对你大喊大叫。

显然,任何ReceiveType故意爆炸的代码(比如说,一个属性获取)都会导致它失败 - 所以模型/ DTO也必须有意义!

于 2012-07-16T05:29:10.230 回答