Как проверить состояние компьютера с помощью Qt? - PullRequest
2 голосов
/ 08 апреля 2010

я пытаюсь получить состояние компьютера в моей локальной сети ... думал об использовании QTcpSocket, но это не очень эффективно, так как порт также должен быть вставлен как:

socket->connectToHost("hostName", portNumber);
if (socket->waitForConnected(1000))
     qDebug("Connected!");

Может ли кто-нибудь продемонстрировать мне лучший способ проверить, реагирует ли компьютер?

Ответы [ 3 ]

1 голос
/ 08 апреля 2010

Вы пытаетесь проверить, находится ли ваш локальный компьютер в сети или целевой компьютер?

Нет хорошего кроссплатформенного способа сделать это. Ближайший на qt - QNetworkInterface , и проверьте атрибут "ISup" - он не идеален, он может быть активным, если у вас есть сетевой кабель, но только к маршрутизатору, и неактивным, если у вас есть 3G-модем, но не на вызов.

В Windows проверьте InternetGetConnectedState ()

1 голос
/ 08 апреля 2010

настольный

int exitCode = QProcess::execute("ping", QStringList() << "-c1" << "hostname");
if (0 == exitCode) {
    // it's alive
} else {
    // it's dead
}

Аргументы могут отличаться. Например, я считаю, что это будет ping -n 1 "hostname" в Windows. Пример должен работать на большинстве версий, отличных от Windows.

0 голосов
/ 08 апреля 2010

Один хороший способ - просто убедиться, что они могут разрешать доменные имена, используя QHostInfo . Если они могут, то они, вероятно, имеют доступ к Интернету:

QHostInfo::lookupHost("www.kde.org", this, SLOT(lookedUp(QHostInfo)));

Конечно, вы можете просто попытаться подключиться к хосту, что является еще одним доказательством того, что все работает правильно. Я бы сделал это асинхронно, а не синхронно, но это действительно лучший тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...