Bonjour por bluetooth SIN Gamekit?

Me pregunto la posibilidad de usar Bonjour directamente sobre bluetooth en iPhone OS 3.0 o posterior sin usar GameKit. ¿Alguien puede dar algún ejemplo?

Simplemente anuncie el servicio, al igual que tc. ha dicho a continuación :

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

Sin embargo, con iOS5, let’s-call-it “Bluetooth Bonjour” está deshabilitado de forma predeterminada, por lo que debe usar la API C declarada en .

 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 es solo la parte del anuncio; resolver es un poco más complejo. Te sugiero que eches un vistazo a los siguientes ejemplos de Apple:

  • SRVResolver: demuestra cómo se puede buscar un servicio usando la API declarada en . Se dirige a OS X, pero incluye una clase llamada SRVResolver que puedes usar en iOS tan fácilmente como puedes usarlo en OS X. Para que iOS 5 Bluetooth P2P funcione, actualiza la llamada a DNSServiceQueryRecord() para pasar kDNSServiceFlagsIncludeP2P como interfaceIndex . ( ¡NOTA! Esta muestra no parece existir en el documento de OS X 10.8. Se puede encontrar en los conjuntos de documentos 10.6 y 10.7. En 10.8, está el ejemplo de DNSSDObjects, pero no miré exactamente lo que hace).
  • WiTap: siempre que no te importe la compatibilidad con Bluetooth en iOS 5, solo mira el ejemplo llamado WiTap, que demuestra no solo la hermosa API Objective-C, sino también cómo puedes crear un servidor usando las API CFSocket (thin envoltorios alrededor de los zócalos BSD). Deberá ver esto incluso si está utilizando SRVResolver para ver cómo usar la API basada en C desde .

Después de anunciar o resolver su servicio, usa conectores BSD regulares para escuchar o conectarse. Al escribir un servidor, es posible que desee listen() primero listen() en el puerto 0 (cero) y luego consultar qué puerto disponible aleatorio le fue asignado. Después de consultar para eso, anuncie este puerto en lugar de uno fijo. Eso es exactamente lo que hace el ejemplo de WiTap (pero con CFSocket API en lugar de BSD socket API).

Para obtener más información sobre los sockets BSD, solo busque un tutorial en Google.

Nota: la información sobre iOS 5 proviene de Q & A Q17A técnica de Apple.

Lea este artículo: Bonjour por Bluetooth en iOS 5.0 https://developer.apple.com/library/ios/#qa/qa1753/_index.html#//apple_ref/doc/uid/DTS40011315

Es un problema conocido en IOS 5.0 y debe resolverse utilizando API de nivel inferior: DNSSDObjects.

Si Bluetooth está habilitado, en un dispositivo suficientemente nuevo (3G y superior, o equivalente de iPod, o iPad) y un sistema operativo completamente nuevo (aparentemente 3.1), Bonjour funcionará automáticamente a través de Bluetooth utilizando direcciones locales de enlace (168.254. *) . Entonces solo usas TCP / UDP normalmente.

(Bajo el capó, estoy bastante seguro de que GameKit usa Bonjour-over-IP-over-Bluetooth.)

Sypposedly la publicación / navegación se realiza en la capa de Bluetooth, pero si uno publica un servicio de Bonjour y las otras búsquedas para ello, se establece una conexión automática de IP por Bluetooth.

Cualquier ejemplo de Bonjour debería funcionar automáticamente.