iphone - recibir - Bonjour sobre bluetooth SIN Gamekit?
configuracion bluetooth iphone 5s (3)
Lea este artículo: Bonjour sobre 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 mediante una API de nivel inferior: DNSSDObjects.
Me estoy preguntando la posibilidad de usar directamente bonjour sobre bluetooth en iPhone OS 3.0 o posterior sin usar GameKit. ¿Alguien puede proporcionar algún ejemplo?
Si Bluetooth está habilitado, en un dispositivo suficientemente nuevo (3G y superior, o equivalente de iPod, o iPad) y un sistema operativo suficientemente nuevo (al parecer, 3.1), Bonjour funcionará automáticamente a través de Bluetooth usando direcciones de enlace local (168.254. *) . Entonces simplemente usas TCP / UDP normalmente.
(Debajo del capó, estoy bastante seguro de que GameKit usa Bonjour-over-IP-over-Bluetooth).
Sypposedly la publicación / navegación se realiza en la capa Bluetooth, pero si uno publica un servicio Bonjour y el otro busca, se establece una conexión automática de IP a través de Bluetooth.
Cualquier ejemplo de Bonjour debería funcionar automáticamente.
Solo anuncia 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, vamos a llamarlo "Bluetooth Bonjour" está desactivado de manera predeterminada, por lo que debe usar la API de C declarada en <dns_sd.h>
.
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: muestra cómo puede buscar un servicio utilizando la API declarada en
<dns_sd.h>
.SRVResolver
objetivo OS X, pero incluye una clase llamadaSRVResolver
que puede usar en iOS tan fácilmente como puede usarlo en OS X. Para que iOS 5 Bluetooth P2P funcione, actualice la llamada aDNSServiceQueryRecord()
para pasarkDNSServiceFlagsIncludeP2P
como elkDNSServiceFlagsIncludeP2P
interfaceIndex
. ( ¡NOTA! Esta muestra no parece existir en el conjunto de documentos OS X 10.8. Se puede encontrar en los documentos 10.6 y 10.7. En 10.8, está el ejemplo DNSSDObjects, pero no miré exactamente lo que hace). - WiTap: mientras no te importe la compatibilidad con Bluetooth en iOS 5, solo observa el ejemplo llamado WiTap, que demuestra no solo la hermosa API de Objective-C, sino también cómo puedes crear un servidor utilizando las API de CFSocket. envoltorios alrededor de zócalos BSD). Usted querrá ver esto incluso si está usando SRVResolver para ver cómo usar la API basada en C desde
<dns_sd.h>
.
Después de anunciar o resolver su servicio, utiliza sockets BSD normales para escuchar o conectarse. Al escribir un servidor, es posible que incluso desee listen()
primero listen()
en el puerto 0 (cero) y luego consultar qué puerto aleatorio disponible se le asignó. Después de consultar por eso, anuncie este puerto en lugar de uno fijo. Eso es exactamente lo que está haciendo el ejemplo de WiTap (pero con la API CFSocket en lugar de la API de socket BSD).
Para obtener más información sobre sockets BSD, solo busque en Google para un tutorial.
Nota: la información sobre iOS 5 proviene de las Preguntas y respuestas técnicas QA1753 de Apple .