MQTT を使用して M2M アプリケーションに取り組んでいます (C# で、それがどのように重要なのかわかりません)。QoS1 でRETAINビット ONのメッセージをブローカーに公開しました。その後、トピックをサブスクライブすると (aQoSが 0 でサブスクライブ)、PUBLISH メッセージが返され、ヘッダーには aQoSが 0 であることが示されます。
私が直面している問題は、トピックの変数ヘッダーにメッセージ ID が含まれていることですが、それがそこにあることをプログラムで知る方法がありません。仕様では、a または 1 または 2 が設定されている場合にのみ MessageID が存在する必要があることを示しているようですQoSが、着信パケットのバイト 0 は明らかに 0x31 (メッセージ タイプPUBLISH、QoS0のメッセージ タイプRETAIN= 1) です。
現時点での私の回避策は、データをデシリアライズすることです。例外が発生した場合は、2 バイト先にジャンプして再試行します。それは機能しますが、確かに私には不器用に感じます。
これは予想される動作ですか?使用しているブローカーに問題がありますか? 私の側の仕様の誤解ですか?