iphone - 如何在 Cocoa/Objective-C 中编写一个简单的 Ping 方法

标签 iphone objective-c cocoa cocoa-touch networking

我需要在 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/

相关文章:

iphone - Action 序列( Objective-C ) iPhone

iPad 应用程序的 iOS 自定义 GridView 显示下载的图像

ios - 请帮助我进行基于 block 的回调

cocoa - Cocoa View 回调中的指针值稳定吗?

cocoa - NSToolBar 上的复选框不会更新?

iphone - 带有多行链接的UILabel

iphone - Apple AppStore 和开发者身份识别政策

iphone - iPhone iOS是否可以创建带有2个激光指示器和iPhone的测距仪?

javascript - 解析[错误] : success/error was not called (Code: 141, 版本 : 1. 9.0)

objective-c - 当窗口丢失然后恢复主状态时, cocoa 绘图出现故障