可靠、明确地检测套接字流的末端

本文关键字:套接字 检测 可靠 | 更新日期: 2023-09-27 18:37:15

我正在修复使用套接字在网络上流式传输字节序列的问题。我正在使用二进制格式化程序来序列化我希望发送的对象,然后在机器之间分发它们并在到达目的地时反序列化它们。之前有人问过这个问题"我如何检测字节流的末尾",但我的困境有点不同。我希望能够通过此网络发送多种类型的对象。我会简单地使用标记或商定的字节序列来传达消息的结尾,但由于我不知道二进制格式化程序会产生什么,我不知道我可以使用哪些字符序列是唯一的。如果我决定使用序列 255、128、0、255 来表示一个对象流的结束,如何确保该序列不会也出现在二进制格式化程序输出中?我还能做些什么来表示一个对象的结束和另一个对象的开始?

感谢您的任何帮助。

可靠、明确地检测套接字流的末端

正常情况下,这是在消息开头使用长度指示来完成的。

假设您将数据(可以是图像,文本等)压缩到一个字节数组中。你取这个字节数组的长度,比如说 500,并将这个数字保存在流的开头。这个长度数字的字节长度必须始终相同,所以假设在数字 32 的情况下为 500 字节,它看起来像这样)

00000000 00000000 00000001 11110100 and after this the 500 bytes of your actualy message comes
这样,您

始终知道消息从读取前 32 个字节开始需要多长时间,并且您知道消息何时结束。