首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断远程网络设备是否可用?

如何判断远程网络设备是否可用?
EN

Stack Overflow用户
提问于 2016-04-20 19:57:14
回答 1查看 49关注 0票数 1

我找到了很多关于如何确定iPhone是否连接到互联网的答案,但我不知道如何找到一个解决方案来确定特定的远程网络设备是否可用。

我一直在使用这个解决方案,但它不是很好:

代码语言:javascript
复制
-(bool)isNetworkDeviceAvailable{

bool ok = true;
const char *servIP = [[txtIPAddress stringValue] UTF8String];

in_port_t servPort = 5001;

int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock < 0){
    NSLog(@"setDAC: Socket creation failed\n");
    ok = false;
}
struct sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;

int rtnVal = inet_pton(AF_INET, servIP, &servAddr.sin_addr.s_addr);
if(ok){
    if(rtnVal == 0){
        NSLog(@"setDAC: inet_pton() failed: invalid address string\n");
        ok = false;
    }
    else if (rtnVal < 0){
        NSLog(@"setDAC: inet_pton() failed\n");
        ok = false;
    }
    servAddr.sin_port = htons(servPort);
}
if(ok) if(connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0){
    NSLog(@"setDAC: connection failed\n");
    ok = false;
}

if(ok){
    FILE *datastream = fdopen(sock, "r+");
    fclose(datastream);
    [lblUnavailable setHidden:YES];
}
else [lblUnavailable setHidden:NO];
return ok;
}

它可以工作,但在报告无法访问设备之前,应用程序会挂起长达一分钟。我相信一定有更聪明的方法,因为ping不会花很长时间来报告网络不可访问……

谢谢,

-Pete

EN

回答 1

Stack Overflow用户

发布于 2016-04-20 20:16:01

将可访问性类添加到项目中。

代码语言:javascript
复制
 #import "Reachability.h"

    Reachability *reachability = [Reachability reachabilityWithHostName:@"www.example.com"];
    NetworkStatus reachabilitytoHost = [reachability currentReachabilityStatus];
    if(reachabilitytoHost != NotReachable)
    {
        //reachable
    }
    else
    {
        // not reachable
    }

示例下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

还可以查看:https://developer.apple.com/library/ios/samplecode/Reachability/Listings/Reachability_Reachability_h.html

编辑:也添加SystemConfiguration框架。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36743050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档