2010-09-14 2 views
0

Я уверен, что всего лишь в нескольких письмах от работы, но, возможно, нет ...Bonjour для JmDNS от iOS: как называется?

На стороне сервера у меня это (Java);

ServiceInfo info = ServiceInfo.create("_mjdj._tcp.local.", "foo", 1268, 0, 0, "path=index.html"); 
jmdns.registerService(info); 

Это отлично работает с моим клиентом Java или Bonjour Browser (услуга показывает, как «_mjdj._tcp.» В местном). Итак, на Java это работает:

jmdns.list("_mjdj._tcp.local."); 

Но от клиента iOS я не могу найти сервис (или что-то еще). У меня есть методы делегата на месте, но это

NSNetServiceBrowser *browser = [[[NSNetServiceBrowser alloc] init] autorelease]; 
[browser setDelegate:self]; 
[browser searchForServicesOfType:@"_mjdj._tcp.local." inDomain:@""]; 

производит эту ошибку

{ 
NSNetServicesErrorCode = "-72004"; 
NSNetServicesErrorDomain = 10; 
} 

и если я делаю это (угадывание)

[browser searchForServicesOfType:@"_mjdj._tcp." inDomain:@"local"]; 

netServiceBrowserWillSearch не вызывается, но ничего после этого.

+0

Всегда полезно найти код ошибки. Если вы сделаете это для этого кода, вы обнаружите, что это 'NSNetServicesBadArgumentError' (или' kCFNetServiceErrorBadArgument', если вы смотрите в Core Foundation). –

+0

Спасибо @Peter Hosey. Оказывается, проблема заключалась в том, что я не сохранял браузер (как вы можете видеть выше, я был автореализован). –

ответ

1
[browser searchForServicesOfType:@"_mjdj._tcp.local." inDomain:@""]; 

Это ваша ошибка. Вы хотите

[browser searchForServicesOfType:@"_mjdj._tcp." inDomain:@""]; 

«местный». part - это домен, поэтому вы можете использовать домен «local». если вы хотите, но @"" означает использование доменов регистрации по умолчанию (который включает, но не обязательно ограничивается, «локальный»). Причина, по которой вы запутались, связана с тем, что Java API плохой. Он не должен сжимать тип и домен службы вместе.

Обратите внимание, что попытка использования @"local" не удалась, скорее всего, потому что вы забыли период ожидания. Я предлагаю вам использовать только @"".

+0

Привет, Кевин, и спасибо за ваш ответ. Я теперь попробовал использовать рекомендуемые пустые 'inDomain' и' _mjdj._tcp.', и ни один из методов делегата не запускается за пределами 'netServiceBrowserWillSearch' ... возможно, это симулятор iPhone, который я запускаю внутри? Хотя он и без проблем подключается к сокетам на стороне Java. –

+0

Просто попробовал «устройство» (iPod), и он тоже не работал. Хмммм ... может быть, я должен попробовать прямое приложение Mac дальше. –

+0

Если вы хотите потратить $ 3, чтобы помочь отладить эту проблему, у меня есть версия Bonjour Browser, написанная для iPhone. Он называется [Discovery] (http://itunes.apple.com/us/app/discovery-bonjour-browser/id305441017?mt=8), и вы можете использовать его, чтобы узнать, видима ли ваша служба на устройстве. –

Смежные вопросы