ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete



Documenti analoghi
Architettura Client-Server

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Parte II: Reti di calcolatori Lezione 10

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Parte II: Reti di calcolatori Lezione 12

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori T

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

20 - Input/Output su File

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Applicazioni distribuite

Programmare con le Socket TCP in java. 2: Application Layer 1

Programmare con le Socket

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Programmare con le Socket TCP

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Esercizio 2. Client e server comunicano attraverso socket TCP

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Cifratura simmetrica

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Programmazione dei socket con TCP #2

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_ Stefano Millozzi

Corso sul linguaggio Java

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

appunti delle lezioni Architetture client/server: applicazioni server

PROVA FINALE Ingegneria del software

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Socket & RMI Ingegneria del Software - San Pietro

Reti di Calcolatori. Esercitazione su: Crittografia & Bet Server. A.A. 2010/2011 Reti di Calcolatori 1 (Es. 6)

Applicazioni web. Parte 5 Socket

Laboratorio di reti I: Il pacchetto java.net

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Altri tipi di connessione

Laboratorio di Informatica Lezione 4

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Programmazione distribuita in Java. Socket & Client-Server

Il linguaggio Java I file sequenziali

Pila di interi. Car 1. Car n. Pila di interi: Pila di Oggetti: Gli elementi che sono inseriti e tolti dalla pila sono numeri interi

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Utilizzo delle classi

appunti delle lezioni Architetture client/server: applicazioni client

Reti di Calcolatori:

RMI. Java RMI RMI. G. Prencipe

Corso sul linguaggio Java

Programmazione di rete in Java

Flussi, lettori e scrittori

Corso di Reti di Calcolatori. java.net.url

Eclipse. Avviare un progetto e compilare un semplice programma

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Telematica II 12. Esercitazione/Laboratorio 4

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Unità B3 Strutture di controllo

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Alarms Android Mobile Programming Prof. R. De Prisco

Input/Output in Java

Programmazione di rete in Java Java fornisce per la gestione della comunicazione le classi del package di networking java.net

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Corso Eclipse. Prerequisiti. 1 Introduzione

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Programmazione ad Oggetti

domenica 9 giugno 13 Serializzazione

LABORATORIO DI INFORMATICA parte 6 -

LPR A 2005/2006 Lezione 5. Riepilogo Caratteristiche Datagram Socket Stream Mode Socket API Sockets Lato Client Sockets Lato Server Esempi

Introduzione. Java. G. Prencipe accesso alla rete -- TCP

Operazioni di scrittura e lettura con periferici in linguaggio Java

Tale attività non è descritta in questa dispensa

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Protocolli applicativi: FTP

Lezione n.7 LPR- Informatica Applicata

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte)

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Introduzione al Linguaggio C

Corso sul linguaggio Java

Sockets in Java. Lorenzo Gallucci

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Corso di Informatica Modulo T3 B2 - Database in rete

Gestione delle Eccezioni

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

A. Ferrari Stream e File

Introduzione alle applicazioni di rete

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

Come funziona internet

Cenni di programmazione distribuita in C++ Mauro Piccolo

Java Socket LSO 2008

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Corso basi di dati Installazione e gestione di PWS

Client - Server. Client Web: il BROWSER

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Client e Server comunicano tramite il protocollo SOAP.

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Transcript:

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete Compito in classe proposto Realizzare un applicazione C/S per trasferire al Client il contenuto di una pagina web scaricata dal Server. Si dovranno scrivere due programmi: un programma Server che si mette in ascolto (ciclo infinito) su una porta prestabilita per questo servizio e, quando arriva la richiesta del Client, provvede a salvare in locale in un file html la pagina richiesta e successivamente a inviare il file al Client; un programma Client che introduce da tastiera la stringa contenente l indirizzo http desiderato, invia la richiesta al Server e si mette in ascolto della risposta per poi salvare in locale il file ricevuto.

Unità 4 - Realizzare applicazioni per la comunicazione in rete Soluzione compito in classe proposto Realizziamo il servizio di download richiesto attraverso la scrittura di due programmi distinti: un programma ServerURL di tipo Server che si mette in ascolto su una porta prestabilita per quel servizio e, quando arriva la richiesta del Client, provvede a salvare in locale la pagina richiesta in un file html e di seguito a inviarne copia al Client; un programma ClientURL di tipo Client che introduce da tastiera la stringa contenente l indirizzo http, invia la richiesta al Server e si predispone a ricevere e salvare la copia del file html inviatogli dal Server. I due programmi, nel loro funzionamento abituale, devono essere eseguiti su due macchine diverse. E comunque possibile, per chi non disponesse di una rete o delle eventuali autorizzazioni, simulare il funzionamento dei due programmi in modalità stand-alone mandandoli in esecuzione parallelamente su un unico elaboratore. L indirizzo web (HTTP) viene gestito attraverso la classe URL. Per scaricare il contenuto dell'url usiamo direttamente il metodo della classe URL openstream(). La comunicazione tra il Client e il Server la realizziamo creando uno stream sulla porta 2000 del Server (Figura 1) utilizzando il protocollo TCP e dunque appoggiandoci alle classi ServerSocket e Socket contenute nel package java.net. localport random Viene inoltre utilizzata la classe InetAddress (sempre contenuta nel medesimo package) per gestire l indirizzo IP. La sequenza di passi che realizza la comunicazione tra i due processi è la seguente: 1. Server in ascolto sulla porta 2000 2. Client invia la richiesta contenente l URL sulla porta 2000 del Server 3. Server scarica la pagina dal web e la salva su file html in locale (C:/Server/compito.html) 4. Client in attesa sulla porta 2000 della copia del file html scaricato dal Server 5. Server invia al Client copia del file html scaricato 6. Client salva in locale copia del file html ricevuto (C:/Client/compito.html) e chiude la

Soluzione compito in classe proposto connessione 7. Server in ascolto sulla porta 2000 Codice Java per la parte CLIENT (ClientURL) ClientURL.java import java.net.*; import java.io.*; import java.util.inputmismatchexception; import java.util.scanner; public class ClientURL public static void main(string[] arg) // Porta del Server: utilizzare una porta maggiore di 1023 int ports=2000; // Oggetto da utilizzare per la comunicazione Socket connection; // Indirizzo del Server TCP InetAddress serveraddress; //stream per gestire il flusso di output OutputStream outsocket; PrintWriter streamout; String tastiera; /* Usare getlocalhost() se il Server è sulla stessa macchina del Client altrimenti occorre conoscere l'ip del Server */ serveraddress = InetAddress.getLocalHost(); System.out.println("Indirizzo del server trovato"); connection = new Socket(serverAddress, ports); System.out.println("Connessione aperta"); outsocket = connection.getoutputstream(); streamout = new PrintWriter(outSocket); System.out.println("Introduci l'url: (ESEMPIO http://java.sun.com) "); // Introduce da tastiera l URL e lo invia al Server: Scanner scanstring = new Scanner(System.in); tastiera=""; tastiera=scanstring.nextline(); scanstring.close(); catch (InputMismatchException imex) System.err.println(iMex);

Unità 4 - Realizzare applicazioni per la comunicazione in rete streamout.println(tastiera); streamout.close(); System.out.println("Richiesta inviata"); System.out.println("Client in attesa di trasferimento file sulla porta " + ports + "\n"); connection = new Socket(serverAddress, ports); System.out.println("Richiesta trasferimento ricevuta da " + connection); // Intercetto il flusso in arrivo cioè il file inviato dal Client: ObjectInputStream inputstream = new ObjectInputStream(connection.getInputStream()); // Eseguo un cast dell'oggetto ricevuto in tipo File: File in = (File) inputstream.readobject(); /* Estraggo il nome originale del file ricevuto e predispongo un file di output: */ File out = new File("C:/Client/" + in.getname()); // Lancio il metodo che esegue il salvataggio sul Server: System.out.println(" --ricezione file " + in.getname()); System.out.println(" --dimensione file " + in.length()); // Apro uno stream di input sul file che e' stato inviato: FileInputStream instream = new FileInputStream(in); // Apro uno stream di output per il salvataggio del nuovo file FileOutputStream outstream = new FileOutputStream(out); // Preparo il buffer per contenere una riga del file: byte[] buf = new byte[1024]; /* leggo, una riga per volta, il file originale (dallo stream di input) e lo scrivo nel file destinazione (nello stream di output): */ int i; while((i=instream.read(buf))!=-1) outstream.write(buf, 0, i); // Chiudo gli streams: instream.close(); outstream.close(); System.out.println(" --ricezione completata"); catch (Exception e) e.printstacktrace(); System.out.println("Connessione chiusa"); catch (IOException e) System.err.println(e);

Soluzione compito in classe proposto Codice Java per la parte SERVE (ServerURL) ServerURL.java import java.net.*; import java.io.*; import java.util.scanner; import java.io.ioexception; public class ServerURL public static void main(string[] arg) // Porta del Server: utilizzare una porta maggiore di 1023 int ports=2000; // Socket TCP ServerSocket ssocket; // Oggetto da utilizzare per la comunicazione: Socket connection; // Stream per gestire il flusso di input: InputStream insocket; Scanner streamin; String messagein; System.out.println("Apertura porta in corso"); ssocket = new ServerSocket(portS); while (true) System.out.println("Server in ascolto sulla porta " + ports + "\n"); connection = ssocket.accept(); System.out.println("Connessione stabilita"); // Estrae il messaggio ricevuto, lo mostra e poi chiude lo stream: insocket = connection.getinputstream(); streamin = new Scanner(inSocket); messagein = streamin.nextline(); streamin.close(); System.out.print("URL ricevuto: "); System.out.println(messageIn); System.out.println("Connessione chiusa"); // Crea un oggetto della classe URL: URL indirizzoweb = new URL(messageIn); // Salva il contenuto della pagina web in un file locale del Server: InputStream in = new BufferedInputStream(indirizzoWeb.openStream());

Unità 4 - Realizzare applicazioni per la comunicazione in rete OutputStream out = new BufferedOutputStream(new FileOutputStream("C:/Server/compito.html")); int readbyte = in.read(); while (readbyte >= 0) out.write(readbyte); readbyte = in.read(); in.close(); out.close(); File file = new File ("C:/Server/compito.html"); System.out.println("Server pronto a inviare file sulla porta " + ports + "\n"); connection = ssocket.accept(); System.out.println("Connessione stabilita"); ObjectOutputStream outputstream = new ObjectOutputStream(connection.getOutputStream()); outputstream.reset(); outputstream.writeobject(file); outputstream.flush(); outputstream.close(); System.out.println("File inviato"); catch (IOException e) /* IN CASO DI ERRORE VIENE TRASFERITO UN FILE ALARM.TXT PRECEDENTEMENTE PREDISPOSTO IN SOSTITUZIONE DI COMPITO.HTML */ System.err.println(e); File file = new File ("C:/Server/alarm.txt"); System.out.println("Server pronto a inviare alarm sulla porta " + ports + "\n"); connection = ssocket.accept(); System.out.println("Connessione stabilita"); ObjectOutputStream outputstream = new ObjectOutputStream(connection.getOutputStream()); outputstream.reset(); outputstream.writeobject(file); outputstream.flush(); outputstream.close(); System.out.println("File alarm inviato"); System.out.println("Connessione chiusa"); // Fine while catch (IOException e) System.err.println(e); // Fine main // Fine classe ServerURL

Soluzione compito in classe proposto I programmi sono stati provati con Eclipse Standard/SDK - Version: Kepler Release