Mqtt 接收包含QoS为0但具有消息ID的发布消息
我正在使用MQTT(在C#中)开发一个M2M应用程序,但我不知道这有什么关系。我已经向代理发布了一条消息,其中Mqtt 接收包含QoS为0但具有消息ID的发布消息,mqtt,Mqtt,我正在使用MQTT(在C#中)开发一个M2M应用程序,但我不知道这有什么关系。我已经向代理发布了一条消息,其中QoS为1,并且RETAIN位为ON。当我随后订阅该主题时(订阅时QoS为0),我收到一条发布消息,消息头显示它的QoS为0 我遇到的问题是,主题的变量头包含消息ID,但我无法通过编程知道它在那里。规范似乎指出,只有当设置了QoS或1或2时,MessageID才应该出现,但传入数据包的字节0显然是0x31(消息类型为PUBLISH,QoS为0,RETAIN=1) 现在我的解决方法是反序列
QoS
为1,并且RETAIN
位为ON。当我随后订阅该主题时(订阅时QoS
为0),我收到一条发布消息,消息头显示它的QoS
为0
我遇到的问题是,主题的变量头包含消息ID,但我无法通过编程知道它在那里。规范似乎指出,只有当设置了QoS
或1或2时,MessageID才应该出现,但传入数据包的字节0显然是0x31(消息类型为PUBLISH
,QoS
为0,RETAIN
=1)
现在我的解决方法是反序列化数据,如果出现异常,我将向前跳转两个字节,然后重试。这很管用,但我确实觉得很尴尬
这是预期的行为吗?我用的经纪人有问题吗?我对规格有什么误解 从你所说的话来看,肯定有什么不对劲。这不是预期的行为,也不是对规范的误解。QoS 0消息中不应该有消息id
你在用什么经纪人?您可以在test.mosquitto.org:1883上对代理尝试您的代码,看看它的行为是否相同吗?同样,如果现有客户机(如Mosquito_sub)出现问题,那么不是您出了问题。我使用的是Eurotech的Everware设备云代理。闻起来像虫子。我是MQTT的新手,所以我不想这么早就扔掉bug标志。您使用的是哪个C#客户端库?您是否对test.mosquitto.org或m2m.eclipse.org尝试过相同的代码?