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;
}
所有需要联网的程序,在一开始都要判断当前的网络连接情况。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 SCNetworkReachability和Reachability监测网络连接状态
- iOS之Reachability和AFN判断网络连接状态
- iOS之Reachability和AFN判断网络连接状态
- iOS开发——Reachability和AFNetworking判断网络连接状态
- iOSReachability判断网络连接状态
- iOS开发——Reachability和AFNetworking判断网络连接状态
- IOS 判断网络连接状态 Reachability
- iOS之Reachability和AFN判断网络连接状态
- iOS判断网络连接类型
- [IOS 开发] AFNetworking2.2 setReachabilityStatusChangeBlock检测网络连接状态
- iOS判断网络是否连接
- 使用Reachability类判断iOS设备的当前网络连接类型
- <IOS> 判断当前网络是否连接
- Reachability判断网络是否连接
- IOS使用Reachability实时检测网络连接状况
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- iOS 使用Reachability实时检测网络连接状况
- socket.sendUrgentData判断网络远端是否断开连接
- iOS 判断当前设备是否连接到网络