Способ исключения себя из результатов поиска Bonjour

Когда одно и то же приложение действует как служба и клиент с поддержкой Bonjour одновременно, просматривая самоподобные службы во время прослушивания сокета, каков хороший способ исключить себя из результатов поиска служб?

2 ответа

Решение

В серверной части, когда я регистрирую свой сервис в Bonjour, я генерирую случайную буквенно-цифровую строку из 10 символов - cookie. Я делаю это частью названия рекламируемой услуги, как указано в [NSNetService initWithDomain:type:name:port:], Получившееся имя выглядит как "MyApp на iPhone Джо \txYbG56HjaE". Часть перед символом табуляции предназначена для отображения, часть после - это cookie. Затем я сохраняю cookie - это глобально видимая переменная. Поскольку инициализация сервера происходит при запуске приложения, значение cookie доступно на раннем этапе.

В части обнаружения сервисов, когда я нахожу сервис, я проверяю его имя; если cookie совпадает с сохраненным глобальным, я пропускаю этот сервис. Идея состоит в том, что другие запущенные экземпляры программы будут иметь разные значения cookie, потому что это случайность.

Естественно, при отображении обнаруженных имен служб в пользовательском интерфейсе я пропускаю часть после символа табуляции.

В вашем NSNetServiceBrowserDelegate вы можете просто спросить входящую службу, если она такая же, как опубликованная вами:

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreComing
{
    if ([netService isEqual:self.publishedNetService])
        return;
    …
}
Другие вопросы по тегам