/*** 基本长度(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);
java netty自定义协议,如何解决netty自定义协议粘包分包问题
最新推荐文章于 2024-06-29 21:33:16 发布