• 测试4G网络是否正常的几种方法


    方法一:ping命令

    #include 
    #include 
    #include 
    #include 
    #include 
    
    bool test4GNetwork()
    {
        std::string url = "http://www.google.com"; // 测试网址
        std::string cmd = "ping -c 1 " + url + " > /dev/null 2>&1"; // 使用ping命令来测试网络连接
    
        int result = std::system(cmd.c_str()); // 运行ping命令
        return (result == 0); // 如果返回值为0表示网络正常,否则表示网络异常
    }
    
    int main()
    {
        if (test4GNetwork())
        {
            std::cout << "4G网络正常" << std::endl;
        }
        else
        {
            std::cout << "4G网络异常" << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    这段代码使用ping命令来测试网络连接。它首先定义了一个测试网址(这里使用了Google作为测试网址),然后通过拼接字符串形式生成ping命令,并使用std::system函数来运行该命令。如果命令返回值为0,则表示网络正常;否则,表示网络异常。

    方法二:使用libcurl库来执行HTTP请求并检查响应状态码

    #include 
    #include 
    #include 
    
    size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response)
    {
        size_t totalSize = size * nmemb;
        response->append((char*)contents, totalSize);
        return totalSize;
    }
    
    bool test4GNetwork()
    {
        std::string url = "http://www.google.com"; // 测试网址
        CURL* curl = curl_easy_init();
        if (curl)
        {
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    
            std::string response;
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    
            CURLcode result = curl_easy_perform(curl);
            long statusCode;
            curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &statusCode);
    
            curl_easy_cleanup(curl);
    
            if (result != CURLE_OK || statusCode != 200)
            {
                return false; // 网络异常
            }
    
            return true; // 网络正常
        }
    
        return false; // 初始化错误
    }
    
    int main()
    {
        curl_global_init(CURL_GLOBAL_ALL);
    
        if (test4GNetwork())
        {
            std::cout << "4G网络正常" << std::endl;
        }
        else
        {
            std::cout << "4G网络异常" << std::endl;
        }
    
        curl_global_cleanup();
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    该代码使用了libcurl库来执行HTTP请求,获取响应中的状态码。它定义了一个回调函数WriteCallback,用于将响应内容保存到字符串中。然后,它使用curl_easy_setopt函数来设置curl实例的相关选项,包括URL、跟随重定向、写入数据的回调函数等。接下来,使用curl_easy_perform函数执行HTTP请求,并使用curl_easy_getinfo函数获取响应的状态码。最后,根据结果判断网络连接的可用性。

    使用socket编程

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    bool test4GNetwork()
    {
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd == -1)
        {
            std::cerr << "Failed to create socket" << std::endl;
            return false;
        }
    
        sockaddr_in serverAddr{};
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_port = htons(80); // 测试使用HTTP的默认端口
        serverAddr.sin_addr.s_addr = inet_addr("8.8.8.8"); // Google的IP地址,可以替换为其他可靠的IP地址
    
        int result = connect(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
        if (result == -1)
        {
            std::cerr << "Failed to connect to server" << std::endl;
            close(sockfd);
            return false;
        }
    
        close(sockfd);
        return true;
    }
    
    int main()
    {
        if (test4GNetwork())
        {
            std::cout << "4G网络正常" << std::endl;
        }
        else
        {
            std::cout << "4G网络异常" << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    这段代码使用了socket函数来创建一个TCP套接字,然后通过connect函数来连接到指定的服务器地址(这里使用了Google的IP地址)。如果连接成功,则表示4G网络正常可用,否则表示网络异常。

    使用C++调用ping命令并获取结果

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    std::string exec(const char* cmd) {
        std::array buffer;
        std::string result;
        std::shared_ptr pipe(popen(cmd, "r"), pclose);
        if (!pipe) {
            throw std::runtime_error("popen() failed!");
        }
        while (!feof(pipe.get())) {
            if (fgets(buffer.data(), 128, pipe.get()) != nullptr) {
                result += buffer.data();
            }
        }
        return result;
    }
    
    bool test4GNetwork()
    {
        std::string output = exec("ping -c 1 www.google.com");
        if (output.find("1 packets transmitted, 1 received") != std::string::npos)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    int main()
    {
        if (test4GNetwork())
        {
            std::cout << "4G网络正常" << std::endl;
        }
        else
        {
            std::cout << "4G网络异常" << std::endl;
        }
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    这段代码使用了exec函数来调用ping命令,并将结果保存在一个字符串中。然后,它搜索输出中是否包含"1 packets transmitted, 1 received"这个字符串来确定是否收到了回复。如果收到了回复,则表示4G网络正常可用,否则表示网络异常。

    使用Boost.Asio库

    #include 
    #include 
    
    bool test4GNetwork()
    {
        boost::asio::io_context ioContext;
        boost::asio::ip::tcp::resolver resolver(ioContext);
        boost::asio::ip::tcp::resolver::query query("www.google.com", "80");
    
        try
        {
            boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(query);
            boost::asio::ip::tcp::socket socket(ioContext);
            boost::asio::connect(socket, it);
            return true;
        }
        catch (const std::exception& ex)
        {
            std::cerr << "Failed to connect to server: " << ex.what() << std::endl;
            return false;
        }
    }
    
    int main()
    {
        if (test4GNetwork())
        {
            std::cout << "4G网络正常" << std::endl;
        }
        else
        {
            std::cout << "4G网络异常" << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    这段代码使用了Boost.Asio库来发起一个TCP连接请求,并尝试连接到指定的服务器地址和端口。如果连接成功,则表示4G网络正常可用,否则表示网络异常。

  • 相关阅读:
    【VCS+Verdi联合仿真】~ 以计数器为例
    jquery中的contentType和processData参数解释
    JWT认证机制(session具有局限性)支持跨域 原理 组成
    酒店订房退房管理系统(数组应用)
    二叉树的前序、中序、后序、层序遍历
    .NET程序配置文件操作(ini,cfg,config)
    vscode 设置代理
    计算机视觉学习笔记(一)
    【生成式网络】入门篇(三):Style Transfer 的 代码和结果记录
    Typecho编辑器,批量文章编辑伪原创改写
  • 原文地址:https://blog.csdn.net/Acquisition0818/article/details/132982401