SuperSocket ReceiveFilter实现

时间:2016-08-24 06:23:23

标签: c# network-protocols supersocket.net

根据SuperSocket文档,我必须实现ReceiveFilter,它将接收二进制数据并将其转换为对象,以便我的应用程序可以使用它。

目前我正在使用SuperSocket.ClientEngine与客户端合作。从文档看来, FixedHeaderReceiveFilter - 带有体长协议的固定标题对我来说效果最好。但是我不太了解它的逻辑。

因此它使用前四个字节作为请求名称,并使用两个字节作为请求主体长度。

/// +-------+---+-------------------------------+
/// |request| l |                               |
/// | name  | e |    request body               |
/// |  (4)  | n |                               |
/// |       |(2)|                               |
/// +-------+---+-------------------------------+

protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length)
{
    return (int)header[offset + 4] * 256 + (int)header[offset + 5];
}

protected override BinaryRequestInfo ResolveRequestInfo(ArraySegment<byte> header, byte[] bodyBuffer, int offset, int length)
{
    return new BinaryRequestInfo(Encoding.UTF8.GetString(header.Array, header.Offset, 4), bodyBuffer.CloneRange(offset, length));
}
  1. 为什么两个字节以及它可以包含多少?为什么我们采取了 第五个字节并乘以256?然后添加第六个 字节?
  2. 这意味着服务器应该根据协议组装数据包。如何计算身体长度并将其放入标题?
  3. 我的应用程序基本上是将xml请求发送到服务器并检索xml响应。但希望能够通过网络传输大文件。请帮帮我。

0 个答案:

没有答案