可靠且明确地检测套接字流的结束

时间:2015-01-12 11:45:48

标签: c# sockets serialization

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Normaly这是通过消息开头的长度指示来完成的。

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

00000000 00000000 00000001 11110100 and after this the 500 bytes of your actualy message comes

通过这种方式,您始终可以知道您的消息读取前32个字节的时间长度,并且知道消息何时结束。

相关问题