Bonjour sobre bluetooth SEM Gamekit?

Eu estou querendo saber a possibilidade de usar diretamente bonjour sobre bluetooth no iPhone OS 3.0 ou posterior sem usar o GameKit. Alguém pode fornecer algum exemplo?

Apenas anuncie o serviço, assim como o tc. disse abaixo :

self.netService = [[[NSNetService alloc] initWithDomain:@"" type:@"_http._tcp" name:@"" port:8080] autorelease]; [self.netService publish]; 

Com o iOS5, no entanto, vamos chamá-lo de “Bluetooth Bonjour” está desabilitado por padrão, então você tem que usar a API C declarada em .

 DNSServiceRef serviceRef; DNSServiceRegister(&serviceRef, // sdRef kDNSServiceFlagsIncludeP2P, // interfaceIndex 0, // flags NULL, // name "_http._tcp", // regtype NULL, // domain NULL, // host 1291, // port 0, // txtLen NULL, // txtRecord NULL, // callBack, NULL // context ); 

Esta é apenas a parte do anúncio; resolver é um pouco mais complexo. Eu sugiro que você dê uma olhada nos seguintes exemplos da Apple:

  • SRVResolver – demonstra como você pode procurar um serviço usando a API declarada em . Alvos OS X, mas inclui uma class chamada SRVResolver que você pode usar no iOS tão facilmente quanto você pode usá-lo no OS X. Para o iOS 5 Bluetooth P2P funcionar, atualize a chamada para DNSServiceQueryRecord() para passar kDNSServiceFlagsIncludeP2P como o interfaceIndex . ( NOTA! Este exemplo parece não existir no docset do OS X 10.8. Ele pode ser encontrado em docsets 10.6 e 10.7. No 10.8, há o exemplo DNSSDObjects, mas eu não olhei exatamente para o que ele faz.)
  • WiTap – desde que você não se importe com o suporte a Bluetooth no iOS 5, basta olhar o exemplo chamado WiTap, que demonstra não apenas a bela API Objective-C, mas também como você pode criar um servidor usando APIs CFSocket (thin invólucros em torno de sockets BSD). Você desejará ver isso mesmo se estiver usando o SRVResolver para ver como usar a API baseada em C de .

Depois de anunciar ou resolver seu serviço, você usa sockets BSD comuns para escutar ou se conectar. Ao escrever um servidor, você pode até mesmo querer listen() primeiro listen() na porta 0 (zero) e, em seguida, consultar qual porta aleatória disponível foi atribuída a você. Depois de consultar, anuncie esta porta em vez de uma fixa. Isso é exatamente o que o exemplo do WiTap está fazendo (mas com a API CFSocket em vez da API de soquete do BSD).

Para mais informações sobre sockets BSD, basta pesquisar no Google por um tutorial.

Nota: as informações sobre o iOS 5 são fornecidas no QA1753 da Q & A técnica da Apple.

Leia este artigo: Bonjour via Bluetooth no iOS 5.0 https://developer.apple.com/library/ios/#qa/qa1753/_index.html#//apple_ref/doc/uid/DTS40011315

É um problema conhecido no IOS 5.0 e precisa ser resolvido usando API de nível inferior: DNSSDObjects.

Se o Bluetooth estiver ativado, em um dispositivo novo o suficiente (3G e acima, ou equivalente no iPod ou iPad) e um sistema operacional novo o suficiente (3.1 aparentemente), o Bonjour funcionará automaticamente via Bluetooth usando endereços locais de link (168.254. *) . Então você apenas usa o TCP / UDP normalmente.

(Sob o capô, tenho certeza que o GameKit usa o Bonjour-over-IP-over-Bluetooth.)

Corretamente, a publicação / navegação é feita na camada Bluetooth, mas se alguém publica um serviço Bonjour e o outro procura por ele, uma conexão IP-sobre-Bluetooth automática é estabelecida.

Qualquer exemplo do Bonjour deve funcionar automaticamente.

Intereting Posts