0

MQTT を使用して M2M アプリケーションに取り組んでいます (C# で、それがどのように重要なのかわかりません)。QoS1 でRETAINビット ONのメッセージをブローカーに公開しました。その後、トピックをサブスクライブすると (aQoSが 0 でサブスクライブ)、PUBLISH メッセージが返され、ヘッダーには aQoSが 0 であることが示されます。

私が直面している問題は、トピックの変数ヘッダーにメッセージ ID が含まれていることですが、それがそこにあることをプログラムで知る方法がありません。仕様では、a または 1 または 2 が設定されている場合にのみ MessageID が存在する必要があることを示しているようですQoSが、着信パケットのバイト 0 は明らかに 0x31 (メッセージ タイプPUBLISHQoS0のメッセージ タイプRETAIN= 1) です。

現時点での私の回避策は、データをデシリアライズすることです。例外が発生した場合は、2 バイト先にジャンプして再試行します。それは機能しますが、確かに私には不器用に感じます。

これは予想される動作ですか?使用しているブローカーに問題がありますか? 私の側の仕様の誤解ですか?

4

1 に答える 1

0

あなたの言っていることからすると、確かに何かが正しくないように思えます。これは予期された動作ではなく、仕様の誤解でもありません。QoS 0 メッセージにメッセージ ID を含めないでください。

どのブローカーを使用していますか? test.moquitto.org:1883 でブローカーに対してコードを試して、同じように動作するかどうかを確認していただけますか? 同様に、既存のクライアント ( http://mosquitto.org/download/の mosquitto_sub など) に問題がある場合、問題があるのはあなたではありません。

于 2012-08-07T22:56:24.883 に答える