请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于数据长度不对的疑问

循环发送信息的时候,为什么会出现一部分对一部分异常的情况诶?是因为网络传输丢包的问题还是其他什么问题诶?

正在回答 回答被采纳积分+3

1回答

conan老师 2023-02-14 11:16:36

贴一下错误的代码和报错。是客户端报错还是服务端?

0 回复 有任何疑惑可以回复我~
  • 提问者 曹学习 #1
    public class MyDecodecer extends ByteToMessageDecoder {
    
    
        //数据长度 + 数据
        @Override
        protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
            //小于四个字节表示数据不够(不够一个int的长度--数据长度值)
            if(in.readableBytes() < 4){
                return;
            }
            //假设数据长度10000, 则4 + 10000才能表示我们的数据,但是有可能因为网络问题上面的只接受到4+9999的数据,这就是脏数据
            int i = in.readInt();
            // 如果实际的可读数据小于指定的数据长度表示传输有问题直接返回
            if(in.readableBytes() < i){
                in.resetReaderIndex();
                return;
            }
            byte[] data = new byte[i];//10000
            in.readBytes(data);
            System.out.println(new String(data));
            in.markReaderIndex();//10004
        }
    }
    回复 有任何疑惑可以回复我~ 2023-02-14 11:18:44
  • 提问者 曹学习 #2
    就是这里的
    if(in.readableBytes() < i){
                in.resetReaderIndex();
                return;
            }
    回复 有任何疑惑可以回复我~ 2023-02-14 11:19:06
  • 报错信息呢
    回复 有任何疑惑可以回复我~ 2023-02-14 11:20:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信