dgr*_*rat 9 c++ qt ping qtnetwork qabstractsocket
目前,我使用此代码检索目标系统的ping.但是它到目前为止只能在linux下工作,它可能依赖于语言环境设置.添加对Windows的支持可能会更复杂.是否有一种简单的方法或库来获取目标系统的ping?我主要使用Qt,所以如果我可以使用QSockets,那将是理想的.
#ifndef _WIN32
QProcess ping;
ping.start("ping", QStringList() << "-c 1" << m_sHostName);
if(ping.waitForFinished(250) ) {
while(ping.canReadLine()) {
QString line = ping.readLine();
if(line.contains("time=")) {
int iStart = line.indexOf("time=") + 5;
int iStop = line.indexOf(" ms");
QStringRef latency(&line, iStart, iStop-iStart);
m_vNetwork_s.append(time_s);
m_vLatency_ms.append(QString(latency.toLocal8Bit()).toDouble());
break;
}
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
Nej*_*jat 13
您可以使用以下命令在Windows和Linux上ping:
QStringList parameters;
#if defined(WIN32)
parameters << "-n" << "1";
#else
parameters << "-c 1";
#endif
parameters << m_sHostName;
int exitCode = QProcess::execute("ping", parameters);
if (exitCode==0) {
// it's alive
} else {
// it's dead
}
Run Code Online (Sandbox Code Playgroud)
小智 8
Nejat的代码对我来说也不适用.也许它是Windows特定的(在Windows 7 x64 + Qt 5.6上测试).Ping命令似乎是不同的参数和值,需要在创建QProcess时将它们分开.
因此,不需要一次性传递"-n 1",而是需要分别传递"-n"和"1".
基本上,使用Nejat的代码将是:
int exitCode = QProcess::execute("ping", QStringList()
<< "-n" << "1"
<< m_sHostName);
if (exitCode==0) {
// it's alive
} else {
// it's dead
}
Run Code Online (Sandbox Code Playgroud)
现在经过测试和工作.