Netty粘纸包,通信中的拆包问题

问题描述

我在程序中遇到了Netty Pack问题。我的程序是这样的:

        protected void encode(ChannelHandlerContext channelHandlerContext,OriginMessageEntity message,ByteBuf byteBuf){

    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        if(message.getProtocolVersion()!=null)
            outputStream.write(message.getProtocolVersion());
        else outputStream.write(PrintConstants.PROTOCOL_HEADER_PROTOCOL_NUMBER);

        if(message.getByteLength()!=null)
            outputStream.write(message.getByteLength());
        else outputStream.write(PrintConstants.MESSAGE_DEFAULT_BYTELENGTH);

        if(message.getCmdType()!=null)
            outputStream.write(message.getCmdType());
        else outputStream.write(PrintConstants.MESSAGE_DEFAULT_CMDTYPE);

        if (message.getData() != null) outputStream.write(message.getData());

        byteBuf.writeBytes(outputStream.toByteArray());

    } catch (Exception e) {
        logger.error("error。",e);
    }
}

我们使用以下协议制作协议:ProtocolVersion,数据长度,命令类型,数据。 数据长度字段记录数据字段的长度。 大多数情况下,程序运行良好。但有时,数据长度字段不等于数据字段的长度。例如:长度字段:400,实际数据长度:398。

出什么问题了? netty是否能够控制数据包,而不丢失数据或添加数据?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)