Я использую Qprocess для выполнения ping, чтобы проверить, находится ли хост в сети или нет ...
Проблема в том, что код выхода, который я получаю из сигнала Qprocess-> закончен, всегда равен 2 независимо от того, пингую ли я доступный хост или недоступный ..
Я постоянно отправляю ping в QTimer на хост (чью единственную папку я смонтировал на клиенте, где запущено приложение Qt) ...
когда я улавливаю код выхода, возвращенный пингом в слоте, подключенном к QProcess-> готовый сигнал .. я всегда получаю код выхода как 2 ..
Я не могу использовать прямой системный вызов через систему (пинг), так как он зависает в моем приложении, пока пинг активен ...
я хочу, чтобы он был асинхронным, поэтому я переключился на QProcess ...
следующий фрагмент кода:
//Pinging function called inside a timer with timout 1000
QString exec="ping";
QStringList params;
if(!dBool)
{
//params << "-c1 1.1.1.11 -i1 -w1;echo $?";
params <<" 1.1.1.11 -i 1 -w 1 -c 1";//wont ping
cout<<"\n\npinging 11 ie wont ping";
}
else
{
//params << "-c1 1.1.1.1 -i1 -w1;echo $?";
params <<" 1.1.1.1 -i 1 -w 1 -c 1";//will ping
cout<<"\n\npinging 1 ie will ping";
}
ping->start(exec,params);
// the slot that connects with QProcess->finished signal
void QgisApp::pingFinished( int exitCode, QProcess::ExitStatus exitStatus )
{
cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus;//always 2,0!!
if(exitCode==0)
//if(dBool)
{
connectivity=true;
cout<<"\n\nONLINE";
}
else
{
connectivity=false;
cout<<"\n\nOFFLINE";
}
}
cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus
строка всегда дает 2,0 в качестве вывода, независимо от того, проверено ли значение 1.1.1.1 или проверено 1.1.1.11
на терминале 1.1.1.1 - pingable, а 1.1.1.11 - нет (я переключаю bw ips через флаг dBool, который устанавливается для события нажатия клавиши, чтобы имитировать онлайн / офлайн хост, чтобы мое приложение могло вести себя соответственно)
Любые входные данные будут очень полезны ..
Спасибо.