可靠且明确地检测套接字流的结尾
Reliably and definitively detect end of socket stream
我正准备使用套接字在网络上传输一系列字节。我正在使用 binaryformatter 来序列化我希望发送的对象,然后在机器之间传送它们并在到达目的地时反序列化它们。 "how do I detect the end of a bytestream"之前有人问过这个问题,但我的情况有点不同。我希望能够通过该网络发送多种类型的对象。我会简单地使用标记或商定的字节序列来传达消息的结尾,但是因为我不知道二进制格式化程序会产生什么,所以我不知道我可以使用什么字符序列是唯一的。如果我决定使用序列 255、128、0、255 来表示一个对象流的结尾,我如何确保该序列不会也出现在 binaryformatter 输出中?我还能做些什么来表示一个对象的结束和另一个对象的开始?
感谢您的帮助。
通常这是通过在消息的开头指示长度来完成的。
假设您将数据(可以是图像、文本等)压缩到字节数组中。你取这个字节数组的长度,比方说 500,并将这个数字保存在你的流的开头。这个长度数字的字节长度必须始终相同,所以假设数字 500 为 32 个字节,它看起来像这样)
00000000 00000000 00000001 11110100 and after this the 500 bytes of your actualy message comes
通过这种方式,您始终可以通过读取前 32 个字节知道消息的长度,并知道消息何时结束。
我正准备使用套接字在网络上传输一系列字节。我正在使用 binaryformatter 来序列化我希望发送的对象,然后在机器之间传送它们并在到达目的地时反序列化它们。 "how do I detect the end of a bytestream"之前有人问过这个问题,但我的情况有点不同。我希望能够通过该网络发送多种类型的对象。我会简单地使用标记或商定的字节序列来传达消息的结尾,但是因为我不知道二进制格式化程序会产生什么,所以我不知道我可以使用什么字符序列是唯一的。如果我决定使用序列 255、128、0、255 来表示一个对象流的结尾,我如何确保该序列不会也出现在 binaryformatter 输出中?我还能做些什么来表示一个对象的结束和另一个对象的开始?
感谢您的帮助。
通常这是通过在消息的开头指示长度来完成的。
假设您将数据(可以是图像、文本等)压缩到字节数组中。你取这个字节数组的长度,比方说 500,并将这个数字保存在你的流的开头。这个长度数字的字节长度必须始终相同,所以假设数字 500 为 32 个字节,它看起来像这样)
00000000 00000000 00000001 11110100 and after this the 500 bytes of your actualy message comes
通过这种方式,您始终可以通过读取前 32 个字节知道消息的长度,并知道消息何时结束。