SuperSocket使用FixedHeaderReceiveFilter协议

昨天忆 2020-09-02 01:40:42
在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));
}
}
...全文
27351 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
昨天忆 2020-09-16
  • 打赏
  • 举报
回复
如果发送错误协议之后,就不会走GetBodyLengthFromHeader这个方法了,即使用回调也得先找到收数据的上一步在哪儿吧
昨天忆 2020-09-16
  • 打赏
  • 举报
回复
还是不明白,那不还是要自己解析了
默以笙以默 2020-09-15
  • 打赏
  • 举报
回复
如果是控制型的,使用结束符过滤,那样就不会出现错误累积。 如果传输文件,数据,这些,应该使用二进制形式接收,自己在回调函数处理
昨天忆 2020-09-14
  • 打赏
  • 举报
回复
引用 7 楼 戈壁上的月光 的回复:
发现同样的问题,只要接受的数据不符合协议格式,这个session 后面就算再发正确的包也是解析不出来的。
有解决方法吗
戈壁上的月光 2020-09-11
  • 打赏
  • 举报
回复
发现同样的问题,只要接受的数据不符合协议格式,这个session 后面就算再发正确的包也是解析不出来的。
昨天忆 2020-09-10
  • 打赏
  • 举报
回复
引用 3 楼 ziqi0716 的回复:
自定义协议?你准备怎么处理粘包和断包问题?怎么处理连接是否断线? 为何不用现成的通讯协议呢?
因为公司用supersocket框架,有几种协议可以使用,官网教程也不全面,更何况我对于socket处理粘包的问题,也不是很理解,起码在接收到数据后根据定义的协议,处理包头包尾,处理粘包的方法都不知道该怎么写
昨天忆 2020-09-10
  • 打赏
  • 举报
回复
引用 5 楼 ziqi0716 的回复:
[quote=引用 4 楼 昨天忆 的回复:][quote=引用 3 楼 ziqi0716 的回复:]自定义协议?你准备怎么处理粘包和断包问题?怎么处理连接是否断线? 为何不用现成的通讯协议呢?
因为公司用supersocket框架,有几种协议可以使用,官网教程也不全面,更何况我对于socket处理粘包的问题,也不是很理解,起码在接收到数据后根据定义的协议,处理包头包尾,处理粘包的方法都不知道该怎么写[/quote] 通常封装好的通讯协议本身已经处理好断包,粘包,数据校验,包头包尾等问题了,我们使用时候只需要针对数据部分进行处理就好了.虽然我没有看到这个supersocket框架具体内容,但是封装好的协议都会把这些非业务相关问题处理好的,当然,框架本身可能会把被封装的socket对象暴露出来,但你最好不要直接用,否则框架的意义就不大了.[/quote]你有没有一个socket处理粘包的方法,我看下
ziqi0716 2020-09-10
  • 打赏
  • 举报
回复
引用 4 楼 昨天忆 的回复:
[quote=引用 3 楼 ziqi0716 的回复:]自定义协议?你准备怎么处理粘包和断包问题?怎么处理连接是否断线? 为何不用现成的通讯协议呢?
因为公司用supersocket框架,有几种协议可以使用,官网教程也不全面,更何况我对于socket处理粘包的问题,也不是很理解,起码在接收到数据后根据定义的协议,处理包头包尾,处理粘包的方法都不知道该怎么写[/quote] 通常封装好的通讯协议本身已经处理好断包,粘包,数据校验,包头包尾等问题了,我们使用时候只需要针对数据部分进行处理就好了.虽然我没有看到这个supersocket框架具体内容,但是封装好的协议都会把这些非业务相关问题处理好的,当然,框架本身可能会把被封装的socket对象暴露出来,但你最好不要直接用,否则框架的意义就不大了.
ziqi0716 2020-09-09
  • 打赏
  • 举报
回复
自定义协议?你准备怎么处理粘包和断包问题?怎么处理连接是否断线? 为何不用现成的通讯协议呢?
昨天忆 2020-09-09
  • 打赏
  • 举报
回复
有用过SuperSocket框架的讲解下
昨天忆 2020-09-03
  • 打赏
  • 举报
回复
有没有用过SuperSocket框架的,

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧