using namespace std;
bool checkNet()
{
try{
vector<string> v;
std::array<char, 128> buffer;
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen("ping www.baidu.com -c 2 -w 2 ", "r"), pclose);
if (!pipe) {
throw std::runtime_error("popen() failed!");
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
std::cout<<"qqq: "<<buffer.data()<<endl;
v.push_back(buffer.data());
}
//读取倒数第二行 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
if (v.size() > 1)
{
string data = v[v.size()-2];
std::cout<<"1qqq data: "<<data<<endl;
int iPos = data.find("received,");
if (iPos != -1 )
{
data = data.substr(iPos-3,3);//截取字符串返回packet loss
std::cout<<"qqq data: "<<data<<endl;
int n = atoi(data.c_str());
std::cout<<"qqq n: "<<n<<endl;
if(n == 0)
return 1;
else
return 0 ;
}else{
int iPos2 = data.find("已接收");
if (iPos2 != -1 )
{
data = data.substr(iPos+10,3);//截取字符串返回packet loss
std::cout<<"2qqq data: "<<data<<endl;
int n = atoi(data.c_str());
std::cout<<"2qqq n: "<<n<<endl;
if(n == 0)
return 1;
else
return 0 ;
}
}
}else{
return 1;
}
}catch (std::exception e){
cout<<e.what()<<endl;
logWriteSql("1.checkNet() 判断是否有网络 error");
}
//cout<<"checkNet 4444: "<<endl;
}
int main()
{
//网络连接情况
if (!checkNet())
{
cout<<"网络连接成功"<<endl;
}
else
{
cout<<"网络连接失败"<<endl;
}
}
linux环境下 c++ 检查网络连接状态api
于 2022-03-31 17:51:53 首次发布