用c plus plus 14 写一个函数,判断网络连接正常
时间: 2023-06-06 15:07:59 浏览: 161
很高兴回答您的问题。以下是一个可以判断网络连接是否正常的 C++14 函数的示例代码:
```c++
#include <iostream>
#include <cstdlib>
#include <chrono>
#include <thread>
#include <cstring>
#define TIMEOUT 3000 // 定义超时时间,单位毫秒
bool isNetworkConnected() {
std::string hostname = "www.baidu.com"; // 这里可以自己设置用来检测网络连接的网站
std::string response;
char buffer[128];
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
std::string pingCmd = "ping " + hostname + " -n 1 -w " + std::to_string(TIMEOUT);
#else
std::string pingCmd = "ping " + hostname + " -c 1 -W " + std::to_string(TIMEOUT / 1000);
#endif
FILE* pipe = popen(pingCmd.c_str(), "r");
if (!pipe) return false;
while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
response += buffer;
}
pclose(pipe);
if (response.find("TTL=") != std::string::npos || response.find("ttl=") != std::string::npos) {
return true;
}
return false;
}
int main() {
std::cout << "Checking network connection..." << std::endl;
int retryTimes = 3;
bool isConnected = false;
while (retryTimes > 0) {
isConnected = isNetworkConnected();
if (isConnected) break;
std::cerr << "Network disconnected!" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 等待一秒后重试
retryTimes--;
}
if (isConnected) {
std::cout << "Network connected!" << std::endl;
} else {
std::cout << "Network still disconnected after retrying!" << std::endl;
}
return 0;
}
```
这个函数通过执行系统的 ping 命令来判断是否可以连接到指定的网站。在 Windows 和 Unix/Linux 环境下都可以运行。由于中国的防火墙限制,可能不是所有的网站都可以通过 ping 命令来测试连接,建议使用国内的一些热门网站(如百度、阿里巴巴等)进行测试。
阅读全文