2010-05-26 2 views
3

В моем iPhone приложение, я публикую службу Bonjour и используя следующий метод делегата:iPhone SDK: имя Bonjour & NSNetService! = Опубликовано имя?

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

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

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

+0

Привет. Там. Вы поняли это? У меня такая же проблема, когда у меня есть строка имени хоста, такая как «Dave's iPhone», но я хотел бы преобразовать ее в имя хоста, которое в этом случае будет: «daves-iphone». Я мог бы просто заменить характер, но я уверен, что есть более элегантный способ! Я был бы очень признателен, если вы разместите свое решение. Благодаря ! –

ответ

1

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

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

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

+0

Я пробовал это, и 'hostName' был' nil' внутри 'netServiceDidPublish'. Я полагаю, что свойство hostName предназначено для использования с клиентами, а не с серверами, в 'netServiceDidResolveAddress' – tmm1