Netty:FrameDecoder问题?

时间:2012-10-14 01:00:47

标签: variables netty

每个人

我正在尝试为Netty开发POC,现在我花了3个小时在我的FrameDecoder上。无法使其工作:(客户端将发送具有以下格式的二进制消息:

[Header1] [MessageLength] [Header2] [ActualMessage]

(例如H0005HWorld

消息长度为十进制格式。如果消息的标头是H0255H,则消息长度为255 ..我无法使用LengthFieldBasedFrameDecoder,因为它期望长度字段为十六进制。我也尝试使用framedecoder,但我遇到了问题,因为我不能使用函数channelBuffer.readInt()来获取长度,因为长度字段是十进制格式。

请帮助我:(

编辑:

尝试了基本的FrameDecoder并发送了以下消息:0005Hello 控制台中长度的值为808464436。长度应为5而不是808464436对吗?如果我误解了某些东西,请启发我。 :(

if (channelBuffer.readableBytes() < 4) {
            return null;
         }

channelBuffer.markReaderIndex();

int length = channelBuffer.readInt();
System.out.println(length);

if (channelBuffer.readableBytes() < length) {
 channelBuffer.resetReaderIndex();
 return null;
}

1 个答案:

答案 0 :(得分:0)

Netty没有提供读取十进制数的方法。你可以很容易地做到这一点。这是一个快速(非Netty)示例,将数据读入字符串,然后使用Integer.parseInt获取值。

byte[] buf = {0,2,5,5};
String s = "";
for(int i=0; i < buf.length; i++) {
    s += buf[i];
}
System.out.println(Integer.parseInt(s));