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