在supersocket的自定義協議里面,如果遇到一些錯誤的資料,或者說毫無意義的資料,那么對于 FixedHeaderReceiveFilter 協議,后面正確格式的資料也收不到了,就好像發送錯誤資料的客戶端被拉黑了一樣,收不到任何關于客戶端的資料了,只能重啟服務器才行了,應該怎么做能在接收錯誤資料之后還能再接收到正確的資料?
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));
}
}
uj5u.com熱心網友回復:
有沒有用過SuperSocket框架的,uj5u.com熱心網友回復:
有用過SuperSocket框架的講解下uj5u.com熱心網友回復:
自定義協議?你準備怎么處理粘包和斷包問題?怎么處理連接是否斷線?為何不用現成的通訊協議呢?
uj5u.com熱心網友回復:
因為公司用supersocket框架,有幾種協議可以使用,官網教程也不全面,更何況我對于socket處理粘包的問題,也不是很理解,起碼在接收到資料后根據定義的協議,處理包頭包尾,處理粘包的方法都不知道該怎么寫uj5u.com熱心網友回復:
通常封裝好的通訊協議本身已經處理好斷包,粘包,資料校驗,包頭包尾等問題了,我們使用時候只需要針對資料部分進行處理就好了.雖然我沒有看到這個supersocket框架具體內容,但是封裝好的協議都會把這些非業務相關問題處理好的,當然,框架本身可能會把被封裝的socket物件暴露出來,但你最好不要直接用,否則框架的意義就不大了.
uj5u.com熱心網友回復:
因為公司用supersocket框架,有幾種協議可以使用,官網教程也不全面,更何況我對于socket處理粘包的問題,也不是很理解,起碼在接收到資料后根據定義的協議,處理包頭包尾,處理粘包的方法都不知道該怎么寫 自定義協議?你準備怎么處理粘包和斷包問題?怎么處理連接是否斷線?
為何不用現成的通訊協議呢?
通常封裝好的通訊協議本身已經處理好斷包,粘包,資料校驗,包頭包尾等問題了,我們使用時候只需要針對資料部分進行處理就好了.雖然我沒有看到這個supersocket框架具體內容,但是封裝好的協議都會把這些非業務相關問題處理好的,當然,框架本身可能會把被封裝的socket物件暴露出來,但你最好不要直接用,否則框架的意義就不大了.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/3713.html
標籤:C#
