SuperSocket筆記--協議實現模板


一、通信協議實現中 SuperSocket 提供了一些通用的協議解析工具:

TerminatorReceiveFilter 

CountSpliterReceiveFilter 

FixedSizeReceiveFilter 

BeginEndMarkReceiveFilter 

FixedHeaderReceiveFilter 

二、此處主要記錄=>FixedHeaderReceiveFilter 

頭部格式固定並且包含內容長度的協議,將一個請求定義為兩大部分, 第一部分定義了包含第二部分長度等等基礎信息。

(1)例1(文檔中的例子):

協議: 頭部包含 6 個字節, 前 4 個字節用於存儲請求的名字, 后兩個字節用於代表請求體的長度,最后是傳輸包。

request name

(4byte)

length

(2byte)

body

 

實現這種協議代碼:

class MyReceiveFilter : FixedHeaderReceiveFilter<BinaryRequestInfo>
{
    public MyReceiveFilter()
        : base(6)
    {

    }

    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));
    }
}
  • 傳入父類構造函數的 6 表示頭部的長度;
  • 方法"GetBodyLengthFromHeader(...)" 應該根據接收到的頭部返回請求體的長度;
  • 方法 ResolveRequestInfo(....)" 應該根據你接收到的請求頭部和請求體返回你的請求類型的實例.

(2)可以根據自己的需求定義相應的頭部格式自定義

頭部定義並非固定,可以按照需求添加需要的字節存儲一些信息表達如:包的一些屬性、時間等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM