如何在Qt中检查以太网端口连接状态?

时间:2018-12-14 06:58:30

标签: qt ethernet qudpsocket

我是Qt的新手。实际上,我想检查是否通过qt应用程序连接了以太网。 例如:通过以太网将数据从源传输到目标时。如果我突然删除了Qt应用程序的以太网电缆,则会弹出一些消息,例如“连接不可用”。有什么办法可以找到这个吗?最后,抱歉我的英语。

2 个答案:

答案 0 :(得分:0)

您可能要考虑Qt“承载管理” API:

http://doc.qt.io/qt-5/bearer-management.html

例如:

/ Set Internet Access Point
QNetworkConfigurationManager manager;
const bool canStartIAP = (manager.capabilities()
                          & QNetworkConfigurationManager::CanStartAndStopInterfaces);
// Is there default access point, use it
QNetworkConfiguration cfg = manager.defaultConfiguration();
if (!cfg.isValid() || (!canStartIAP && cfg.state() != QNetworkConfiguration::Active)) {
    QMessageBox::information(this, tr("Network"), tr(
                                 "No Access Point found."));
    return;
}

答案 1 :(得分:0)

如果您使用的是 Linux,我在某处找到了一个好主意,可以检查 QT 和 QProcess 是否已物理连接以太网电缆。

QProcess process;
QString sNetCableStatus = "";
process.start("sh", QStringList()<<"-c"<<"grep \"\" /sys/class/net/eth0/carrier");
process.waitForFinished();
sNetCableStatus = process.readAllStandardOutput();
if (sNetCableStatus.length() != 0)
{
    if (sNetCableStatus.left(1) == "1")
    {
        //connected
    }
    else if(sNetCableStatus.left(1) == "0")
    {
        //disconnected
    }
    else
    {
        //that should not happen
    }
}