iPhone SDK: имя Bonjour и NSNetService != опубликованное имя?

В моем приложении для iPhone я публикую службу bonjour и использую следующий метод делегата:

- (void)netServiceDidPublish:(NSNetService *)ns
{
   NSLog(@"Bonjour Service Published: http://%@.%@", [ns name], [ns domain]);
}

Свойство «имя» возвращает правильное имя устройства «Как проходит тестирование». Однако, когда я использую Safari для обнаружения доступных служб, имя службы — «hows-testing» — служба http://hows-testing.local.:somePortNumber.

Почему опубликованное имя отличается от того, что сообщает NSNetService? Как отобразить фактическое имя опубликованной службы? Предполагая, что по какой-то причине нет возможности получить опубликованное имя из объекта, как мне определить его самому? Я понимаю, что это основано на имени устройства, но каковы правила замены? Удалите апострофы, замените пробелы тире... что-нибудь еще? Как насчет специальных символов?


person memmons    schedule 26.05.2010    source источник
comment
Всем привет. Вы решили это? У меня точно такая же проблема, когда у меня есть строка имени хоста, такая как «iPhone Дэйва», но я хотел бы преобразовать ее в имя хоста, которое в этом случае будет: daves-iphone. Я мог бы просто заменить символы, но я уверен, что есть более элегантный способ! Буду очень признателен, если вы опубликуете свое решение. Спасибо !   -  person Enrique R.    schedule 21.07.2010


Ответы (1)


Я считаю, что "hows-testing" - это имя хоста компьютера, а не имя службы. Вместо этого вы хотите посмотреть на атрибут hostName:

- (void)netServiceDidPublish:(NSNetService *)ns
{
   NSLog(@"Bonjour Service Published: http://%@", [ns hostName]);
}

Вероятно, вам следует также проверить атрибут port и включить его в URL-адрес, если порт отличается от порта по умолчанию для этого протокола (80 для HTTP).

person allenporter    schedule 08.06.2010
comment
Я попробовал это, и hostName был nil внутри netServiceDidPublish. Я считаю, что свойство hostName предназначено для использования с клиентами, а не с серверами, в netServiceDidResolveAddress - person tmm1; 28.04.2017