Paho MQTTPacket Embedded C ++ 라이브러리를 사용하여 MQTT 브로커에 연결하는 C ++ 코드가 있습니다. 해당 브로커가 io.adafruit.com이면 완벽하게 작동합니다. 그러나 내 Raspberry Pi에서 실행되는 내 Mosquitto 인스턴스 인 경우 연결이 실패합니다. MQTT :: Client :: connect 메서드에서 MQTTClient.h의이 줄로 범위를 좁혔습니다.
// this will be a blocking call, wait for the connack
if (waitfor(CONNACK, connect_timer) == CONNACK)
앱이 여기에서 약 30 초 동안 멈춘 다음 CONNACK (특히 2가 아닌 0) 이외의 결과를 얻습니다.
프로토콜 버전 3 (예 : 3.1)과 4 (예 : 3.1.1)를 모두 시도했습니다. 같은 결과.
내 Mosquitto 인스턴스에는 인증 또는 비밀번호가 설정되어 있지 않습니다. Mosquitto 로그에서 디버그 메시지를 켜려고했지만 유용한 정보가 표시되지 않습니다. 나는 헤매고있다. 내 C ++ Paho 코드에서 Mosquitto에 연결할 수없는 이유는 무엇입니까?
편집 : 여기에 클라이언트 코드가 있습니다 ... 다시, 이것은 Adafruit에서 잘 작동하지만 localhost에서 내 Mosquitto를 가리키면 설명대로 중단됩니다. (사용자 이름과 암호를 제거했습니다. 전송 중이지만 명령 줄에서 mosquitto_pub 또는 mosquitto_sub를 사용하면 mosquitto가 다음과 같이 구성되어 있기 때문에 이것에 관계없이 연결할 수 있기 때문에 문제가되지는 않습니다. 익명 연결을 허용합니다.)
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;
}
댓글에서 해시 된대로.
클라이언트 ( data.willFlag = 1;
)에 대한 유언장 (Last Will and Testament)을 설정 하고 LWT에 대한 주제 또는 페이로드를 전달하지 않음 을 나타내도록 플래그를 설정하는 것 같습니다 .
LWT가 필요하지 않은 경우 기본적으로 비활성화되어 있어야하므로 플래그를 0으로 설정 (또는 라인 설정 플래그 제거)합니다.
또한 명확하게 밖으로 가치가 가리키는, 이것은 모든입니다 PAHO 임베디드 C ++ MQTTPacket 클라이언트 가 아닌 전체 고장 PAHO C ++ 클라이언트 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다