0

我正在尝试运行 NetServiceBrowser。一旦新的 ZeroConf 设备出现在网络上,它就会检测到它。但是,它不会检测设备何时从网络中移除。

netServiceBrowser(aNetServiceBrowser: NetServiceBrowser!, didRemoveService aNetService: NetService!, moreComing: Bool) 永远不会被调用。

我错过了什么吗?

class BonjourDiscovery: NSObject, NetServiceBrowserDelegate, NetServiceDelegate
{
    var browser: NetServiceBrowser
    var services = [NetService]()
    static let instance = BonjourDiscovery()

    override init()
    {
        browser = NetServiceBrowser()
        services = []
    }

    func startDiscovery()
    {
        browser.delegate = self
        browser.searchForServices(ofType: "_smb._tcp.", inDomain: "")
    }

    func stopDiscovery()
    {
        browser.stop()
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
    {
        print ("Found:" + service.name)
        self.services.append(service)
    }

    func netServiceBrowser(aNetServiceBrowser: NetServiceBrowser!, didRemoveService aNetService: NetService!, moreComing: Bool)
    {
        print ("Removed:" + aNetService.name)

        if let index = services.index(of: aNetService)
        {
            services.remove(at: index)
        }        
    }
}
4

1 回答 1

1

为了完整起见,我发布了完整的答案,更正了 didRemoveService 函数定义(感谢 Martin R):

class BonjourDiscovery: NSObject, NetServiceBrowserDelegate, NetServiceDelegate
{
    var browser: NetServiceBrowser
    var services = [NetService]()
    static let instance = BonjourDiscovery()

    override init()
    {
        browser = NetServiceBrowser()
        services = []
    }

    func startDiscovery()
    {
        browser.delegate = self
        browser.searchForServices(ofType: "_smb._tcp.", inDomain: "")
    }

    func stopDiscovery()
    {
        browser.stop()
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
    {
        print ("Found:" + service.name)
        self.services.append(service)
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didRemove service: NetService, moreComing: Bool)
    {
        print ("Removed:" + service.name)

        if let index = services.index(of: service)
        {
            services.remove(at: index)
        }
    }
}
于 2018-09-23T09:25:50.853 回答