当前位置: 首页> 教育> 高考 > (十二)、MQTT3.1.1-MQTT客户端数据结构设计

(十二)、MQTT3.1.1-MQTT客户端数据结构设计

时间:2025/7/11 9:47:54来源:https://blog.csdn.net/zcz_822/article/details/139912307 浏览次数:0次

为进一步实现一个简易的MQTT客户端,做如下客户端数据结构设计。

1、客户端协议相关的函数

连接

tx_connect()

发送连接请求

手动触发

rx_connectack()

接收到服务端回应的连接响应

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据client查找connect。

发布,Qos=0

tx_publish(Qos=0)

手动触发

发布,Qos=1

tx_publish(Qos=1)

手动触发

rx_puback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

发布,Qos=2

tx_publish(Qos=2)

手动触发

rx_pubrec()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

tx_pubrel()

根据pubrec触发

rx_pubcomp()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

订阅

tx_subscribe()

手动触发

rx_suback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据s_uuid查找subscribe。

取消订阅

tx_unsubscribe()

手动触发

rx_unsuback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据s_uuid查找subscribe。

心跳

tx_pingreq()

自动定时触发

rx_pingresp()

断开连接

tx_disconnect

手动触发

2、客户端数据结构

列表Clients{

  Connect;

  TCP/IP;

  Messages;

Subscribes;

Next_client;}

Client对象列表,clinet属性有连接、TCP/IP、未处理完成的消息、未处理完成的订阅,指向下一个clinet的指针。

Connect{

  Protocolname;

  protocolLevel;

  Connectflage;

  Keepalive;

  Clientid;

  Willtopic;

  Willmessage;

  Username;

  Password

connectflage;}

其中:

Connectflage{

Bit Usernameflag;

Bit Passwordflag;

Bit Willretain;

Bit Willqos;

Bit Willflag;

Bit Cleansession;

Bit Reserved;

}

每个client对象都有一个连接结构体,用该参数来与MQTT服务器建立连铸。

TCP/IP{

 IPaddr;

 Port;

 Pingtime;}

Client对象使用的传输物理实现。

列表Messages{

Dup;

Qos;

Retain;

M_uuid;

Messagedata;

Messageflag;

Next_message;}

其中:

Messageflag;

Qos=0:

0->pub;

Qos=1:

0->pub,1->ack

Qos=2:

0->pub,1->ack,2->rel,3->comp

Client对象未处理完成的消息。

列表Subscribes{

Topicfilter;

S_uuid;

Subscribeflag;

Next_subscribe;}

其中:

Subscribeflag;

 0->tx,1->ack

Client对象的订阅。

关键字:(十二)、MQTT3.1.1-MQTT客户端数据结构设计

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: