gpt4 book ai didi

macos - 可达性的奇怪结果

转载 作者:行者123 更新时间:2023-12-03 17:52:05 24 4
gpt4 key购买 nike

我正在开发 OS X 应用程序来控制我的 Arduino 机器人。我必须检查我的机器人的两个 IP 地址的可达性:IP 摄像头和 Arduino WiFi Shield。

我是 Xcode 新手。我正在使用 Xcode 5.1.1。在 OS X 10.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

我尝试使用不同的 IP 地址测试 MyCheckReachability 应用程序。我有一个 IP 扫描仪应用程序,它可以显示连接到我的网络的所有 IP。这是我在控制台的测试结果:

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

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

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

令人惊讶的是,对于现有和缺失的 IP 地址,(flags 和 kSCNetworkFlagsReachable)始终 =1。如何判断要通信的IP地址是否可达?

谢谢。

最佳答案

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

根据 SCNetworkReachability documentation :

Reachability does not guarantee that the data packet will actually be received by the host.

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

关于macos - 可达性的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com