NetService无法发布

问题描述 投票:0回答:1

我正在尝试做一个简单的测试,以在Swift中本地发布bonjour服务。我通过一个简单的单视图应用程序执行此操作,该应用程序仅创建一个netService对象并尝试发布它。当我运行应用程序时,它无法发布,并且委托调用didNotPublish函数,从而生成错误

代码-72004(“初始化NSNetService实例时未提供必需的参数”)。

我无法确定丢失的参数可能是什么,因为我已经指定了域,类型,名称和端口中的每一个。

class ViewController: NSViewController, NetServiceDelegate {

    var netService : NetService?

    override func viewDidLoad() {
        super.viewDidLoad()

        //initialize the NetService object
        self.netService = NetService(domain: "local.", type: "testService._tcp.", name: "netServiceTest", port: Int32(80))

        //assing NetService delegate to ViewController object
        self.netService!.delegate = self

        //publish it
        self.netService!.publish()
    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }

    //netservice delegate functions
    func netService(_ sender: NetService, didNotPublish errorDict: [String : NSNumber]) {
        print("uh oh, could not publish netService. domain:\(netService!.domain) type:\(netService!.type) name:\(netService!.name) port:\(netService!.port)")
        print("error code:\(errorDict)")
    }

    func netServiceDidPublish(_ sender: NetService) {
        print("netService published.")
    }

    func netServiceDidStop(_ sender: NetService) {
        print("netService stopped.")
    }

    func netServiceWillPublish(_ sender: NetService) {
        print("Service will publish, apparently")
    }
}
swift macos cocoa bonjour
1个回答
1
投票

您的类型设置不正确。您需要在type前面加上下划线。所以它应该像这样:"_testService._tcp."


来自NetService Documentation

type网络服务类型。类型必须同时包含服务类型和传输层信息。为确保mDNS响应者搜索的是主机服务,而不是主机,请在服务名称和传输层名称前加上下划线字符(“ _”)。例如,要在TCP上搜索HTTP服务,可以使用类型字符串“ _http._tcp”。请注意,必须在字符串末尾使用句点字符,以指示域名是绝对名称。

© www.soinside.com 2019 - 2024. All rights reserved.