Macos 使用Swift在Mac OS X上使用SCNetworkAccessibility
在Objective C中,我有一个很好的工作方法来检查到IP地址的网络连接是否可用。转换为Swift有一个问题 错误是: 非托管的“SCNetworkReachability”与“SCNetworkReachability”不同 编译器在代码行上停止: let success=SCNetworkReachabilityGetFlagsreachability,&flags 我想我忽略了一些重要的事情 此方法是否是检查连接是否处于活动状态以及主机是否可用的正确方法Macos 使用Swift在Mac OS X上使用SCNetworkAccessibility,macos,swift,network-programming,Macos,Swift,Network Programming,在Objective C中,我有一个很好的工作方法来检查到IP地址的网络连接是否可用。转换为Swift有一个问题 错误是: 非托管的“SCNetworkReachability”与“SCNetworkReachability”不同 编译器在代码行上停止: let success=SCNetworkReachabilityGetFlagsreachability,&flags 我想我忽略了一些重要的事情 此方法是否是检查连接是否处于活动状态以及主机是否可用的正确方法 func hostReacha
func hostReachable(ipadres:String) -> Bool {
let host_name = ipadres.cStringUsingEncoding(NSASCIIStringEncoding)
let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, host_name!)
var flags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable)
let success = SCNetworkReachabilityGetFlags(reachability, &flags)
let isAvailable = success && (flags | kSCNetworkFlagsReachable) && !(flags | kSCNetworkFlagsConnectionRequired)
println("Reachability results---> \(success) \(host_name)', flags: \(flags)")
if (isAvailable) {
return true
} else {
println("'hostReachable:--> \(host_name) is not reachable")
return false
}
return false
}
添加更正后,完整的工作版本在这里
func hostReachable(ipadres:String) -> Bool {
if let host_name = ipadres.cStringUsingEncoding(NSASCIIStringEncoding) {
let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, host_name).takeRetainedValue()
var flags : SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(reachability, &flags) == 0 {
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}else{
return false
}
}
此方法将检查网络校正是否正常,但不幸的是,它不会检查主机或IP是否真的可以访问。这怎么可能呢?
目前,我正在将Ping命令与NSTask一起使用。的可能重复–标题很糟糕,但问题与此相同,答案应该包含您需要的内容。谢谢Martin。该链接有助于发现问题。我现在添加了完整的代码。