Я пытаюсь реализовать Bonjour NetServiceBrowser в Swift3, чтобы обнаружить хосты в моей сети.Открытие службы Bonjour не находит хостов
Когда я вручную ищу в терминале, используя следующую команду, я найду хосты.
dns-sd -B
Однако, когда я пытаюсь использовать NetServiceBrowser в Swift (см код ниже), он будет печатать только «начиная поиск ..». Я реализовал этот класс, следуя 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
Код должен работать. Однако, если вы запустите его на игровой площадке, вам необходимо включить 'needsIndefiniteExecution'' PlaygroundSupport' из-за асинхронного поведения. – vadian
@ystack да выделено на той же строке, что и декларация – TmKVU