我需要在 Cocoa/Objective-C 中编写一个简单的 ping
方法。它还需要在 iPhone 上运行。
我找到了一个使用 icmp
的示例,它可以在 iPhone 上运行吗?
我倾向于使用 NSNetServices
的解决方案,这是个好主意吗?
该方法只需要 ping
几次并返回平均值,如果主机已关闭或无法访问,则返回 -1。
最佳答案
注意 - 我会在下面推荐 Chris 的解决方案,它实际上直接回答了所提出的问题。这篇 12 年前的帖子是对原作者点赞的回答的回应,对此我有更好的解决方案。由于作者赞成上面使用可达性的答案,我认为他实际上对可达性比实际发送 ping 更感兴趣,因此我的回答。请在否决此答案之前考虑这一点。
StreamSCNetworkCheckReachabilityByName 已弃用且不适用于 iPhone。 注意:需要SystemConfiguration.framework
bool success = false;
const char *host_name = [@"stackoverflow.com"
cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
//prevents memory leak per Carlos Guzman's comment
CFRelease(reachability);
bool isAvailable = success && (flags & kSCNetworkFlagsReachable) &&
!(flags & kSCNetworkFlagsConnectionRequired);
if (isAvailable) {
NSLog(@"Host is reachable: %d", flags);
}else{
NSLog(@"Host is unreachable");
}
关于iphone - 如何在 Cocoa/Objective-C 中编写一个简单的 Ping 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/798454/