[英]Unable to check reachability of particular ip address. Do any of MAC frameworks support this
Steps I followed 1) Added system configuration frame work and imported #import "systemconfiguration/scnetworkreachability.h" and then added below code for checking connectivity 我遵循的步骤1)添加了系统配置框架,并导入了#import“ systemconfiguration / scnetworkreachability.h”,然后添加了以下代码以检查连接性
BOOL hasLeadingNumberInString(NSString* s) {
if(s)
return [s length] && isnumber([s characterAtIndex:0]);
else
return NO;
}
-(BOOL)networkConnected: (NSString *)ipAdress {
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
BOOL retrievedFlags = NO;
// added the "if" and first part of if statement
//
if (hasLeadingNumberInString(ipAdress)) {
struct sockaddr_in the_addr;
memset((void *)&the_addr, 0, sizeof(the_addr));
the_addr.sin_family = AF_INET;
the_addr.sin_len = sizeof(the_addr);
const char* server_addr = [ipAdress UTF8String];
unsigned long ip_addr = inet_addr(server_addr);
the_addr.sin_addr.s_addr = ip_addr;
netReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr*)&the_addr);
} else {
netReachability = SCNetworkReachabilityCreateWithName(NULL, [ipAdress UTF8String]);
}
if (netReachability) {
retrievedFlags = SCNetworkReachabilityGetFlags(netReachability, &flags);
CFRelease(netReachability);
}
if (!retrievedFlags || !flags) {
return NO;
}
return YES;
}
- (void)checkconnectivity
{
if([self networkConnected:@"192.168.2.10" ])
NSLog(@"Connected");
else
NSLog(@"Not Connected");
}
For god sake it always returns connected. 为了上帝,它总是返回连接状态。
method 2 i followed, I added AFnetworking using cocopods.I imported "AFNetworkReachabilityManager.h" file and used managerforaddress, it always returns unknown 我遵循的方法2,我使用cocopods添加了AFnetworking。我导入了“ AFNetworkReachabilityManager.h”文件并使用了managerforaddress,它始终返回未知
AFNetworkReachabilityManager *addressCheck=[AFNetworkReachabilityManager managerForAddress:@"192.168.3.10"];
[addressCheck startMonitoring];
[addressCheck setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
NSLog(@"%hhd",addressCheck.reachable);
NSLog(@"%hhd",[addressCheck isReachable]);
NSString *str=[[NSString alloc]initWithString:[addressCheck localizedNetworkReachabilityStatusString]];
NSLog(@"%@",str);
NSLog(@"%@",addressCheck.localizedNetworkReachabilityStatusString);
}
Even in this way I am unable to get connectivity for particular address. 即使以这种方式,我也无法获得特定地址的连接。 Is there any way to get this or it's not possible.
有什么办法可以做到这一点,还是不可能的。
You could just simply use a Process
and the ping
command to check if an ip address is reachable. 您可以只使用
Process
和ping
命令来检查IP地址是否可达。
Swift 4 example: ( macOS only ) Swift 4示例:( 仅限macOS )
func ping(at ipAddress: String) -> Int32 {
let process = Process.launchedProcess(launchPath: "/sbin/ping", arguments: ["-c1", ipAddress])
process.waitUntilExit()
return process.terminationStatus
}
let reachable = ping(at: "10.0.1.119") == 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.