Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
tj13
Сообщений: n/a
#1

NSNetServiceBrowser - поиск сервисов независимо от их типа - Программирование iOS

08.12.2013, 00:29. Просмотров 591. Ответов 0
Метки нет (Все метки)

Доброго времени суток всем.
Возникла задача - найти все Bonjour сервисы и отобразить их, в зависимости от типа в своей секции (в секции Printer - сервисы типа printer). Есть довольно хороший пример в книге Beginning iOS 5 Application Development - глава 18. В пример мы ищем сервис с конкретный типом: @"_MyService._tcp.". который ранее и опубликовали (что бы его же и найти).

Код
NSNetServiceBrowser *serviceBrowser;

serviceBrowser = [[NSNetServiceBrowser alloc] init];
[serviceBrowser setDelegate:delegateObject];
[serviceBrowser searchForServicesOfType:@"_MyService._tcp" inDomain:@""];
Но мне по задаче нужно найти все доступные сервисы, независимо от типа ("_MyService._tcp").
Пытался найти решение данной проблемы но все что удалось, это использование вместо конкретного типа _MyService. данную строку:
Код
"_services._dns-sd._udp."
Взято от сюда
Но к сожалению это не работает.

Пробывал проганять строку где ищем сервис конкретного типа через цыкл, подставляя каждый раз новый тик из списка,

Код
[self.browser searchForServicesOfType:serviceType inDomain:@""];
В результате только лишь последный из списка сервис отображалься в TableView.
Для публикации сервисов использовал Network Beacon.

Может кто то уже работал с подобным или может просто подсказать как решить данную задачу - буду благодарен.

Пример кода - BonjourViewController.m



Код
#import "BonjourViewController.h"

@interface BonjourViewController ()

@end

@implementation BonjourViewController

- (void)viewDidLoad
{
    [self browseServices];
    [super viewDidLoad];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.services count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    if (!cell)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    
    //--display the name of each service---
    cell.textLabel.text = [[self.services objectAtIndex:indexPath.row]name];
    
    return cell;
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    [self.services addObject:aNetService];
    _debug.text = [_debug.text stringByAppendingString:@"Found service. Resolving address ...\n"];
    [self resolveIPAddress:aNetService];
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    [self.services removeObject:aNetService];
    _debug.text = [_debug.text stringByAppendingFormat:@"Removed:  %@\n", [aNetService hostName]];
    
    [self.tbView reloadData];
}

-(void)resolveIPAddress:(NSNetService *)service 
{
    NSNetService *remoteService = service;
    remoteService.delegate = self;
    [remoteService resolveWithTimeout:10];
}

-(void)netServiceDidResolveAddress:(NSNetService *)sender
{
    NSLog(@"Enter to netServiceDidResolveAddress");
    NSData *address = nil;
    struct sockaddr_in *socketAddres = nil;
    NSString *ipString = nil;
    int port;
    
    for (int i=0; i<[[sender addresses] count];i++)
    {
        address = [[sender addresses] objectAtIndex: i];
        socketAddres = (struct sockaddr_in *) [address bytes];
        ipString = [NSString stringWithFormat:@"%s", inet_ntoa(socketAddres->sin_addr)];
        port = socketAddres->sin_port;
        _debug.text = [_debug.text stringByAppendingFormat:@"Resolved: %@-->%@:%u\n", [sender hostName], ipString, port];
    }
    [self.tbView reloadData];
}

-(void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict
{
    _debug.text = [_debug.text stringByAppendingFormat:@"Could not resolve:  %@\n", errorDict];
}

-(void)browseServices
{
    self.services = [[NSMutableArray alloc]init];
    self.browser = [[NSNetServiceBrowser alloc]init];
    self.browser.delegate = self;
    
    [self.browser searchForServicesOfType:@"_MyService._udp." inDomain:@""];
    
@end
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 00:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос NSNetServiceBrowser - поиск сервисов независимо от их типа (Программирование iOS):

Чтение QBuffer независимо от типа - C++ Qt
Здравствуйте! Определил некую структуру файла и записываю данные с помощью QBuffer + QDataStream способом указанным в документации (кажется...

поиск в string независимо от размера - C++ Builder
Здравствуйте. Ситуация: Имеется строка, которая включает в себя символьный текст. При помощи стандартных методов, находим в ней...

Поиск в файле типа запись - Turbo Pascal
всем трям! есть код программы которая записывает в файл данные. вот: program adv; uses crt; type chelt=record data:string; ...

Поиск типа по его атрибуту - C#
Есть класс: public class MessageBoard { public enum MessageType { ConnectedToServer, DisconnectedFromServer, //...

Поиск количества файлов указанного типа - VBScript/JScript
Скрипт, который находит количество файлов указанного типа в указанной папке. Вывод осуществляется на экран монитора (в окно вывода).

Поиск типа объекта в словаре Dictionary<> - C#
Здравствуйте. Подскажите, как мне осуществить поиск по типа объекта в словаре? У меня есть словарь, в котором содержатся экземпляры...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 00:29
Привет! Вот еще темы с ответами:

Поиск количества битов для типа - C++
Всё понятно, кроме вот этого ((log((double)a)/log((double)2))); Мы логарифм числа а(числа 2 147 483 647) делим на логарифм числа 2 (на...

Поиск времени в строке типа string - C++
Задана строка, состоящая из слов. Слова друг от друга отделяются одним или несколькими пробелами. Количество символов не превышает 255. В...

Бинарный поиск элемента массива типа char - Java SE
Народ помогите мне пожалуйста разобраться с бинарным поиском у меня есть массив char public static void main(String args) { ...

Двоичный поиск для массива типа записи - Pascal ABC
Нужна процедура двоичного поиска для массива типа записи. с простым массивом вроде ясно ,а с записью не доходит.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru