
# 使用开源C语言库连接MQTT Broker
#### 操作场景
[MQTT](https://zh.wikipedia.org/wiki/MQTT)是一种发布/订阅模式的消息协议，能够在硬件性能低下的远程设备以及网络状况糟糕的情况下工作。
本文介绍一种开源的C语言库Eclipse Paho C Client Library连接使用IEF的内置MQTT Broker。
#### 操作步骤
1. 准备一台Linux机器，下载源码。 
   **git clone https://github.com/eclipse/paho.mqtt.c.git**
   或直接在<https://github.com/eclipse/paho.mqtt.c>页面下载zip包，然后解压。
   ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001095675516.png "点击放大")
   
   
2. 安装编译依赖工具。 
   Ubuntu系统执行如下命令。
   **apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui**
   **apt-get install fakeroot fakeroot devscripts dh-make lsb-release**
   **apt-get install libssl-dev**
   **apt-get install ninja-build**
   CentOS系统执行如下命令。
   **yum install build-essential gcc make cmake cmake-gui cmake-curses-gui**
   **yum install fakeroot fakeroot devscripts dh-make lsb-release**
   **yum install openssl-devel**
   **yum install ninja-build**
   
   
3. 修改示例程序代码。 
   在源码的"src/samples/ paho_cs_pub.c"文件中，增加如下行。
   **ssl_opts.enableServerCertAuth =0;**
   ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001142034675.png "点击放大")
   在"src/samples/paho_cs_sub.c"文件中增加如下行。
   ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001142154805.png "点击放大")
   
   
4. 编译示例程序。 
   **mkdir /tmp/build.paho**
   **cd /tmp/build.paho**
   **cmake -GNinja -DPAHO_BUILD_STATIC=TRUE -DPAHO_BUILD_SHARED=FALSE -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_SAMPLES=TRUE** *{paho.mqtt.c目录}*
   **ninja package**
   其中 *{paho.mqtt.c目录}*为paho.mqtt.c源码所在的目录，如"/root/work/paho.mqtt.c"。
   
   
5. 进入编译之后的目录，将编译生成的二进制文件"paho_cs_pub"和"paho_cs_sub"拷贝至边缘节点上。 
   **cd /tmp/build.paho/src/samples/**
   ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001142036215.png "点击放大")
   
   
6. 下载边缘节点证书。 
   1. 登录IEF控制台，在左侧选择"边缘资源 \> 边缘节点"，在右侧单击边缘节点名称，进入边缘节点详情页。选择"证书"页签，单击"添加证书"。
      图1添加证书   
      ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001095517586.png "点击放大") 
   
   2. 在弹出的窗口中输入证书名称，单击"确定"。
   
   3. 将下载好的证书，拷贝至边缘节点，并解压。
   
   
   
   
7. 运行示例程序。 
   以发布消息到指定topic为示例，查看"paho_cs_pub"命令指导。
   ![](https://support.huaweicloud.com/bestpractice-ief/zh-cn_image_0000001142041509.png "点击放大")
   发布消息示例如下：
   **./paho_cs_pub -c ssl://127.0.0.1:8883 -q** 0**-m** "xxx"**-t** "aaa"**--cert** /root/mqtt_cert/xOEMIsYVpw_private_cert.crt**--key**/root/mqtt_cert/xOEMIsYVpw_private_cert.key
   这条命令向内置MQTT Broker名为"aaa"的Topic发送了内容为"xxx"的消息，其中"127.0.0.1:8883"为边缘节点内置MQTT Broker的地址，"/root/mqtt_cert/xOEMIsYVpw_private_cert.crt"和"/root/mqtt_cert/xOEMIsYVpw_private_cert.key"为边缘节点证书。
   
   
 
