【问题标题】:Netty 3.5.8-Final - Help on FrameDecoderNetty 3.5.8-Final - FrameDecoder 帮助
【发布时间】:2012-10-04 11:03:28
【问题描述】:

我的帧解码器有以下代码:

protected Object decode(ChannelHandlerContext channelHandlerContext,
        Channel channel, ChannelBuffer channelBuffer) throws Exception {

    //Header 1 + 4 length bytes
    if (channelBuffer.readableBytes() < 5) {
        return null;
    }
    System.out.println(channelBuffer.readerIndex());

    //mark the reader index
    channelBuffer.markReaderIndex();

    //extract the length bytes and convert to an int value 
    //**note: length value of the message is a decimal not hex
    StringBuilder lengthBuilder = new StringBuilder("");
    for (int ctr = 1; ctr < 5; ctr += 1) {
        lengthBuilder.append(String.format("%02x",
                channelBuffer.getByte(ctr)));
    }
    int length = Integer.parseInt(hexToASCII(lengthBuilder.toString()));
    System.out.println("This is the length: " + length);
    System.out.println("reader index: " + channelBuffer.readerIndex());
            channelBuffer.readerIndex(4);

    //get the remaining bytes
    if (channelBuffer.readableBytes() <= length) {
        channelBuffer.resetReaderIndex();
        return null;
    }

    String s = "";
    for (int ctr = 0; ctr < length + 5; ctr += 1) {
        s += (char) channelBuffer.getByte(ctr);
    }

    return s;
}

int length = Integer.parseInt(hexToASCII(lengthBuilder.toString())); 行之前一切正常。在那一行之后,解码器仍然可以读取剩余的字节,但它现在使用实际消息作为长度字段,生成解析异常错误。

说,我有一条消息B0005EHELLO where [B is the header] [0005 - actual message length] [E - header 2] [HELLO - actual message].. 将长度字段解析为整数值后,解码器使用实际消息HELL 的前四个字母来解析长度字段和异常正在制作中。请帮我解决这个问题。

【问题讨论】:

    标签: exception netty decoder


    【解决方案1】:

    已通过将 readerIndex 从 4 更改为 5 来修复。

    channelBuffer.readerIndex(4);

    我还在返回结果之前添加了读取器索引重置,以便它可以读取整个消息而不仅仅是实际消息:)

    channelBuffer.readerIndex(0);
    String s = "";
    for (int ctr = 0; ctr < length + 5; ctr += 1) {
        s += (char) channelBuffer.getByte(ctr);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多