【问题标题】:how to check computer's state using Qt?如何使用 Qt 检查计算机的状态?
【发布时间】:2010-04-08 15:41:05
【问题描述】:

我正在尝试获取局域网中计算机的状态... 考虑过使用 QTcpSocket 但它并不是真正有效,因为端口也应该插入为:

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

谁能给我一个更好的方法来检查计算机是否响应?

【问题讨论】:

  • 您是在尝试确定本地机器的连接性还是远程机器的连接性?

标签: qt networking


【解决方案1】:

一个好方法是验证他们是否可以使用QHostInfo 解析域名。如果可以,那么他们很可能可以访问互联网:

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

当然,您也可以尝试连接到主机,这更好地证明了一切正常。我会异步而不是同步进行,但这确实是最好的测试。

【讨论】:

  • 另一台机器可能会死机,但仍然有一个活动的 DNS 条目。
  • 是的,然后您是否可以ping它或解析主机名都没有关系。在这种情况下,正如我所说,最好的方法是真正尝试连接到它。
【解决方案2】:

ping

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

参数可能会有所不同。例如,我相信在 Windows 上会是 ping -n 1 "hostname"。该示例应该适用于大多数非 Windows 版本。

【讨论】:

  • 一些防火墙会阻止它,它需要一个外部系统调用。这当然不太理想。
  • 抱歉,不能再投票了。它看起来是 Qt 中唯一可靠的方法:-)
【解决方案3】:

您是在尝试检查您的本地计算机是否在网络上,或者目标计算机是否在网络上?

没有很好的跨平台方式来做到这一点。 qt 上最近的是QNetworkInterface,并检查属性“ISup” - 它并不完美,如果您连接了网线但仅连接到路由器,它可能处于活动状态,如果您有 3G 调制解调器但未打开,则它可能处于非活动状态一个电话。

在 Windows 上检查 InternetGetConnectedState()

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2010-12-06
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2012-10-23
    • 2018-04-16
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多