GitHub (https://github.com/emqtt/qmqtt)에서 가져온 mqtt-client 용 라이브러리를 사용하는 데 문제가 있습니다. 윈도우 10에서는 MinGW 5.3.0로 이미 인터넷에서 몇 가지 다른 답변을 보았다Qt 및 qmqtt 클라이언트 라이브러리가 Windows에서 작동하지 않습니다.
를 컴파일하지만 대부분이며, Qt는 버전 Qt는 5.7.0과 Qt는 창조주 4.0.3을 사용하여
임 컴파일 또는 링크 오류에 대해.
제 문제는 코드가 예상 한대로 작동하지 않는다는 것입니다 (아무 것도하지 않습니다).
서버/브로커에 연결하는 제목 화면 (위 링크)의 예제에 이미 문제가 있습니다. 그것은 단순히 아무것도하지 않습니다, 나는 심지어 오류 메시지 또는 다른 피드백을받지 않습니다.
내 코드 : 나는 클라이언트 개체
QScopedPointer<QMQTT::Client> client(new QMQTT::Client(QHostAddress("192.168.8.50"), 1883));
주소로 Smartpointer을 가지고 포트가 올바른지, 나는 이미 구글 크롬에 대한 MQTTlens으로이 테스트.
그렇다면 입력과 출력을 처리 할 별도의 클래스가 있습니다 (멀티 스레딩 사용). 이 클래스는 신호를받는 &을 전송하여 클라이언트를 제어하거나 콘솔 출력을 통해 사용자에게 피드백을 제공 할 수 있습니다.
class MainIO : public QObject
{
Q_OBJECT
public:
explicit MainIO(QString clientId = "", QObject *parent = 0);
void mainMenue();
private:
QVector<QString> m_mainMenueStrings;
QString m_clientId;
signals:
void connectToHost();
void disconnectFromHost();
void subscribe(const QString &topic, const quint8 qos);
void unsubscribe(const QString &topic);
void publish(const QMQTT::Message &message);
public slots:
void onClientConnected();
void onClientDisconnected();
void onClientPublished();
void onClientError(const QMQTT::ClientError error);
void onClientReceived(const QMQTT::Message &message);
void add();
void subtract();
};
은 내 주
QThread mainIOThread;
IoTClient::MainIO control(clientId);
control.moveToThread(&mainIOThread);
에 스레드 클래스의 객체를 이동하고 난 스레드
QObject::connect(&mainIOThread, &QThread::started
, &control, &IoTClient::MainIO::mainMenue);
/* Control -> Client */
QObject::connect(&control, &IoTClient::MainIO::connectToHost
, client.data(), &QMQTT::Client::connectToHost);
QObject::connect(&control, &IoTClient::MainIO::subscribe
, client.data(), &QMQTT::Client::subscribe);
QObject::connect(&control, &IoTClient::MainIO::unsubscribe
, client.data(), &QMQTT::Client::unsubscribe);
QObject::connect(&control, &IoTClient::MainIO::publish
, client.data(), &QMQTT::Client::publish);
/* Client -> Control */
QObject::connect(client.data(), &QMQTT::Client::connected
, &control, &IoTClient::MainIO::onClientConnected);
QObject::connect(client.data(), &QMQTT::Client::disconnected
, &control, &IoTClient::MainIO::onClientDisconnected);
QObject::connect(client.data(), &QMQTT::Client::error
, &control, &IoTClient::MainIO::onClientError);
QObject::connect(client.data(), &QMQTT::Client::published
, &control, &IoTClient::MainIO::onClientPublished);
QObject::connect(client.data(), &QMQTT::Client::received
, &control, &IoTClient::MainIO::onClientReceived);
mainIOThread.start();
mainMenue 메소드를 시작하기 전에 슬롯에 신호를 연결 다음과 같습니다 :
void MainIO::mainMenue()
{
std::system("cls");
qDebug().noquote().nospace() << (tr("clients/") + m_clientId +
tr("/state"));
/* Print Menue */
qDebug().noquote().nospace() << "QMQTT-Client";
for (int i = 0; i < m_mainMenueStrings.size(); i++)
{
qDebug().noquote().nospace() << "\t(" << i+1 << ") " <<
m_mainMenueStrings[i];
}
qDebug().noquote().nospace() << "Ihre Auswahl: ";
/* select choice */
int option = -1;
while ((option >= m_mainMenueStrings.size()) || (option < 0)) {
std::cin >> option;
}
option--;
switch(option) {
case 0: emit this->connectToHost();
break;
case 1: add();
break;
case 2: subtract();
break;
case 3: emit this->disconnectFromHost();
break;
default:
qDebug().noquote().nospace() << "Fehlerhafte Eingabe";
}
}
내가 (연결 1) 일부 입력을 보낸 후 아무 반응이 없습니다 _ : (1) (2) ... 를 쓰세요 연결 : 다음 좀처럼 1,363,210
콘솔 출력이 보인다. 나는 어떤 에러 (클라이언트로부터의 에러 신호를 에러 슬롯에 연결했다) 또는 다른 신호를 얻지 못한다.
나는 이미이 연결을 소스 코드에서 테스트 했으므로 결론을 내릴 수 없다. 클라이언트가 브로커에 연결하지 않는다는 것을 (나에게) 이해하지 못하기 때문이다.
코드는 Windows에서만 실패하고 Linux에서는 작동합니다.