java netty自定义协议,如何解决netty自定义协议粘包分包问题

/*** 基本长度(4+4+12) 4:总长度 4:命令标识 12:序列号*/private static final int BASE_LENGTH = 20;@Overrideprotected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception {LOG.debug("decode channelId:{}",ctx.channel().id().asShortText());if (in.readableBytes() <= BASE_LENGTH) {LOG.debug("readables:{} channelId:{}",in.readableBytes(),ctx.channel().id().asShortText());return;}int length, command;while (true) {in.markReaderIndex();length = in.readInt();command = in.readInt();LOG.debug("length:{},command:{}, channelId:{}",length,command,ctx.channel().id().asShortText());if (length > BASE_LENGTH && command == 0xF) {LOG.debug("find command:{},channelId:{}",command,ctx.channel().id().asShortText());break;}in.resetReaderIndex();byte temp = in.readByte();LOG.debug("skip a byte:{},channelId:{}",temp,ctx.channel().id().asShortText());if (in.readableBytes() <= BASE_LENGTH) {LOG.debug("length:{} less than 20,channelId:{}",in.readableBytes(),ctx.channel().id().asShortText());return;}}in.resetReaderIndex();if (in.readableBytes() < length) {LOG.debug("can read:{} less than length:{},channelId:{}",in.readableBytes(),length,ctx.channel().id().asShortText());return;}byte[] data = new byte[length];in.readBytes(data);LOG.debug("success,length:{} data:{},channelId:{}",length,data,ctx.channel().id().asShortText());out.add(data);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值