如何解决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 举报,一经查实,本站将立刻删除。