我需要ping
在Cocoa/Objective-C中编写一个简单的方法.它还需要在iPhone上运行.
我发现了一个使用的例子,icmp
这会在iPhone上运行吗?
我倾向于使用解决方案NSNetServices
,这是一个好主意吗?
该方法只需要ping
几次并返回平均值,如果主机关闭或无法访问,则返回-1.
让我再试一次......这次登录,格式化更好;-)
StreamSCNetworkCheckReachabilityByName已弃用,不适用于iPhone.
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"); }
注意:SystemConfiguration.framework是必需的
我遇到了同样的问题,并最终围绕SimplePing编写了一个简单的包装器来实现这一点,写了一篇关于它的博客,并且在github上有一些代码,希望能帮助这里的人:
http://splinter.com.au/how-to-ping-a-server-in-objective-c-iphone
您没有遗漏任何内容 - "Reachability"实际上并不测试目标域实际上是否可达,它只评估是否存在可以通过目标域访问的机器路径.只要您有一些出站连接(例如,活动的无线或有线连接)以及通向目标的路由配置,就SCNetworkReachability而言,该站点是"可达的".
由于您没有root访问权限,因此在iPhone上进行Ping操作与在其他平台上有所不同.请参阅Apple的此示例代码.