Пример использования для подключения двух устройств 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.