我编写了一个简单的程序来观察MQTT连接状态。
MQTT库选择
只执行、连接,而不执行其他操作,如client.loop(保持连接) MQTT断开连接。
连接成功并等待约22秒后,TCP发送FIN、ACK和RST、ACK。
TCP是否超时?以及如何从Wireshark了解TCP超时值和查看会话。
客户端: ESP8266 <-> MQTT代理: Windows
代码:
void MQTT_Setup(){
client.setServer(MQTT_SERVER, MQTT_PORT);
//client.setCallback(callback);
MQTT_Connect();
}
void MQTT_Connect(){
bool bMQTT;
bMQTT = client.connect("ESP");
Serial.println("MQTT Connected");
if(bMQTT)MQTT_Disconnect();
//MQTT_Publish();
}
void setup() {
Serial.begin(BAUDRATE);
delay(3000);
WIFI_Setup();
MQTT_Setup();
}
void loop() {
//client.loop();
}Wireshark:

发布于 2020-08-01 17:02:59
可以在PubSubClient.h的第36行找到PubSubClient的默认MQTT Keep alive值
缺省值为15秒,代理将等待1.5秒保持活动状态,如果没有收到来自客户端的数据包,则丢弃连接。
15 * 1.5 ~= 22 seconds这就是连接被关闭的原因。如果需要,client.loop()函数将发送所需的ping数据包以保持连接处于活动状态。
https://stackoverflow.com/questions/63202988
复制相似问题