您的位置:首页 > 理论基础 > 计算机网络

IOS socket 判断网络连接(SCNetworkReachability)

2013-05-23 14:32 471 查看
1、基础知识:

所有需要联网的程序,在一开始都要判断当前的网络连接情况。iphone也不例外。

2、IOS 提供了一个SCNetworkReachabilityRef类,方便我们的使用。主要方法有

(1)创建一个测试连接的引用:

SCNetworkReachabilityRef SCNetworkReachabilityCreateWithAddress{

CFAllocatorRef allocator,

const struct sockaddr *address

};

根据传入的地址测试连接,第一个参数为NULL或KCFAllocatorDefault,第二个参数为需要测试连接的IP地址和端口号,当为0,0,0,0则可以查询本机的网络连接状态,
返回一个SCNetworkReachabilityRef对象,必须释放。

(2)Boolean SCNetworkReachabilityRefGetFlags(

SCNetworkReachabilityRef target,

SCNetworkReachabilityFlags *flags

);

第一个参数是之前建立测连接的引用,第二个参数是用来保存获取的状态,如果能获取状态,则返回True,否则返回false。

3、iphone代码:
//检查当前网络连接是否正常
+(BOOL)connectedToNetWork
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
//zeroAddress为0,0,0,0,即判断本机网络连接状态,返回SCNetworkReachabilityRef对象,可以通过对象获取标志,

SCNetworkReachabilityRef defaultRouteReachability
= SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;

BOOL didRetrieveFlags
= SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);

if (!didRetrieveFlags)
{
printf("Error.
Count not recover network reachability flags\n");
return NO;
}

//根据获取的标志判断网络情况
BOOL isReachable
= flags & kSCNetworkFlagsReachable;
BOOL needsConnection
= flags & kSCNetworkFlagsConnectionRequired;
return (isReachable
&& !needsConnection) ? YES : NO;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS socket 网络