#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代码,因为我对它还是非常陌生。
这花了一段时间,但我想通了。仍然有很多问题需要解决,但至少它会向本地主机发送一个MQTT(Wireshark approved)数据包。
使用以下代码:
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");
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上执行无限循环,但这似乎效率低下。