日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)

發(fā)布時(shí)間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 supersocket缓冲区_supersockets接收过滤器(ReceiveFilter) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接收過濾器(ReceiveFilter)用于將接收到的二進(jìn)制數(shù)據(jù)轉(zhuǎn)化成請求實(shí)例(RequestInfo)。

實(shí)現(xiàn)一個(gè)接收過濾器(ReceiveFilter), 你需要實(shí)現(xiàn)接口 IReceiveFilter:

public interface IReceiveFilter

where TRequestInfo : IRequestInfo

{

///

/// Filters received data of the specific session into request info.

///

/// 待讀取的緩沖數(shù)據(jù).

/// 這個(gè)待讀取緩沖中當(dāng)前接收數(shù)據(jù)的偏移量

/// 當(dāng)前接收數(shù)據(jù)的長度

/// if set to true [to be copied].

/// 沒有被解析的數(shù)據(jù)的長度

///

TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);

///

/// Gets the size of the left buffer.

///

///

/// 接收過濾器已緩存數(shù)據(jù)的長度

///

int LeftBufferSize { get; }

///

/// Gets the next receive filter.

///

IReceiveFilter NextReceiveFilter { get; }

///

/// Resets this instance to initial state.重置這個(gè)實(shí)例到初始化狀態(tài)

///

void Reset();

}

TRequestInfo: 類型參數(shù) "TRequestInfo" 是你要在程序中使用的請求類型(RequestInfo);

LeftBufferSize: 該接收過濾器已緩存數(shù)據(jù)的長度;

NextReceiveFilter: 當(dāng)下一塊數(shù)據(jù)收到時(shí),用于處理數(shù)據(jù)的接收過濾器實(shí)例;

Reset(): 重設(shè)接收過濾器實(shí)例到初始狀態(tài);

Filter(....): 該方法將會在 SuperSocket 收到一塊二進(jìn)制數(shù)據(jù)時(shí)被執(zhí)行,接收到的數(shù)據(jù)在 readBuffer 中從 offset 開始, 長度為 length 的部分。

TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);

readBuffer: 接收緩沖區(qū), 接收到的數(shù)據(jù)存放在此數(shù)組里

offset: 接收到的數(shù)據(jù)在接收緩沖區(qū)的起始位置

length: 本輪接收到的數(shù)據(jù)的長度

toBeCopied: 表示當(dāng)你想緩存接收到的數(shù)據(jù)時(shí),是否需要為接收到的數(shù)據(jù)重新創(chuàng)建一個(gè)備份而不是直接使用接收緩沖區(qū)

rest: 這是一個(gè)輸出參數(shù), 它應(yīng)該被設(shè)置為當(dāng)解析到一個(gè)為正的請求后,接收緩沖區(qū)還剩余多少數(shù)據(jù)未被解析

這兒有很多種情況需要你處理:

當(dāng)你在接收緩沖區(qū)中找到一條完整的請求時(shí),你必須返回一個(gè)你的請求類型的實(shí)例.

當(dāng)你在接收緩沖區(qū)中沒有找到一個(gè)完整的請求時(shí), 你需要返回 NULL.

當(dāng)你在接收緩沖區(qū)中找到一條完整的請求, 但接收到的數(shù)據(jù)并不僅僅包含一個(gè)請求時(shí),設(shè)置剩余數(shù)據(jù)的長度到輸出變量 "rest". SuperSocket 將會檢查這個(gè)輸出參數(shù) "rest", 如果它大于 0, 此 Filter 方法 將會被再次執(zhí)行, 參數(shù) "offset" 和 "length" 會被調(diào)整為合適的值.

總結(jié)

以上是生活随笔為你收集整理的supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。