0

每个人。

我正在尝试为 Netty 开发 POC,现在我在 FrameDecoder 上花了 3 个小时。不能让它工作:( 客户端将发送一个具有这种格式的二进制消息:

[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;
}
4

1 回答 1

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));
于 2012-10-15T11:36:23.987 回答