我正试图在我的局域网中获取计算机状态... 考虑使用QTcpSocket,但它并不真正有效,因为端口也应插入:
socket->connectToHost("hostName", portNumber);
if (socket->waitForConnected(1000))
qDebug("Connected!");
有人能告诉我一个更好的方法来检查计算机是否有响应吗?
答案 0 :(得分:1)
int exitCode = QProcess::execute("ping", QStringList() << "-c1" << "hostname");
if (0 == exitCode) {
// it's alive
} else {
// it's dead
}
参数可能有所不同。例如,我相信它在Windows上会ping -n 1 "hostname"
。该示例应适用于大多数非Windows版本。
答案 1 :(得分:1)
您是否尝试检查本地计算机是否在网络上或目标计算机是否在?
没有一个很好的跨平台方式来做到这一点。 qt上最近的是QNetworkInterface,并且检查属性“ISup” - 它不是完美的,如果你有网络电缆但是只连接到路由器,它可能是活动的,如果你有一个3G调制解调器但它不是非活动的打电话。
在Windows上检查InternetGetConnectedState()
答案 2 :(得分:-1)
一种好方法是验证他们是否可以使用QHostInfo解析域名。如果他们可以,那么他们可能有互联网访问:
QHostInfo::lookupHost("www.kde.org", this, SLOT(lookedUp(QHostInfo)));
当然,您也可以尝试连接到主机,这甚至可以更好地证明一切正常。我会异步而不是同步,但它确实是最好的测试。