每个人
我正在尝试为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;
}
答案 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));