0

みんな。

私は Netty の POC に取り組もうとしていますが、現在 FrameDecoder に 3 時間費やしています。うまくいきません :( クライアントは、次の形式のバイナリ メッセージを送信します。

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

(例H0005HWorld)

メッセージの長さは 10 進形式です。メッセージのヘッダーが の場合H0255H、メッセージの長さは 255 です。LengthFieldBasedFrameDecoder長さフィールドが 16 進数であると想定されているため、 を使用できませんでした。私も使用してみましたが、長さフィールドが10進数形式であるためframedecoder、関数を使用して長さを取得できないため、問題が発生しています。channelBuffer.readInt()

親切にこれを手伝ってください:(

編集:

基本的な FrameDecoder を試してみたところ、次のメッセージが送信されました: 0005Hello The value of the length in the console is 808464436.. Length should be 5and not 808464436right? 私が何かを誤解している場合は、親切に教えてください。:(

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 は、10 進数を読み取る方法を提供していません。自分で簡単にできます。データを文字列に読み取り、Integer.parseInt を使用して値を取得する簡単な (Netty 以外の) 例を次に示します。

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 に答える