【问题标题】:.NET 4.5 Error detection in communication (CRC?).NET 4.5 通信中的错误检测(CRC?)
【发布时间】:2013-04-27 02:11:15
【问题描述】:

我有一个非常简单的利用 UDP 协议的通信。我想添加一些错误检查(可能是一个不受先前消息影响的哈希函数)。我知道 CRC 函数,但是在实现中我发现 CRC 计算受到以前消息的影响,这在我的情况下是不合适的,因为我的 UDP 通信中的某些数据可能无法到达。有谁知道可以满足我需求的可下载 CRC(也许我可以自己编写 CRC 检查,但不幸的是我的时间有点短)?是否有任何其他已知选项(.NET Framework 4.5 中已经存在的类/函数会很棒)。

感谢您的努力。

【问题讨论】:

  • 为什么CRC不好呢?您可以单独为每个 UDP 包应用它。
  • 您的意思是在每条消息后将 CRC 的实际多项式重置为其默认值(这就是我在我找到的实现中会这样做的方式)?是不是有点粗糙?好吧,既然时间对我不利,我想我可以接受。

标签: .net communication crc


【解决方案1】:

总的来说,我想推荐使用 TCP。在那里你不需要关心包的顺序是否正确,也不需要考虑校验和(因为它们是build in)。 TCP 具有所有内置功能,如果包丢失,TCP 也会触发重新传输或丢失包。

但是,即使 UDP 具有内置校验和,您通常也不需要实现这样的 CRC 校验。另请参阅维基百科中的 packet structure

如果你真的想在damieng.com上添加crccheck this implementation,看起来不错,但我没有检查。

【讨论】:

  • 我需要一些更安全的校验和计算 - 这些自动校验和仅使用所有位相加或类似的东西,不是吗?
  • 哦,由于速度的原因,使用 UDP 对我来说非常有益......我会检查你链接的实现。
  • 您认为 TCP 握手对您来说是一个真正的问题的用例是什么?自动校验和位于底层级别的每个包中,因此您将永远不会看到损坏的包。另请参阅 this answer 关于 UDP 校验和。
  • 好吧,TCP 不是一个真正的问题,我只是希望我的实时数据传输的通信速度更快一些,因为我不需要在大多数数据包中使用确认消息并接受每个包。但我只需要非常确定不会有损坏的数据,我知道我可能永远不会在默认校验和的 UDP(/TCP) 数据包中遇到错误。
  • 哦,是的,我查看了链接。因此,由于自动 UDP 校验和不仅仅是基于总和的,我也许可以使用它......谢谢
猜你喜欢
  • 2020-10-25
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2012-09-18
  • 2023-03-12
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多