检测网络是否连接

来源:互联网 发布:冷冻电子显微镜 知乎 编辑:程序博客网 时间:2024/05/16 09:10

//

//  NetworkConnert.h

//

//

//  Created by CJW on 16/3/10.

//  Copyright © 2016 CJW. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface NetworkConnect :NSObject


+ (BOOL)connectedToNetwork;                    //判断是否有网


@end







//

//  NetworkConnert.m

//

//  Created by CJW on 16/3/10.

//  Copyright © 2016 CJW. All rights reserved.

//


#import "NetworkConnect.h"

#import<SystemConfiguration/SCNetworkReachability.h>


@implementation NetworkConnect

+ (BOOL)connectedToNetwork {

   //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态

    structsockaddr_storage zeroAddress;

    

    bzero(&zeroAddress,sizeof(zeroAddress));

    zeroAddress.ss_len =sizeof(zeroAddress);

    zeroAddress.ss_family =AF_INET;

    

    // Recover reachability flags

    SCNetworkReachabilityRef defaultRouteReachability =SCNetworkReachabilityCreateWithAddress(NULL, (structsockaddr *)&zeroAddress);

    SCNetworkReachabilityFlags flags;

    

   //获得连接的标志

    BOOL didRetrieveFlags =SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

    CFRelease(defaultRouteReachability);

    

   //如果不能获取连接标志,则不能连接网络,直接返回

    if (!didRetrieveFlags)

    {

        returnNO;

    }

   //根据获得的连接标志进行判断

    

    BOOL isReachable = flags &kSCNetworkFlagsReachable;

    BOOL needsConnection = flags &kSCNetworkFlagsConnectionRequired;

    return (isReachable&&!needsConnection) ?YES : NO;

}


@end



1 0
原创粉丝点击