NetworkStream.Write()将缓冲区移位1个字节,导致异常“二进制流'0'不包含有效的BinaryHeader。”

时间:2014-07-23 08:44:24

标签: c# tcp firebird

我在另一个问题中找到了核心机制 Binary stream '0' does not contain a valid BinaryHeader. Occurs randomly 似乎网络流对象将整个缓冲区移位一个字节,后来不可避免地导致序列化错误(仍然是随机的,大部分时间它工作正常)。 由于我的项目的具体情况,我大部分时间都会发送小包或字节。

在我看来,我原则上做错了,所以这是我的问题:

通过tcp协议发送可序列化对象的最佳方法是什么?如何确保收到数据包? 虽然我还没有进行任何研究(这个想法刚刚出现在我的脑海中),但是从FbDataReader序列化整个数据流(其行为类似于DbDataReader对象)可能更好,然后处理它在客户端?

1 个答案:

答案 0 :(得分:0)

NetworkStream没有错。正如MarkRotteveel所提到的,TCP负责接收所有数据,并且顺序正确。

某些数据库需要一些额外配置才能确保正确存储/传输数据。此外,我们过去一直在为firebird提供很多问题,我不会把这种可能性排除在外。

您可以在写入和读取数据库之前尝试Convert.ToBase64String()Convert.FromBase64String(),然后将它们存储在文本列中。如果这不能解决问题,那么至少可以更好地了解出错的地方,因为您可以更轻松地查看数据库值。