当前位置: 首页 > 知识库问答 >
问题:

发送MQTT包

郑哲彦
2023-03-14
#include "hw_util.h"
#include "MQTTPacket.h"
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
int main (void) {


    int i;
    float temperatura;
    unsigned char buffer[50];





    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    int rc = 0;
    char buf[200];
    int buflen = sizeof(buf);
    MQTTString topicString = MQTTString_initializer;
    char* payload = "I'm Alive";
    int payloadlen = strlen(payload);
    int len = 0;
    data.clientID.cstring = "Testing";
    data.keepAliveInterval = 20;
    data.cleansession=1;
    data.MQTTVersion=3;
    len = MQTTSerialize_connect(buf,buflen,&data);
    topicString.cstring="SampleTopic";
    len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, payload, payloadlen);

    printf("Hello world");
    rc = 0;
    while(1)
    {

        ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);







    }
}

我下载了HiveMQ,它是一个代理,正在运行:

2018-03-05 19:28:08,195信息-在地址0.0.0.0和端口1883上启动TCP侦听器

现在我想做的是向这个代理或Putty发送类似“Hello World”之类的内容,或者显示整个MQTT有效负载的内容。C是如何处理这个的?这些文档帮助我理解了发生了什么,但并没有真正帮助我编写C代码,因为我对它还是非常陌生。

共有1个答案

微生毅
2023-03-14

这花了一段时间,但我想通了。仍然有很多问题需要解决,但至少它会向本地主机发送一个MQTT(Wireshark approved)数据包。

  1. 使用以下库创建MQTT数据包:https://os.mbed.com/teams/MQTT/code/mqttpacket/

使用以下代码:

MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
char buf[200];

MQTTString topicString = MQTTString_initializer;
data.clientID.cstring = "TESTIRAM";
data.keepAliveInterval = 20;
data.cleansession=1;
data.MQTTVersion=3;
len = MQTTSerialize_connect(buf,buflen,&data);
topicString.cstring="ka";
len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, 
topicString, payload, payloadlen);
#include "hw_util.h"
#include "MQTTPacket.h"
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
char buf[200];
int mysock=0;
char *host = "127.0.0.1";
int port = 1883;
mysock = socket(AF_INET, SOCK_STREAM, 0);

AF_INET指定IPv4,而SOCK_STREAM指定TCP。

使用此:

struct sockaddr_in cliaddr;

int rc = 0;
    //initialize the host address

    memset(&cliaddr, 0, sizeof(cliaddr));
    //specify IPv4 protocol
    /*following includes are necessary for this:#include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>*/
    cliaddr.sin_family = AF_INET;
    //intialize the IP address of the host as "127.0.0.1"
    cliaddr.sin_addr.s_addr = inet_addr(host);
    //initialize the port, 1883
    cliaddr.sin_port = htons(port);
    //client has no bind
    //socket()>connect()->send()<->recv()->close
    int statusConn = connect(mysock,(const struct sockaddr*)&cliaddr,sizeof(cliaddr));
    if(statusConn=0){
        printf("Success!");
    }
    if(statusConn=-1){
        printf("Connect unsuccessful!\n");
  1. 通过套接字发送!
while(1)
{
        printf("Sending to hostname %s port %d\n", host, port);
        //infinite loop, sending packets to the specified ASOCKET
        //after sending sleep for 10 seconds
        //sleep uses unistd.h

        printf("Sent packets: ");

        int countSend = send(mysock ,buf,buflen,0);

        printf("%d",countSend);

        printf("\n");
        sleep(10);
}
 类似资料:
  • 我需要你的帮助。我正在用MQTT创建一个程序,它必须执行写在文件上的命令,并将结果发送到主题。我已经设法在终端上执行命令并打印结果,但是当我必须通过MQTT发送它时,它会创建两条消息,是否可以只发送带有结果的消息?我该怎么办?谢谢,我将放置代码,用于读取执行的命令的结果以及它发送给我的两条消息。

  • 更新时间:2019-10-31 10:56:59 节点简介 MQTT发布节点用于将设备的消息进行下发,自定义消息包,获取设备的信息,设备的动态 使用场景 使用MQTT发布节点,可以自定义提醒内容,下发设备的状态数据,下发设备信息,方便用户获取设备的信息,通常用于获取设备信息。 配置项 心跳配置 CONNECT指令中需包含Keep Alive(保活时间)。 保活心跳时间取值范围为30至1200秒。如

  • 我后来理解对了。实际上,我需要一条来自android客户端的MQTT消息发送到所有其他客户端,所以我想在消息正文中包含publish关键字,这是非常错误的。MQTT本身将接收到的消息发送给所有提供的客户端,如果客户端订阅了该主题的话。

  • 说明 此协议用于在客户端模拟测试推送MQTT消息(测试使用,需要联系果盘开发人员开通测试主题推送权限) 请求地址 http://t1.dc78.cn/MqttAuth/testPush 请求方式 POST 请求参数 参数 参数名称 必填 描述 范例 topic 消息主题 是 mqtt订阅的主题 ms_6786或table_6786 msg 消息体 是 对应协议中的消息体数据,json格式 返回 {

  • 我目前正在使用python处理一个MQTT客户机,现在我可以创建发布和订阅Mosquitto代理的客户机。 如果实际需要,我很乐意为客户机提供代码。 稍后编辑:也许值得一提的是 如果在一个主题上有更多的订阅者,这种行为是不可观察的,代理发送数据包而不会在任何时候停止。

  • 有人知道我在哪里可以得到一些示例MQTT客户端Go(golang)代码,它在无限循环中发布和订阅? null 下面是我正在使用的代码: 我翻阅了GoDocs寻找一些关于如何保持连接畅通的提示,但似乎没有什么相关的。我当然可以在subscribe上执行无限循环,但这似乎效率低下。