2016-01-25 78 views
4

我在我的應用程序中使用可達性類來監視網絡狀態。以下是從Apple可訪問性示例中檢查因特網可達性的代碼。它適用於IPv4網絡。但它在IPv6 wifi網絡上失敗。ipv6支持的iOS可達性類

+ (instancetype)reachabilityForInternetConnection 
{ 
struct sockaddr_in zeroAddress; 
bzero(&zeroAddress, sizeof(zeroAddress)); 
zeroAddress.sin_len = sizeof(zeroAddress); 
zeroAddress.sin_family = AF_INET; 
return [self reachabilityWithAddress:&zeroAddress]; 
} 

所以,現在我們是在我們的應用程序,支持IPv6網絡以及過程。當我們升級這些代碼以支持IPv6時,如下所示。

 struct sockaddr_in6 zeroAddress; 
        bzero(&zeroAddress, sizeof(zeroAddress)); 
        zeroAddress.sin6_len = sizeof(zeroAddress); 
        zeroAddress.sin6_family = AF_INET6; 
        return [self reachabilityWithAddress: &zeroAddress]; 

以上的IPv6支持的代碼效果很好爲IPv4的IPv6 & WiFi網絡的iOS9 &更高版本的設備。但在iOS8設備上,IPV4網絡無法使用。那麼蘋果的可達性代碼還有哪些更新可以支持IPV6網絡? 任何幫助,將不勝感激。提前致謝。

+0

我在我的應用程序中使用可達性類來監視網絡狀態。每當wifi狀態發生變化時(開關網絡,關閉wifi等)。對於所有這些情況,我的應用程序將被networkReachabilityChanged回調通知。一旦這個notifcation到達我們的應用程序將嘗試登錄到該熱點,或者如果連接已經可用,它將更新主UI。 對於同樣在使用IPv6 nework支持尋找我。 – user1856666

回答

0

我想如果你用下面的代碼替換那麼它會​​爲你工作。

+(Reachability*)reachabilityWithHostName:(NSString*)hostname 
{ 
    return [Reachability reachabilityWithHostname:hostname]; 
} 

還有一

+(Reachability*)reachabilityWithHostname:(NSString*)hostname 
{ 
SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); 
if (ref) 
{ 
    id reachability = [[self alloc] initWithReachabilityRef:ref]; 

    return reachability; 
} 

return nil; 
} 

初始化類的可達性與 你可以使用「google.com」的域名來檢查網絡連接。

Reachability *r = [Reachability reachabilityForInternetConnection:@"your domain here"]; 

我希望這會對你有幫助。