警告: 反复QProcess还是会出现内存泄露。不适合反复Ping探测。最好还是自己写ICMP协议。
我的主要代码:
QProcess pingProcess;
QString strArg = "ping " + strPingIP + " -n 1 -i 2"; //strPingIP 为设备IP地址
pingProcess.start(strArg,QIODevice::ReadOnly);
pingProcess.waitForFinished(-1);
QString p_stdout = QString::fromLocal8Bit( pingProcess.readAllStandardOutput());
qDebug()<<p_stdout ;
bool bPingSuccess = false;
if(p_stdout.contains("TTL=")) //我采用这个字符来判断 对不对?
{
bPingSuccess = true;
}else
{
bPingSuccess = false;
}
PS:实验是可以的! 没有大规模测试!
PS: 反复的调用start会有缓慢的内存泄露,没找到好的解决办法,暂时采纳:{QProcess构造——start——QProcess析构} 循环执行
参考文章:
how-to-detect-network-is-unreachable-via-ping-using-qprocess
....
参考代码为:
//没实验成功,思路符合
QProcess pingProcess;
QString exec = "ping";
QStringList params;
params << "-c" << "1" << IP;
pingProcess.start(exec,params,QIODevice::ReadOnly);
pingProcess.waitForFinished(-1);
QString p_stdout = pingProcess.readAllStandardOutput();
QString p_stderr = pingProcess.readAllStandardError();
//这段代码 我在Linux上测试可以,但是windows永远是0 == exitCode
bool ping_ip(QString ip)
{
int exitCode;
#ifdef _TTY_ARMV4_
QString strArg = "ping -s 1 -c 1 " + ip; //linux平台下的格式
#else
QString strArg = "ping " + ip + " -n 1 -i 2"; //windows下的格式
#endif
exitCode = QProcess::execute(strArg);
if(0 == exitCode)
{
//it's alive
qDebug() << "shell ping " + ip + " sucessed!";
return true;
}
else
{
qDebug() << "shell ping " + ip + " failed!";
return false;
}
}
QProcess pingProcess; QString strArg = "ping " + strPingIP + " -n 1 -i 2"; //strPingIP 为设备IP地址 pingProcess.start(strArg,QIODevice::ReadOnly); pingProcess.waitForFinished(-1); QString p_stdout = QString::fromLocal8Bit( pingProcess.readAllStandardOutput());
qDebug()<<p_stdout ;
bool bPingSuccess = false;if(p_stdout.contains("TTL=")) //我采用这个字符来判断 对不对?{ bPingSuccess = true;}else{ bPingSuccess = false;}