Пример использования для подключения двух устройств iOS через Bluetooth? (код клиент / сервер)

Я не хочу использовать GameKit. Я пытаюсь использовать низкоуровневый подход с использованием dns_sd.h и таких методов, как DNSServiceRegister, чтобы установить и поддерживать соединение. Тем не менее, я нашел обертку для этого, называемую HHServices... Честно говоря, на данный момент приветствуется либо низкоуровневый ответ с использованием dns_sd, либо высокоуровневый ответ с использованием HHServices.

Вот HHServices. Вот GCDAsyncSocket.

Это код, который я до сих пор. Я могу успешно опубликовать HHService и GCDAsyncSocket, а также начать просмотр HHServices на другом устройстве, но соединение не установлено. Любая помощь?:D

Сторона сервера

Вот где я публикую HHService:

//....
NSUInteger serverPort = 19997;
HHServicePublisher *publisher = [[HHServicePublisher alloc] initWithName:@"MyDisplayName" type:@"_myexampleservice._tcp." domain:@"local." txtData:nil port:serverPort];

GCDAsyncSocket *listenSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

NSError *error = nil;
if (![listenSocket acceptOnPort:serverPort error:&error])
{
    [self alert:@"Error starting GCDAsyncsocket"];
}


publisher.delegate = self;
if(![publisher beginPublish])
{
    [self alert:@"Error publishing HHService"];
}
else
{
    [self alert:@"Successfully published HHService"];
}

Вот где я вижу, если клиент подключен:

- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
    [self alert:@"didAcceptNewSocket!"];
}

Сторона клиента

Где я начинаю просматривать

    HHServiceBrowser *browser = [[HHServiceBrowser alloc] initWithType:@"_myexampleservice._tcp." domain:@"local."];
    browser.delegate = self;
    if(![browser beginBrowse])
    {
        [self alert:@"Couldn't start browsing"];
    }
    else
    {
        [self alert:@"Successfully started browsing"];
    }

Обратный звонок для поиска опубликованного HHService:

- (void) serviceBrowser:(HHServiceBrowser*)serviceBrowser didFindService:(HHService*)service moreComing:(BOOL)moreComing {
    [self alert:@"Found a service! "];
}

Может ли кто-то пролить свет на то, что я делаю неправильно?

2 ответа

Решение

HHServices только обрабатывает обнаружение. Это зависит от вас, чтобы установить связь. Вам нужно разрешить службу, а затем открыть сокет, как показано в примере HHServices.

Оказывается, я не сохранил свой browser объект.

Другие вопросы по тегам