networking - 定界二进制序列

标签 networking binary binary-data delimiter

我需要能够分隔二进制数据流。我正在考虑使用诸如 ASCII EOT(传输结束)字符之类的东西来执行此操作。

但是我有点担心 - 我如何确定用于此的特定二进制序列 (0b00000100) 不会出现在我自己的二进制序列中,从而在定界上给出误报?

换句话说,如何最好地处理二进制定界?

编辑:...不使用长度 header 。抱歉各位,之前应该提到这一点。

最佳答案

您有五个选择:

  • 使用不太可能出现的分隔符。这存在您猜测错误的风险。我不推荐这种方法。
  • 使用分隔符和 escape sequence包括分隔符。您可能需要将转义字符加倍,具体取决于什么使解析更容易。 (想想 C \0 在某些内容中包含 ASCII NUL。)
  • 使用您可以确定不会出现的分隔符短语。 (想想mime message boundaries。)
  • 在前面添加某种长度字段,以便您知道将接下来的 N 个字节作为数据读取。这样做的缺点是要求您在写入数据之前知道这个长度,而这有时很困难或不可能。
  • 使用更复杂的东西,例如 ASN.1 ,为您完整描述所有您的内容。 (我不知道我是否真的会推荐这个,除非你能很好使用它——ASN.1在最好的情况下使用起来很尴尬,但它确实允许完全明确的二进制文件数据解释。)

关于networking - 定界二进制序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541766/

相关文章:

language-agnostic - connect() 与 TCP 的行为

ruby - 在 Wireshark 中看到多播数据包,但用户程序未收到(Windows 和 Linux)

c - C语言十进制转二进制

c++ - 将许多位转换为 Base 10

linux - Linux 可以缓冲 UDP 数据包来纠正顺序吗

Java简单网络程序在Eclipse中运行,而不是在终端中运行

python - 在 python 中添加二进制数需要帮助

c - XML 是否存在任何二进制替代方案

php - "binary"数字与我的日常编程有什么关系?

vba - 如何使用vba加减二进制数?