gpt4 book ai didi

macos - Cocoa:确定唤醒时的网络可用性

转载 作者:行者123 更新时间:2023-11-30 14:10:28 25 4
gpt4 key购买 nike

我正在编写一个 Cocoa OS X 应用程序,该应用程序需要根据系统从 sleep 状态唤醒时是否有互联网连接来执行不同的操作。我使用 NSWorkspace.sharedWorkspace() 的通知中心来接收唤醒通知,如下所示:

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "onSystemWake:", name: NSWorkspaceDidWakeNotification, object: nil)

我的问题是onSystemWake:的实现。我用Reachability系统唤醒时查询是否有互联网连接的示例代码:

@objc func onSystemWake(notif: NSNotification) {
let status = internetReachability.currentReachabilityStatus()
if status.value == NotReachable.value {
// Internet not reachable, do some stuff.
} else {
// Internet reachable, do some other stuff.
}
}

当我在家并将笔记本电脑置于 sleep 状态并再次唤醒时,这似乎工作正常。但是,如果笔记本电脑在 sleep 期间(例如,当我到达大学时)切换到另一个已知的 WiFi,则当笔记本电脑在新位置从 sleep 状态唤醒时,上面的代码会检测到没有互联网可达性 -尽管实际上有一个已知的 WiFi 可用。

我认为造成这种情况的原因是当我的应用程序收到系统唤醒通知时,网络连接仍在建立过程中。

我可以在收到系统唤醒通知后延迟 x 秒进行互联网可达性检查,但这似乎是一个非常糟糕的解决方案,因为某些笔记本电脑和网络的组合可能有更长的连接时间比其他人。

当网络适配器(有线和无线)完成连接尝试时,是否有办法收到通知?

最佳答案

最好说一下是什么网络!因为也许您连接到的网络就是网络!但它没有连接到互联网!

对于互联网可达性,我使用下面的代码,它在 iOS 上运行良好!

        let domain: NSURL = NSURL(string : "http://google.com/")!
let req : NSMutableURLRequest = NSMutableURLRequest(URL: domain)
req.HTTPMethod = "POST"
let data = "\0"
req.HTTPBody = data.dataUsingEncoding(NSUTF8StringEncoding)
NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue.mainQueue())
{
(respons,data,error) in
print(respons)
if respons == nil
{
\\ Internet is not Active!!
}
else
{
\\ Internet is Active!!
}
}

上面的代码表示 google 的意思是互联网!如果我可以访问 google.com,则意味着我已经连接到某个网络了!但如果不是,我就不是!

问题是,如果您使用的网络类似于公司网络,并且该网络不为您提供互联网连接!上面的代码不能满足您的需求!在这种情况下,当然取决于您的网络,您必须请求其他内容!就像路由器一样!

关于macos - Cocoa:确定唤醒时的网络可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com