最近在用Esp8266 Arduino连接阿里云IOT的时候,服务器端老是返回rc=2 的错误!
用了MQTTfx模拟连接阿里云IOT没有问题,但是把同样的ClientID,UserName和Password
用PubSubClient去连接阿里云的时候,就会出现问题.
所以对MQTTfx的发送过程,和PubSubclient的发送过程进行了抓包,
可以发现两种方式连接只有第14个字节内容不同,把pubsubclient的源码捞出来,可以看到:
buffer[length++] =((MQTT_KEEPALIVE) & 0xFF);
这个应该是对KEEPALIVE的请求定义,
MQTT_KEEPALIVE 宏定义为0x0F,经过这里计算后这个字节的结果仍为0x0F,而MQTTfx的为0x3C,找出不同后,把这一句的代码直接改为:
buffer[length++] =0x3C;// ((MQTT_KEEPALIVE) & 0xFF);
然后编译代码,上传到Esp8266,果然很快就连接上阿里云了!
遇到相同问题的同学不妨试下!