1
我試圖在Swift3中實現Bonjour NetServiceBrowser以發現我的網絡上的主機。Bonjour服務發現找不到主機
當我使用以下命令在終端中手動搜索時,我會找到主機。但是,當我嘗試在Swift中使用NetServiceBrowser(請參閱下面的代碼)時,它將只打印「開始搜索..」。我按照Bonjour documentation執行這個類。
我不明白髮生了什麼問題。 Bonjour的工作與Swift不同嗎?我在網上找不到工作示例。我已經在domain
(「本地」,「本地」,「」)或name
的幾個變體上嘗試了幾個變體。
class ZeroConf: NSObject, NetServiceBrowserDelegate, NetServiceDelegate{
var browser: NetServiceBrowser!
var services = [NetService]()
let domain = "local"
let name = "_http._tcp"
func startSearch(){
self.services.removeAll()
self.browser = NetServiceBrowser()
self.browser.delegate = self
self.browser.searchForServices(ofType: name, inDomain: domain)
}
func netService(_ sender: NetService, didNotPublish errorDict: [String : NSNumber]) {
debugPrint(errorDict)
}
func netServiceBrowserWillSearch(_ browser: NetServiceBrowser) {
print("starting search..")
}
func netServiceBrowserDidStopSearch(_ browser: NetServiceBrowser) {
print("Stoped search")
}
func netServiceBrowser(_ browser: NetServiceBrowser, didNotSearch errorDict: [String : NSNumber]) {
print("error in search")
debugPrint(errorDict)
}
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
print("found service")
services.append(service)
debugPrint(service)
}
func netServiceBrowser(_ browser: NetServiceBrowser, didRemove service: NetService, moreComing: Bool) {
if let ix = self.services.index(of:service) {
self.services.remove(at:ix)
print("removing a service")
}
}
func netServiceDidResolveAddress(_ sender: NetService) {
print("did resolve address")
}
}
看起來很蹩腳,但服務數組已分配? – ystack
該代碼應該工作。但是,如果您在遊樂場中運行它,則由於異步行爲,您需要啓用'PlaygroundSupport'的'needsIndefiniteExecution'。 – vadian
@ystack是它分配在同一行,因爲它的聲明 – TmKVU