La semplicità del Generic Connection Framework è ancora più evidente quando, effettuando una connessione tramite socket, invece che con il protocollo HTTP, si scopre che il procedimento è simile.
Listato 20. Connessione tramite socket (Vedi codice completo)
..//
sc = (StreamConnection)Connector.open("socket://80.20.12.112:9012", Connector.READ_WRITE, true);
is = sc.openDataInputStream();
os = sc.openDataOutputStream();
os.write("OKrn".getBytes());
os.flush();
// Analizzare risposta con InputStream is
......
..//
Ancora una volta la connessione può essere ottenuta con il metodo open
della classe Connector
, dove l'url inizia questa volta per "socket://" e quello che si ottiene può essere "castato" a StreamConnection
.
Troviamo inoltre due parametri nella chiamata al metodo:
READ_WRITE
indica che il canale sarà stabilito con possibilità di lettura e scrittura (si possono settare la modalità anche solo in scrittura, con WRITE, o solo in lettura, con WRITE);- true permette, alla nostra applicazione, di aspettarsi un eccezione in caso di timeout del canale.
Una volta stabilita la connessione si possono inviare dati: nell'esempio abbiamo supposto che il server si aspetti da parte della midlet un OK prima di iniziare ad inviarle i dati da analizzare.
Alcuni suggerimenti per il networking
Quando si sviluppano midlet che accedono in rete è molto importante, dopo avere eseguito i test sui vari emulatori, testare l'applicazione anche su terminali reali in quanto spesso si possono verificare sorprese sgradevoli e inaspettate.
Con l'esperienza è opportuno costruirsi un documento dove si riassumono tutte le issue che si incontrano quando si ha a che fare con i reali telefoni cellulari. I comportamenti possono essere diversi, oltre che tra marche e modelli differenti, anche tra cellulari dello stesso modello ma con versioni firmware diverse.
Con alcuni Nokia 6600, che hanno una certa versione firmware, si manifesta un blocco, nella connessione (tramite il metodo Connector.open()
), se si prova il collegamento a server che non ritornano il parametro Content-Length tra gli header della risposta.
Quando si incontrano problemi "inspiegabili", del tipo funzionamento ok su emulatore e malfunzionamento su terminale reale, è utile fare riferimento ai siti dei vari produttori, alle loro documentazioni o ai loro forum di sviluppatori per trovare una soluzione in tempi rapidi:
- Nokia - Forum sviluppatori
- Motorola – Supporto tecnico
- Sony Ericcson - Forum sviluppatori
Quando si utilizzano connessioni socket, si deve fare attenzione ad usare porte che non sono bloccate da eventuali firewall che potrebbero invalidare i test.
Infine, un suggerimento di carattere economico: se si devono eseguire molti test, con traffico reale, controllare sempre i siti dei vari operatori telefonici e valutare se può essere conveniente acquistare una delle tariffe flat GPRS/UMTS che vengono offerte, piuttosto che spendere molte decine di euro consumando pochi kilobyte.