根据 SuperSocket 文档,我必须实现 ReceiveFilter 它将接收二进制数据并将其转换为对象,以便我的应用程序可以使用它。
目前我正在使用 SuperSocket.ClientEngine 与客户端合作。从文档看来,FixedHeaderReceiveFilter - Fixed Header with Body Length Protocol最适合我。但是我不太了解它的逻辑。
所以它使用前四个字节作为请求名,两个字节作为请求体长度。
/// +-------+---+-------------------------------+
/// |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));
}
- 为什么是两个字节,它可以包含多少?为什么我们取第五个字节并乘以 256?然后添加第六个字节?
- 这意味着服务器应该根据协议组装数据包。如何计算正文的长度并将其放在标题中?
我的应用程序基本上是将 xml 请求发送到服务器并检索 xml 响应。但希望能够通过网络传输大文件。请帮我。