我找到了很多关于如何确定iPhone是否连接到互联网的答案,但我不知道如何找到一个解决方案来确定特定的远程网络设备是否可用。
我一直在使用这个解决方案,但它不是很好:
-(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
发布于 2016-04-20 20:16:01
将可访问性类添加到项目中。
#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
编辑:也添加SystemConfiguration框架。
https://stackoverflow.com/questions/36743050
复制相似问题