【问题标题】:Check Network Connection iPhone检查网络连接 iPhone
【发布时间】:2011-02-04 13:17:30
【问题描述】:

我正在 iPhone 中开发应用程序,它动态地从网站获取数据,我正在检查 Wifi 和 GPRS 是否已连接,但是当 wifi 无法访问时,应用程序崩溃。

我正在使用这种方法检查连接。

+ (BOOL) isConnected {  
    // Part 1 - Create Internet socket addr of zero
    struct sockaddr_in zeroAddr;
    bzero(&zeroAddr, sizeof(zeroAddr));
    zeroAddr.sin_len = sizeof(zeroAddr);
    zeroAddr.sin_family = AF_INET;

    // Part 2- Create target in format need by SCNetwork
    SCNetworkReachabilityRef target = 
    SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) &zeroAddr);

    // Part 3 - Get the flags
    SCNetworkReachabilityFlags flags;
    SCNetworkReachabilityGetFlags(target, &flags);

    // Part 4 - Create output
    NSString *sNetworkReachable;
    if (flags & kSCNetworkFlagsReachable)
        sNetworkReachable = @"YES";
    else
        sNetworkReachable = @"NO";

    NSString *sCellNetwork;
    if (flags & kSCNetworkReachabilityFlagsIsWWAN)
        sCellNetwork = @"YES";
    else
        sCellNetwork = @"NO";


    // Get host entry info for given host
    struct hostent *remoteHostEnt = gethostbyname("google.com");
    if(remoteHostEnt == nil ) return NO;

    // Get address info from host entry
    struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0];

    // Convert numeric addr to ASCII string
    char *sRemoteInAddr = inet_ntoa(*remoteInAddr);

    NSString *s = [[NSString alloc]
                 initWithFormat:
                 @"Network Reachable: %@\n"
                 @"Cell Network: %@\n"
                 @"Remote IP: %s\n",
                 sNetworkReachable,
                 sCellNetwork,
                 sRemoteInAddr];


    // Add text
    [sCellNetwork release];
    [sNetworkReachable release];

    NSLog(@"Message:%@",s);

    return [sNetworkReachable isEqualToString:@"YES"];  
} 

谢谢 瓦迪维鲁

【问题讨论】:

    标签: iphone networking connection


    【解决方案1】:

    为什么要乱用 IP 地址?您可以直接拨打SCNetworkReachabilityCreateWithName()

    SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "google.com");
    

    【讨论】:

      【解决方案2】:

      developer.apple.com 上搜索可达性示例应用程序

      GitHub 上还有一个开源 NPReachability 类,它做同样的事情,但使用块作为处理程序。

      【讨论】:

        【解决方案3】:

        您可以使用隐藏的 UIWebView 并将网站加载到其中。然后使用 UIWebView.h 中的方法来检测加载是否成功。

        【讨论】:

        • 没有理由这样做。 Apple 已经提供了一个用于检查网络可达性的 API。
        猜你喜欢
        • 2010-10-10
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 2019-10-03
        相关资源
        最近更新 更多