我正在尝试做一个简单的测试,以在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")
}
}
您的类型设置不正确。您需要在type前面加上下划线。所以它应该像这样:"_testService._tcp."
type网络服务类型。类型必须同时包含服务类型和传输层信息。为确保mDNS响应者搜索的是主机服务,而不是主机,请在服务名称和传输层名称前加上下划线字符(“ _”)。例如,要在TCP上搜索HTTP服务,可以使用类型字符串“ _http._tcp”。请注意,必须在字符串末尾使用句点字符,以指示域名是绝对名称。