2010-09-20 17 views
9

Conosco l'utilizzo di Bonjour per i servizi pubblicitari sul dominio "locale". Ho lavorato su diversi esempi e conosco le classi di Cocoa corrispondenti che uso per questo.Come pubblicizzare un servizio utilizzando Bonjour attraverso le sottoreti?

Sono curioso di sapere come pubblicizzo un semplice servizio Bonjour su una sottorete diversa. Nello specifico, sto provando a scrivere un servizio di rete che gira sul mio desktop che è connesso via ethernet. Il client viene eseguito su un dispositivo mobile (iPhone/iPad) connesso tramite Wi-Fi. Nella mia configurazione di rete, il Wifi si trova su una sottorete diversa da quella ethernet. Tuttavia, entrambi sono dietro il firewall. Non ho bisogno di fare pubblicità al di fuori del firewall, voglio semplicemente che i client wifi siano in grado di vedere i servizi pubblicizzati da un server ethernet connesso.

È possibile? So che Bonjour supporterà la comunicazione attraverso le sottoreti, ma ogni volta che cerco di leggere su questa caratteristica si immerge profondamente nei record DNS e quant'altro. Sono uno sviluppatore di applicazioni ... Non ho idea di quella roba, né voglio che gli utenti debbano preoccuparsi di ciò. Mi sto perdendo qualcosa di semplice?

+0

Sei sicuro che questa è una domanda di programmazione? Mi sembra più un problema di configurazione di rete. –

risposta

15

Questa non è una tipica domanda di programmazione, ma vedo che è un enorme ostacolo nel testare il codice basato su Bonjour.

Bonjour supporta due meccanismi per i server per informare i client sulla loro esistenza, prima i multicast sulla rete locale, il secondo DNS.

I multicast sono facili da usare perché non c'è alcuna configurazione, purtroppo può essere utilizzato solo sulla stessa rete.

DNS ha il lusso di lavorare su router (Internet), ma richiede server dei nomi e client correttamente configurati che utilizzano quel server dei nomi.

Penso che tu stia avendo solo due opzioni.

  1. pubblicizzare il vostro servizio Bonjour sulla rete WiFi
  2. configurare il proprio DNS

Nel primo caso, è importante rendersi conto che il servizio non deve necessariamente essere pubblicizzati per la propria applicazione in esecuzione su un Mac. È possibile utilizzare l'utilità dns-sd per registrare qualsiasi indirizzo IP/porta come servizio Bonjour sulla rete. Per questo lavoro è necessario una macchina (Mac, Linux), che è collegato al WiFi, ed eseguire dns-sd lì in un modo simile a questo:

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211 

Ciò crea un nuovo servizio di "http" con il nome di "Stack Overflow "come servizio Bonjour. Controllalo - eseguilo nel terminale e controllalo in Segnalibri di Safari sotto Bonjour. Allo stesso modo puoi registrare la tua domanda.

Sfortunatamente è necessario eseguirlo su una macchina collegata alla rete WiFi. Ciò significa che l'applicazione Mac pubblicizzerà sulla propria rete Ethernet, le pubblicità dns-sd su WiFi.

La seconda opzione è un po 'spaventosa, ma non è un grosso problema se sei disposto a sporcarti le mani con un po' di amministrazione.

Ancora una volta, non è necessario disporre di servizi registrati dinamicamente nel DNS. Puoi semplicemente codificare in modo rigido il nome del tuo Mac e la porta della tua app nella configurazione DNS. Quelle sono solo 4 righe che devono essere aggiunte al file di zona (file di configurazione DNS).

b._dns-sd._udp IN PTR @ ; b = browse domain 
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain 
_icool._tcp PTR iCool\ App\ Service._http._tcp 
iCool\ App\ Service._http._tcp  SRV 0 0 8888 macpro.domain.com. 

prime due righe dice client (dispositivi iOS nel tuo caso) che Bonjour è abilitato per questo dominio. La terza riga indica ai client che è disponibile un servizio "Servizio app iCool" di tipo icool. La quarta riga indica ai clienti l'indirizzo corrente e la porta del servizio.

I client cercheranno le voci DNS per i "domini di ricerca" configurati (o ottenuti tramite DHCP). Controlla le tue impostazioni di rete.

È possibile eseguire nameserver sul proprio Mac, qualche box Linux, oppure è possibile utilizzare servizi come dyndns.com.

Spero che questo aiuti.

+0

Bene, se non hai nessun box sulla rete WiFi, ma hai più dispositivi iOS, potresti creare una piccola app che registrerebbe l'applicazione del tuo Mac sulla rete WiFi. – Michal

+0

grazie a un uomo in gamba, questo mi ha davvero chiarito. Stavo pensando che fosse qualcosa di diverso nel lato PROGRAMMAZIONE. – pj4533

+0

Ehi amico, ho scritto un post sul blog con l'app che ho scritto per pubblicizzare il mio servizio bonjour. Sono stato anche in grado di ottenere il mio to-do manager, le cose, la sincronizzazione nel mio ufficio con questa tecnica. Ho creato l'app generica e ho inserito il codice su GitHub. http://www.saygoodnight.com/?p=170 grazie ancora. – pj4533