Paho MQTTPacket Embedded C++ 라이브러리를 사용하여 C++ 코드를 MQTT 브로커에 연결했습니다. 해당 브로커가 io.adafruit.com 일 때 완벽하게 정상적으로 작동합니다. 그러나 제 라즈베리 파이에서 실행중인 내 Mosquitto 인스턴스 인 경우 연결이 실패합니다. 나는 MQTT :: 클라이언트에 MQTTClient.h에서이 라인을 좁혀했습니다 : 연결 방법 :Paho MQTT (C++) 클라이언트가 Mosquitto에 연결하지 못했습니다.
// this will be a blocking call, wait for the connack
if (waitfor(CONNACK, connect_timer) == CONNACK)
응용 약 30 초 여기를 중단하고 CONNACK 이외의 결과를 (얻는다을 0보다 구체적으로 0).
프로토콜 버전 3 (3.1)과 4 (3.1.1)를 모두 시도했습니다. 같은 결과.
My Mosquitto 인스턴스에는 인증 또는 암호가 설정되어 있지 않습니다. Mosquitto 로그에서 디버그 메시지를 켜려고 시도했지만 유용한 것은 표시되지 않습니다. 나는 잃어 버렸다. 내 C++ Paho 코드에서 Mosquitto에 연결할 수없는 이유는 무엇입니까?
EDIT : 여기에 클라이언트 코드가 있습니다 ... 다시이 점은 Adafruit와 잘 작동하지만 localhost에서 Mosquitto를 가리키면 설명대로 중단됩니다. (나는 사용자 이름과 패스워드를 생략했다. 나는 그것들을 보내고있다. 그러나 mosquitto_pub 나 mosquitto_sub를 명령 행으로 사용하면 모스투토가 익명 연결을 허용하십시오.)
const char* host = "127.0.0.1";
int port = 1883;
const char* clientId = "ZoomBridge";
const char* username = "...";
const char* password = "...";
MQTT::QoS subsqos = MQTT::QOS2;
ipstack = new IPStack();
client = new MQTT::Client<IPStack, Countdown, 30000>(*ipstack);
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.willFlag = 1;
data.MQTTVersion = 3;
data.clientID.cstring = (char*)clientId;
data.username.cstring = (char*)username;
data.password.cstring = (char*)password;
data.keepAliveInterval = 20;
data.cleansession = 1;
int rc = ipstack->connect(host, port);
if (rc != MQTT::SUCCESS) {
cout << "Failed [1] (result " << rc << ")" << endl;
return rc;
}
rc = client->connect(data);
if (rc != MQTT::SUCCESS) {
cout << "Failed [2] (result " << rc << ")" << endl;
ipstack->disconnect();
return rc;
}
모기의 어떤 버전을 사용하고 있습니까? – hardillb
모스 킷토 1.4.10 (빌드 날짜 월, 29 5 월 2017 13:43:29 +0100), 지난 주 다운로드 및 설치. 이 Pi의 모든 것은 지난 주 이내에 OS를 포함하여 신선합니다. –
좋아요, 기본 raspbian 번들 버전이 매우 오래된 iirc인지 확인하십시오 (최신 1.4.14, 버그가 있으므로 1.4.13을 건너 뛰십시오) – hardillb