네트워크에서 호스트를 검색하기 위해 Swift3에서 Bonjour NetServiceBrowser를 구현하려고합니다.Bonjour 서비스 검색에서 호스트를 찾을 수 없음
다음 명령을 사용하여 터미널에서 수동으로 검색 할 때 호스트를 찾을 수 있습니다. 그러나
dns-sd -B
, 내가 스위프트의 NetServiceBrowser (아래 코드 참조)를 사용하려고 할 때, 그것은 단지 인쇄합니다 "검색을 시작 ..". Bonjour documentation을 따라이 클래스를 구현했습니다.
나는 무엇이 잘못 될지 이해하지 못합니다. Bonjour는 Swift와 다른 점이 있습니까? 온라인에서 실습 예제를 찾을 수 없었습니다. 나는 ("로컬", "로컬.", "") 또는 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