Come ottenere l'indirizzo IP del proprio iPhone [AGGIORNATO]

Pubblicato il 16/10/2009 in Tutorial iPhone SDK Object-c
[i][code]Cercando su Google un metodo per ottenere l'indirizzo IP del nostro dispositivo (iPhone o iPod Touch) l'unico metodo trovato è un metodo, come dire, è più un trucchetto che un metodo vero e proprio, infatti l'autore usa la classe NSHost per ricavarne gli indirizzi, ma codesta classe, sbirciando nella documentazione Apple, può essere usata teoricamente solo per le applicazioni Mac e non per l'iPhone.

Indispettito da ciò ho cercato un metodo più "legale" ed eccone il risultato di seguito.
Ho usato funzioni di più basso livello e in questo tutorial tralascerò le questioni riguardanti l'interfaccia e i collegamenti tra oggetti, vi riporterò solo il codice del metodo, commentato, per ottenere l'ip.

Trovai questa bella funzione "gethostbyname()" che mi restituiva l'host e tutte le sue informazioni.. dissi "bene è fatta!" ma come dice lo stesso nome della funzione serve il nome dell'host.
Nella documentazione Apple ho trovato un modo per ottenerlo: usando la classe UIDevice esiste un metodo che mi restituisce il nome dell'host, ma questo non è completo, manca della parte ".local" finale che ne determina penso l'appartenenza ad una rete locale.

Di seguito il sorgente del metodo:

-(NSString *)ottieniIP {
/* dichiaro le variabili che mi rerviranno */
struct hostent *myHost;
struct in_addr **addr_list;
char *mioIP;

/* ottengo il nome dell'host ovvero del dispositivo in rete */
NSString *nomeHost = [[NSProcessInfo processInfo] hostName];
/* aggiungo ".local" poichè indica la rete locale */
nomeHost = [nomeHost stringByAppendingFormat:@".local" ];

/* ottengo l'host */
myHost = gethostbyname([nomeHost cStringUsingEncoding:1]);

/* ricavo tutti gli indirizzi dell'host */
addr_list = (struct in_addr **)myHost->h_addr_list;
for(int i = 0; addr_list[i] != NULL; i++) {
printf("%s \n", inet_ntoa(*addr_list[i]));
mioIP = inet_ntoa(*addr_list[i]);
}

/* restituisco l'ultimo indirizzo trovato */
return [NSString stringWithCString:mioIP encoding:1];

}


Non penso ci sia molto da spiegare. QUI il link al mio progetto e i commenti per eventuali chiarimenti.

Dimenticavo di dire che l'applicazione può essere testata solamente su un iPhone o iPod Touch e non col simulatore. La cosa credo dipenda dal fatto che la classe "UIDevice" non lavora correttamente sul simulatore.
Non vorrei sbagliare, ma nel mio progetto è già compilata l'applicazione che può essere installata sul dispositivo (anche non jailbreak), non garantisco, provate e fatemi sapere.
Visite all'articolo: 71
Vota l'articolo (media attuale su 0 voti: )


Vuoi aggiungere un commento?
Il tuo nome
La tua email (non verrà pubblicata)
Commento
Francesco Burelli © 2009 tutti i diritti riservati.