Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 具有可达性的奇怪结果_Macos_Cocoa - Fatal编程技术网

Macos 具有可达性的奇怪结果

Macos 具有可达性的奇怪结果,macos,cocoa,Macos,Cocoa,我正在使用OSX应用程序来控制我的Arduino机器人。我必须检查我的机器人的两个IP地址的可达性:IP摄像头和Arduino WiFi屏蔽 我是Xcode新手。我正在使用Xcode 5.1.1。在OSX10.9.2下。我想做一个非常简单的Mac应用程序来检查特定IP地址的可达性。 在阅读了多个来源(包括Apple和StackOverflow)后,我得出了以下代码: //  AppDelegate.m //  MyCheckReachability #import "AppDelegate.h"

我正在使用OSX应用程序来控制我的Arduino机器人。我必须检查我的机器人的两个IP地址的可达性:IP摄像头和Arduino WiFi屏蔽

我是Xcode新手。我正在使用Xcode 5.1.1。在OSX10.9.2下。我想做一个非常简单的Mac应用程序来检查特定IP地址的可达性。 在阅读了多个来源(包括Apple和StackOverflow)后,我得出了以下代码:

//  AppDelegate.m
//  MyCheckReachability
#import "AppDelegate.h"
#import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { }

- (IBAction)check:(id)sender
{   NSString *ipAddr = [_getURL stringValue];     // this is just an IP-address from UI textField

SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, [ipAddr UTF8String]);
SCNetworkReachabilityFlags flags;
SCNetworkReachabilityGetFlags(reachabilityRef, &flags);

BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);
BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0);
NSLog(@"%d  %d", isReachable, needsConnection);

if(isReachable && !needsConnection)
{ NSLog (@"… %@ - reachable", ipAddr); } else {NSLog (@"… %@ - NOT REACHABLE", ipAddr);}

CFRelease(reachabilityRef);
}
@end
//AppDelegate.m
//MyCheckReach可达性
#导入“AppDelegate.h”
#进口
#进口
@实现AppDelegate
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知{}
-(iAction)检查:(id)发件人
{NSString*ipAddr=[\u getURL stringValue];//这只是UI文本字段中的一个IP地址
SCNetworkReachabilityRef-reachabilityRef=SCNetworkReachabilityCreateWithName(NULL,[ipAddr UTF8String]);
SCNetworkReachabilityFlags标志;
SCNetworkReachabilityGetFlags(reachabilityRef和flags);
BOOL isReachable=((flags&kSCNetworkFlagsReachable)!=0);
布尔需要连接=((需要标志和KSCNetworkFlagsConnection)!=0);
NSLog(@“%d%d”,可删除,需要连接);
如果(isReachable&!needs连接)
{NSLog(@“…%@-可访问”,ipAddr);}其他{NSLog(@“…%@-不可访问,ipAddr);}
CFRelease(可达性ref);
}
@结束
我试着用不同的IP地址测试我的CheckReach应用程序。我有一个IP扫描应用程序,它向我显示连接到网络的所有IP。 以下是我在控制台上的测试结果:

10 …192.168.0.86-可访问(此IP存在)

10 …192.168.0.87-可访问(此IP不存在)

10 …192.168.0.99-可访问(此IP不存在)

令人惊讶的是,(flags&kSCNetworkFlagsReachable)对于现有和缺失的IP地址总是=1。 如何判断与之通信的IP地址的可达性


谢谢。

这是预期的行为。可达性API只是告诉您是否有可以到达给定目的地的接口/路由。它实际上并不试图联系目的地并与之通信

根据:

可达性不能保证主机将实际接收数据包

如果您试图验证连接到远程主机的能力,则必须实际尝试连接到该主机