NetService не удалось опубликовать - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь выполнить простой тест публикации службы Bonjour локально в Swift. Я делаю это с помощью простого приложения с одним представлением, которое просто создает объект netService и пытается опубликовать его sh. Когда я запускаю приложение, оно не может опубликовать sh, и делегат вызывает функцию didNotPubli sh, генерирующую ошибку

code -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")
    }
}

1 Ответ

1 голос
/ 14 февраля 2020

Ваш тип установлен неправильно. Вам необходимо поставить префикс перед символом подчеркивания.
Таким образом, он должен выглядеть следующим образом: "_testService._tcp."


Из Документация NetService :

type
Тип сетевого сервиса. Тип должен содержать как тип сервиса, так и информацию транспортного уровня. Чтобы гарантировать, что респондент mDNS ищет службы, а не хосты, добавьте к имени подчеркивания («_») как имя службы, так и имя транспортного уровня. Например, для поиска службы HTTP в TCP вы должны использовать строку типа «_http._tcp.». Обратите внимание, что необходим символ точки в конце строки, который указывает, что доменное имя является абсолютным именем.

...