zoukankan      html  css  js  c++  java
  • 检测网络是否有效

    //检测网络是否有效
    
    - (BOOL) checkNetworkIsValid {
    
        struct sockaddr_in zeroAddress;
    
        bzero(&zeroAddress, sizeof(zeroAddress));
    
        zeroAddress.sin_len = sizeof(zeroAddress);
    
        zeroAddress.sin_family = AF_INET;
    
        
    
        
    
        SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    
        SCNetworkReachabilityFlags flags;
    
        
    
        BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    
        CFRelease(defaultRouteReachability);
    
        
    
        if (!didRetrieveFlags) {
    
            return NO;
    
        }
    
        
    
        BOOL isReachable = flags & kSCNetworkFlagsReachable;
    
        BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    
        // = flags & kSCNetworkReachabilityFlagsIsWWAN;
    
        BOOL nonWifi = flags & kSCNetworkReachabilityFlagsTransientConnection;
    
        BOOL moveNet = flags & kSCNetworkReachabilityFlagsIsWWAN;
    
        
    
        return ((isReachable && !needsConnection) || nonWifi || moveNet) ? YES : NO;
    
    }
    #import "CheckNetwork.h"
    #import <netinet/in.h>
    #import <SystemConfiguration/SCNetworkReachability.h>
    
    @implementation CheckNetwork
    + (BOOL) connectedToNetwork
    {
        //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
        struct sockaddr_in zeroAddress;
        bzero(&zeroAddress, sizeof(zeroAddress));
        zeroAddress.sin_len = sizeof(zeroAddress);
        zeroAddress.sin_family = AF_INET;
        
        // Recover reachability flags
        SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
        SCNetworkReachabilityFlags flags;
        //获得连接的标志
        BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
        CFRelease(defaultRouteReachability);
        //如果不能获取连接标志,则不能连接网络,直接返回
        if (!didRetrieveFlags)
        {
            return NO;
        }
        //根据获得的连接标志进行判断
        BOOL isReachable = flags & kSCNetworkFlagsReachable;
        BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
        BOOL isWWAN = flags & kSCNetworkReachabilityFlagsIsWWAN;
        return (isReachable && (!needsConnection || isWWAN)) ? YES : NO;
    }

    检查是否连接VPN

    //判断是否连接VPN导包#import <ifaddrs.h>
    - (BOOL)isVPNConnected
    {
        struct ifaddrs *interfaces = NULL;
        struct ifaddrs *temp_addr = NULL;
        int success = 0;
        
        // retrieve the current interfaces - returns 0 on success
        success = getifaddrs(&interfaces);
        if (success == 0) {
            // Loop through linked list of interfaces
            temp_addr = interfaces;
            while (temp_addr != NULL) {
                NSString *string = [NSString stringWithFormat:@"%s" , temp_addr->ifa_name];
                if ([string rangeOfString:@"tap"].location != NSNotFound ||
                    [string rangeOfString:@"tun"].location != NSNotFound ||
                    [string rangeOfString:@"ppp"].location != NSNotFound){
                    return YES;
                }
                
                temp_addr = temp_addr->ifa_next;
            }
        }
        // Free memory
        freeifaddrs(interfaces);
        return NO;
    }
  • 相关阅读:
    洛谷 P1567 统计天数【最长上升子序列/断则归一】
    洛谷 P3742 umi的函数【构造】
    洛谷 P1036 选数【背包型DFS/选or不选】
    nyoj zb的生日【背包型DFS/选or不选】
    POJ 3628 Bookshelf 2【背包型DFS/选or不选】
    【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】
    洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes【取回文数/数论/字符串】
    洛谷 P1004 方格取数 【多线程DP/四维DP/】
    Codeforces Round #449 (Div. 2) B. Chtholly's request【偶数位回文数】
    Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】
  • 原文地址:https://www.cnblogs.com/mgbert/p/3892968.html
Copyright © 2011-2022 走看看