如何在NetworkStream字节数组中放置分隔符?

我正在设置一种在服务器和客户端之间进行通信的方式。 我目前的工作方式是,流的第一个字节将包含即将到来的指示符,然后查找该请求的类,我可以确定请求的长度:

stream.Read(message, 0, 1)

if(message == <byte representation of a known class>)
{
    stream.Read(message, 0, Class.RequestSize);
}

我很好奇如何在不知道班级大小的情况下处理这个情况,以及如果在读取已知请求后数据已损坏。

我在想,我可以在流中插入某种分隔符,但由于一个字节只能在0-255之间,所以我不知道如何去创建一个独特的分隔符。 我是否想在流中放置一个模式来表示消息的结尾? 我怎样才能确定这种模式是独一无二的,不会被误认为实际数据?


对此有不同的方法。 一种选择是首先发送类名的长度和整个数据包的可能性(例如总是第一字节)。 通过这种方式,您可以读取该字节,然后再读取n个字节以获取类名。

通过这种方法,您不会最终读取恶意客户端向您发送的应用程序拒绝许多内容,并且可以快速确定您是否阅读了足够的内容来处理数据包,或者是否尚未完成。


有一些特别用作分隔符的低级字节。 文本开始和文本结束分别具有(十六进制)值0x02和0x03。 你有标题开始加上传输结束,0x01和0x04; 你可以使用这些。

链接地址: http://www.djcxy.com/p/11637.html

上一篇: How to place a delimiter in a NetworkStream byte array?

下一篇: C++ equivalent for NSOperation and NSOperationQueue