今天小编给各位分享的是部标协议,DotNetty 使用ByteToMessageDecoder 国家部标808协议封装的知识,,希望对您有所帮助。如果你还想了解更多这方面的信息,请点击本站其他相关内容,共同学习吧!如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文导读目录:
1、部标协议,DotNetty 使用ByteToMessageDecoder 国家部标808协议封装
部标协议,DotNetty 使用ByteToMessageDecoder 国家部标808协议封装 ♂
使用 国家部标协议封装
.国家部标协议格式
标识位
采用 表示,若校验码、消息头以及消息体中出现 ,则要进行转义处理,转义
规则定义如下:
<————> 后紧跟一个 ;
<————> 后紧跟一个 。
转义处理过程如下:
发送消息时:消息封装——>计算并填充校验码——>转义;
接收消息时:转义还原——>验证校验码——>解析消息。
示例:
发送一包内容为 的数据包,则经过封装如下:
.建立一个控制台程序
添加包
...
...
...
...
..
...
. 通道配置,使用默认的 看看是否能够实现分包
.(., ).( ("-"))
.(
{
= .;
.( ("-"));
.("-", (, , ()));
.("", ());
}));
[] ()
{
[]
{
.([] { (), () }),
.([] { () }),
};
}
用网络调试工具 发送数据 ,发现服务器收到数据后,分包数据错误了(一包数据编程包数据了,数据格式也不对),更改下分隔符代码,也出现一样的结果
[] ()
{
[]
{
.([] { () }),
.([] { () }),
};
}
[] ()
{
[]
{
.([] { ()}),
};
}
.使用,代码如下
///
///粘包处理 数据包 头和尾 标志 都包含分割 字符串
///
:
{
= ;
;
;
= ;
;
///
///
///
/// 数据包 标志
/// 数据包最大长度
/// 数据包最小长度
( , , )
{
. = ;
. = ;
. = ;
= .([] { });
}
( , ,
{
(. <= minFrameLength)//还不够 最小帧的 数据
return;
int readLen = -1;
//标记
int OriginalReadIndex = input.ReaderIndex;
input.MarkReaderIndex();
if (frameFlag == input.GetByte(OriginalReadIndex))//找到头 第一个字节是头 不改变 ReaderIndex
{
input.SetReaderIndex(OriginalReadIndex + 1);
readLen = IndexOfEnd(input);
input.ResetReaderIndex();
if (readLen != -1)//没有找到尾
{
readLen += delimiters;
if (readLen > || < )
{
.();
}
{
= .();
.();
.();
}
}
}
{
//找头
= -;
= . + ;
( < .)
{
( == .())//找到头部
{
= ;
;
}
++;
}
( != -)//找到头
{
((. - ) < minFrameLength)//可以读取的 数据长度小于最小帧长度,说明还不够一包数据,等下一次再读取
{
input.ResetReaderIndex();//本次跳过 还原ReaderIndex
return;
}
input.SetReaderIndex(readIndex + 1);
readLen = IndexOfEnd(input);
if (readLen == -1)//没有找打 尾
{
input.SkipBytes(input.ReadableBytes);//本次跳过 后面的所有字节
}
else if (readLen > || < )//找到帧 但是长度 小于 最小长度 是错误的帧
{
.();
.( + );
}
{
.();
= .( + );
.();
.();
}
}
}
}
( )
{
( = .; < .; ++)
{
(.() != )
{
;
}
{
( == .)
{
-;
}
}
// ! 找到
- .;
}
-;
}
修改通道代码
.(., ).( ("-"))
.(
{
= .;
.( ("-"));
.("", (, , ));
.("", ());
}));
测试结果
部标协议,DotNetty 使用ByteToMessageDecoder 国家部标808协议封装的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于部标协议,DotNetty 使用ByteToMessageDecoder 国家部标808协议封装的信息别忘了在本站进行查找喔。
还没有评论,来说两句吧...