开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下:
1、这里有一个linux指令:nmcli(见
如何在 Linux 里使用 nmcli 添加网桥 https://www.linuxidc.com/Linux/2018-04/151736.htm)
2、nmcli device status 这个指令就会打印出你想要的东西
3、如何用QT去调取这个指令获取结果来进行上报呢?来一段代码吧
//执行linux指令获取返回结果
QString Common::executeLinuxCmd(QString strCmd)
{
QProcess p;
p.start("bash", QStringList() <<"-c" << strCmd);
p.waitForFinished();
QString strResult = p.readAllStandardOutput();
return strResult;
}
//获取网络状态码
int PLC::networkStatus()
{
QString strDevice = Common::executeLinuxCmd("nmcli device status");
QStringList listDevice = strDevice.split("\n");
QString strBin = "";
QString strWifi = "0";
QString str4G = "0";
QString strWired = "0";
foreach(QString tmpStr , listDevice)
{
QStringList strSplit = tmpStr.split(" ");
QStringList strTotal;
foreach(QString str, strSplit)
{
if(str != "")
{
strTotal.append(str);
}
}
if(strTotal.size() >= 3)
{
if(strTotal.at(2) == "connected")
{
if(strTotal.at(1) == "wifi")
{
strWifi = "1";
}else if(strTotal.at(1) == "ethernet")
{
strWired = "1";
}else if(strTotal.at(1) == "gsm")
{
str4G = "1";
}
}
}
}
strBin.append(str4G).append(strWifi).append(strWired);
int result = binToDec(strBin);
return result;
}
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx