ALTRI TIPI DI CONNESSIONE
Socket Un socket è una connessione a una porta su un computer remoto, che è usata per scambiare informazioni con comandi HTTP Supponiamo che la nostra applicazione voglia ricevere uno stream di dati da un particolare file memorizzato su un server remoto Si apre una connessione socket Si spedisce un comand GET seguito dal nome del file, come HTTP request Si legge lo stream ricevuto come HTTP response
Socket (2) Si chiama il metodo open() passando la stringa contenente lo schema del socket: socket identifier seguito dall URL del server remoto, completo di numero di porta Esempio: socket://www.mioserver.com:80 Si usa il metodo println() di PrintStream per spedire stringhe contenenti comandi HTTP per il server remoto Si usa il metodo read() di InputStream per ricavare la HTTP response spedita dal server remoto attraverso la connessione socket
ServerSocketConnection Questa interfaccia definisce come accettare connessioni in entrata Estende javax.microedition.io.streamconnectionnotifier, che ascolta per connessioni incoming Si chiama il metodo open() passando una stringa tipo "socket://: 7" che definisce un server socket sulla porta 7 (porta echo) Se si omette il numero di porta, il dispositivo ne seleziona automaticamente una disponibile Se la stringa non è valida, viene lanciata IllegalArgumentException. Quando l applicazione necessita di connettersi al socket (per es. per gestire una richiesta entrante), invoca il metodo della server socket connection acceptandopen() che ritorna un istanza di SocketConnection La MIDlet deve essere attiva; conviene costruire tipo SMS MIDlet, basata su Wireless Messaging API (JSR 120) che alla ricezione di un sms lancia la ServerSocket MIDlet
Esempio // Crea il server socket che ascolta sulla porta 80 ServerSocketConnection scn=(serversocketconnection) Connector.open("socket://:80"); // Attende una connessione boolean attendi = true; while (attendi) { SocketConnection sc = (SocketConnection)scn.acceptAndOpen(); // Gestisce la connessione sc } Esempio: Socket Client, Socket Server
Connessione datagram Si basa sull'invio in rete di "messaggi" (datagram), senza garanzie sull'integrità dei dati giunti al destinatario, sull'istante di arrivo sulla consegna dei dati stessi. CONNECTIONLESS: non esiste tra mittente e destinatario del messaggio un percorso dedicato (neppure logico) i dati inviati contengono le informazioni necessarie per individuare il destinatario (indirizzo IP e porta) Adatta a reti di comunicazione wireless a commutazione di pacchetto, mentre può non essere supportata da reti a commutazione di circuito che si basano su stream
Connessione datagram (2) L'utilizzo delle connessioni di tipo datagram impone, solitamente, questi sei passi: il mittente stabilisce una connessione datagram il mittente costruisce un oggetto datagram da inviare contenente indirizzo e porta del destinatario e naturalmente le informazioni da inviare invio del datagram costruito attraverso la connessione aperta costruzione di un oggetto datagram (vuoto) per la ricezione di eventuali dati in risposta attesa di una eventuale risposta. I dati ricevuti vengono scritti nel datagram vuoto pre-allocato chiusura della connessione datagram aperta
UdpClient, UdpServer Esempio
Esercizio Scrivere una MIDlet che implementa un server UDP che interagisce col client UDP appena visto, per realizzare una chat a 3 o più utenti. Ogni messaggio dei client è rivolto al server, mentre i messaggi del server devono arrivare a tutti i client. Inoltre si faccia uso di TextBox o TextField al posto di StringItem, in modo da tenere traccia dei messaggi ricevuti. File da usare (modificare SOLO UdpServer): UdpClient.java, UdpServer.java, UdpSender.java