토끼-MQTT + PMQTT 프로토콜 + paho 라이브러리 (ubuntu16.04)

출처: 인터넷
작성자: 사용자
키워드: 클라우드 컴퓨팅 MQTT PMQTT 프로토콜 PAHO 라이브러리

토끼-MQTT + PMQTT 프로토콜 + paho 라이브러리 (ubuntu16.04).

단계

1 설치 Rabiit mq Mqtt-서버 다운로드
그냥 뎁 가방을 사용 합니다.
또 다른 필요
sudo-설치 얻을 Erlang

2 시작
Sudo/etc/init.d/rabbitmq-server 다시 시작

3 3.1 mqtt 프로토콜 지원
Rabbitmq-플러그인 사용 Rabbitmq_mqtt

4 오픈 시작 웹 관리
Rabbitmq-플러그인 사용 Rabbitmq_management

5 다운로드 컴파일 PAHO CPP

C에서 패키지 6 실행 Mqtt 술집/하위 예제에서는 + + Hapowapper, Protoc buf와 결합

컴파일: g + + main.cpp-o-lpaho-mqtt3c-std = c + + 11 코드

C + +-hapowapper.h 낮은 아이누어 C 호출 라이브러리 캡슐화

Main.cpp

#include #include #include Std::cout;를 사용 하 여 "hapoWapper.h" Std::endl;를 사용 하 여 Std::shared_ptr;를 사용 하 여 #define 58daf13e258951000ab2b38f"주소"127.0.0.1:1883"#define CLIENTID" #define TOPIC1 "바로 사람" #define TOPIC2 말 남자 "Const char * 토큰 =" ybljnekvdovypfjo7ejztfvoya94xv4gbuvb9u85kjy = "; void fdelivered (void * 컨텍스트, Mqttclient_deliverytoken dt) {printf ("토큰 값 %d 배달 confirmed\n 메시지", D T); int Fmsgarrvd (void * 컨텍스트, char * topicname, int topiclen, mqttclient_message * 메시지) {int 나 char * payloadptr; 인화 TF ("메시지 arrived\n"); printf ("topic:%s\n", topicname); printf ("메시지:"); 경우 (! strcmp (Topicname, topic1)) {printf ("있어 토큰 크기 = %d,%s\n", 메시지-payloadlen, (char *) 메시지-> 페이로드) ; Payloadptr = (char *) 메시지 페이로드;-> 대 한 (나 = 0 Ipayloadlen; i + +) {Putchar (* payloadptr + +);} putchar (' \ n '); Mqttclient_freemessage (& 메시지); Mqttclient_free (topicname); 1; 반환 } Fconnlost 무효 (void * 컨텍스트, char * 원인) {printf ("\nconnec기 lost\n "); printf ("Cause:%s\n", 원인); 주요 int (int argc, char * argv[]) {mqttclient_connectoptions conn_opts = Mqttclient_connectoptions_initializer; conn_op Ts.keepaliveinterval = 20; Conn_opts.cleansession = 1; Clientparams 성명서 (주소, clientid, conn_opts); Cbgroups CBS (FCONNLOST, FDELIVERED, FMSGARRVD); Pahowapper WAP (성명서); Wap.connect (CBS); printf ("Subcribe topic:%s%s\n", topic1, topic2); Wap.subscribe (topic2, 1); Wap.subscribe (topic1, 1); printf ("topic:%s\n와 게시", TOPIC2); 자동 단어 = "Coooooooool"; Wap.publish (Topic2, 단어, strlen (단어), 1); 숯불 채널; 할 {ch = getchar (), 동안 (ch! 'q' = & & 채널! = 'Q'); 0; 반환 }

HapoWapper.h

#ifndef hapo_wapper_h #define HAPO_WAPPER_H #include "MQTTClient.h" #include #include 형식 void (* connlost) (void *, 차 r *); typedef void (* 배달) (void * 컨텍스트, Mqttclient_deliverytoken dt); typedef INT (* MSGARRVD) (void * 컨텍스트, char * topicname, int topiclen, mqttclient_message * 메시지); Clientparams 클래스 {공공: clientparams () {}; ~ clientparams () {}; const char * _server_uri; const char * _client_id; Mqttclient_connectoptions _conn_opts; Clientparams (const char * a, const char * B, const mqttclient_connectoptions & O): (a), _client_id (b), _conn_ _server_uri (O) {}; oPTs Clientparams & 연산자 (const CLIENTPARAMS 및 CP) = {경우 (& CP이 = =) 반환 *이; _server_uri = Cp._server_uri ; _client_id = cp._client_id; _conn_opts = cp._conn_opts; 반환 *; }; }; 클래스 Cbgroups {공공: connlost CONNECT_CB 전달 된 DELIVERED_CB; MSGARRVD MSGARRVD_CB (cbgroups C, connlost D, MSGARRVD m): CONNECT_CB (c), DELIVERED_CB (d), MSGARRVD_CB (m) {}; }; Pahowapper 클래스 {공개:Pahowapper () {}; ~ pahowapper () {}; Pahowapper (const CLIENTPARAMS & 성명서) {_paras = 성명서; printf ("%s의 클라이언트 access%s\n", _paras._client_id, _paras._ser Ver_uri); Mqttclient_create (및 _client, _paras._server_uri, _paras._client_id, Mqttclient_persistence_none, NULL); }; int 연결 (const cbgroups & CBS) {int rc; Mqttclient_setcallbacks (_client, CBS.DELIVERED_CB, CBS.MSGARRVD_CB, CBS.CONNECT_CB, NULL); 경우 (rc = Mqttclient_connect (_client, 및 (_paras._conn_opts))! = mqttclient_success) {printf ("연결 하지 못했습니다, Retu RN code%d\n, RC); 출구 (-1); RC; 반환 }; 연결 끊기 (void) {Mqttclient_disconnect (_client, 10000); Mqttclient_destroy (및 _client); }; 게시 취소 (const char * 주제, const void * 페이로드, int len, int qos_lvl) {Mqttclient_message pubmsg = Mqttclient_messa Ge_initializer; Mqttclient_deliverytoken 토큰; Pubmsg.payload = (void *) 페이로드; Pubmsg.payloadlen = 렌; Pubmsg.qos = QOS_LVL; pubmsg.retained = 0; Mqttclient_publishmessage (_client, 주제, 및 pubmsg, & 토큰); printf ("게시 of%s\n에 대 한 대기" ""ClientID:%s\n 사용 하 여 클라이언트에 대 한 항목 %s "에 게, (char *) 페이로드, 주제, _paras._clie NT_ID); }; 구독을 무효화 (const char * 주제, int qos_lvl) {mqttclient_subscribe (_client, 주제, QOS_LVL); 개인: mqttclient _client; Clientparams _paras; }; #endif
관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 Alibaba Cloud의 공식 의견이 아닙니다.이 페이지에서 언급 된 제품 및 서비스는 Alibaba Cloud와는 관련이 없으므로이 페이지의 내용이 골칫거리 인 경우 저희에게 알려주십시오. 우리는 5 일 근무일 이내에 이메일을 처리 할 것입니다.

커뮤니티에서 표절 사례를 발견한 경우 info-contact@alibabacloud.com 으로 관련 증거를 첨부하여 이메일을 보내주시기 바랍니다. 당사 직원이 영업일 기준 5일 내에 연락 드리도록 하겠습니다.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.