2015-12-21 23 views
5

Ağdaki Bonjour hizmetlerini yayımlamak ve taramak için NSNetService ve NSNetServiceBrowser kullanıyorum. Uygulama iyi çalışıyor, hizmetler ağda bulunuyor ve iletişim kurabiliyor. Şu anda çerçevenin yaşam döngüsünü anlamaya çalışıyorum ve bu defa ne var: Ben adaptörlü hizmetlerini başlatmak eğerBir bonjour hizmetinin durumunun bilinmesi

// Scanning 
netServiceBrowserWillSearch: 
netServiceBrowser:didFindService:moreComing: // The device finds itself 

// Advertising 
netServiceWillPublish: 
netServiceDidPublish: 

bu gerçekleşir. Şimdi, her zaman, hizmetin ağda aktif olarak tanıtılıp duyurulmadığını bilmem gerekiyor; Yani, diğer cihazlar bunu bulabilirse. Yani Wi-Fi adaptörü kapatarak ile test:

netServiceBrowser:didRemoveService:moreComing: 
netServiceBrowser:didFindService:moreComing: // The device finds itself again, even after the adapter is turned off 

Sonra tekrar adaptörü açmak:

netServiceBrowser:didRemoveService:moreComing: 
netServiceBrowser:didFindService:moreComing: // Yet again 

sorun üzerinde adaptörü dönüm hiçbir fark kesinlikle olmamasıdır veya kapalı, ben bir desen arayamıyorum. Bu olayları yakalayabileceğim başka bir yol var mı?

Düzenleme: En kötüsü olur. Her iki adaptör kapalıyken de (uçak modu) netServiceDidPublish: servislerini başlatsam bile çağrılırım. Şimdiye kadar netServiceDidNotPublish: sadece aynı hizmeti iki kez kaydetmeye çalıştığımda çağrılıyormuş gibi görünüyor. Bu bana karşı çok sezgisel; Belki de hizmet, adaptöre yayınlandı, ancak ağdan değil, ve bu gibi geri bildirimler çok yanıltıcı. Bu noktada hizmetin ağda görünüp görünmeyeceğini bilmem mümkün değil.

+0

Aynı soruna rastladım. Bunun için bir çözüm buldunuz mu? – Mark

+0

@Mark, bir cevap gönderdim. En iyi ördek! –

cevap

0

Gelecekte başvurmak için, bunu çözmek için geçici çözümler kullanmam gerekiyordu. Sorun, Bonjour'un hizmetlerini protokol yığında yayınlamasıdır, bu yüzden adaptör asla devlet için sorgulanmayacaktır. Bu, Bonjour'un çoklu taşıma protokolü olduğu için mantıklı. Bunu çözmek için, Wi-Fi doğrudan destek için query the adapter for the presence of the adwl0 interface numaralı noktada, Altyapı Wi-Fi için adaptör durumu değişikliklerini dinlemek üzere Apple'ın reachability çerçevesinin bir uyarlamasını kullandım. Önemli not: Bu makale, numaralı doğru olmayan genel Wi-Fi bağlantısı için destek bulmaktadır; awdl0 arayüzü Wi-Fi Direct arayüzüdür, bu iPhone 4/4S gibi cihazlarda bu yüzden başarısız olur. Bu tamam, çünkü bu cihazlar Wi-Fi Direct'i desteklemiyor. Bonjour'un Bluetooth ile çalıştığı gibi, Bluetooth adaptörünün durum değişikliklerini dinlemek için CoreBluetooth kullanıyorum. Bu çerçeve Bluetooth Düşük Enerji için tasarlanmış olsa da, Bluetooth adaptörünün açık olması, Bonjour servislerinin ağda görülebileceğine dair güçlü bir güvence olduğuna inanıyorum. Apple'ın bunu bir çözüm olmadan yapmasına izin vermesi biraz talihsiz bir şey, ama sanırım elde ettiğimiz şey bu.

İlgili konular