Я новичок в Qt. На самом деле, я хочу проверить, подключен ли Ethernet или нет через приложение qt. Например: когда данные передаются от источника к месту назначения через Ethernet. если я внезапно отключу кабель Ethernet, мое приложение Qt должно выдать какое-то всплывающее сообщение, например «соединение недоступно». Есть ли способ найти этот? Наконец, извините за мой английский.
Как проверить состояние подключения порта Ethernet в Qt?
comment
Если предположить, что вы не используете необработанные кадры Ethernet для передачи данных, а используете TCP/IP, то проверка состояния сетевых интерфейсов, вероятно, не является правильным путем. У пользователя также может быть соединение VPN, PPP или WLAN, пользователь может переключаться между сетями, конечный компьютер может быть отключен от сети... Вы, скорее всего, создадите раздражение для пользователя. Просто доверяйте работе ОС и сети Qt и сообщайте об ошибках, которые вы получаете от Qt для конкретного соединения.
- person hyde   schedule 14.12.2018
Ответы (2)
Возможно, вы захотите рассмотреть API Qt «Bearer Management»:
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;
}
person
paulsm4
schedule
14.12.2018
Если вы работаете в Linux, я нашел где-то хорошую идею, чтобы проверить с помощью QT и QProcess, физически ли подключен Ethernet-кабель.
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
}
}
person
TommySmoke
schedule
10.04.2021