使用Apple的可达性在Swift中检查远程服务器的可达性

我正在开发一个用Swift编写的iOS应用程序,该应用程序可与本地网络上的HTTP服务器通信,并且我正在使用Apple的Reachability类来确定运行HTTP服务器的远程计算机是否在线。这是代码:

...

let RemoteHost: String = "192.168.178.130"

var RemoteReachability: Reachability! = nil

var RemoteIsReachable: Bool = false

init() {

super.init()

self.RemoteReachability = Reachability(hostName: self.RemoteHost)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: kReachabilityChangedNotification, object: self.RemoteReachability)

self.RemoteReachability.startNotifier()

self.RemoteIsReachable = (self.RemoteReachability.currentReachabilityStatus().value == ReachableViaWiFi.value)

}

func reachabilityChanged(notification: NSNotification) {

let ReachabilityInst: Reachability = notification.object as Reachability

self.RemoteIsReachable = (ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)

}

问题是无论远程计算机是联机还是脱机,

(ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)

只要我连接到Wifi网络,总是如此。但是,当我关闭Wifi时,它会导致错误而不是真实。我在这里做错什么了吗,还是Reachability类与Swift /

xCode 6 Beta不兼容?我也尝试过这个:

(ReachabilityInst.currentReachabilityStatus() == ReachableViaWiFi)

但这导致xCode告诉我“无法为接受提供的参数的’==’找到重载”,即使这两个参数看起来都属于’NetworkStatus’类型。

提前致谢。

回答:

您使用的Reachability类基于Apple的SCNetworkReachability类,该类不能完全满足您的期望。从SCNetworkReachability文档中:

当应用程序发送到网络堆栈的数据包可以离开本地设备时,就可以认为远程主机可以访问。可达性不能保证主机将实际接收到数据包。

因此,它不是用于测试远程主机是否真正在线,而是用于(1)当前网络设置是否允许尝试访问它,以及(2)通过什么方法进行测试。确定网络处于活动状态后,您需要尝试连接以查看远程主机是否真正启动并正在运行。


注意: 此测试:

(ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)

是正确的检查方法-

由于某些原因,这NetworkStatus是在没有NS_ENUM宏的情况下创建的少数苹果枚举之一。

以上是 使用Apple的可达性在Swift中检查远程服务器的可达性 的全部内容, 来源链接: utcz.com/qa/400522.html

回到顶部