Laboratorio di Programmazione di Rete Corso A

Documenti analoghi
Java Virtual Machine

Esercizi sugli Oggetti Monitor

Multithreading in Java. Fondamenti di Sistemi Informativi

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

Java threads (2) Programmazione Concorrente

Telematica II 17. Esercitazione/Laboratorio 6

Socket & RMI Ingegneria del Software - San Pietro

GESTIONE DEI PROCESSI

Introduzione alle applicazioni di rete

Applicazioni distribuite

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

appunti delle lezioni Architetture client/server: applicazioni client

Un esercizio d esame. Flavio De Paoli

Java Remote Method Invocation

RMI. Java RMI RMI. G. Prencipe

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

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

Ottava Esercitazione. introduzione ai thread java mutua esclusione

19. Introduzione al multi-threading

Lezione n.2 20/2/2006

Lezione n.10 LPR- Informatica Applicata RMI CallBacks

Compute engine generici in RMI

13. Chain of Responsibility

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

Main System Monitor Keyboard

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

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Programmazione dei socket con TCP #2

Architettura Client-Server

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Gestione delle Eccezioni

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

RMI Remote Method Invocation

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

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

Gestione delle eccezioni in Java

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

Gestione dei thread in Java LSO 2008

Telematica II 12. Esercitazione/Laboratorio 4

Cenni di programmazione distribuita in C++ Mauro Piccolo

Reti di Telecomunicazione Lezione 8

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Transmission Control Protocol

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

FONDAMENTI di INFORMATICA L. Mezzalira

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

La concorrenza in Java package java.util.concurrent Antonio Furone

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Altri tipi di connessione

Corso di Informatica Modulo T3 B2 - Database in rete

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Syllabus C310 - Insegnamenti disciplinari

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

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

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

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

appunti delle lezioni Architetture client/server: applicazioni server

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Parte II: Reti di calcolatori Lezione 12

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Mercoledì 14 Settembre 2005, ore 9.00

Parte II: Reti di calcolatori Lezione 10

Lo scenario: la definizione di Internet

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

Appunti di Informatica 1

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

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

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

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Standard di comunicazione

Reti di Telecomunicazione Lezione 6

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Maschere di sottorete a lunghezza variabile

Lezione 1 Introduzione

API e socket per lo sviluppo di applicazioni Web Based

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

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

Lezione n.1. JAVA: Tasks e Threads. 22/9/2009 Vincenzo Gervasi

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Architettura MVC-2: i JavaBeans

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

JDBC di base. Le classi/interfacce principali di JDBC

Oggetti Lezione 3. aspetti generali e definizione di classi I

ELEMENTI DI PROGETTAZIONE SOFTWARE

RMI: metodi equals e hashcode

Networking. Mauro Migliardi Ph. D.

Programmazione di sistemi distribuiti

Sistemi Operativi (modulo di Informatica II)

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

Programmazione distribuita

Transcript:

Laboratorio di Programmazione di Rete Corso A Anno Accademico 2005-2006 Docente: Laura Ricci Assistente: Paolo Mori

INFORMAZIONI UTILI Orario del Corso: Lunedì 9.00-11.00 Laboratorio Gruppo A 11.00-13.00 Laboratorio Gruppo B Mercoledì 9.00-11.00 Lezione, Aula A Laboratorio: Orario Modalità Verifica degli esercizi assegnati nella lezione teorica precedente. (verrà controlla la correttezza degli esercizi svolti da alcuni gruppi estratti a sorte) di Ricevimento : Giovedì ore 15.00 18.00 (possibili spostamenti nel corso del semestre) di esame: Progetto finale + Orale Orale: discussione del progetto + domande sugli argomenti trattati nelle lezioni teoriche (soprattutto quelli non coperti dal progetto)

INFORMAZIONI UTILI Prerequisiti: conoscenza del linguaggio JAVA, in particolare definizione di packages, gestione delle eccezione, multithreading, streams Linguaggio Ambiente Materiale di programmazione: JAVA 1.5, librerie JAVA.NET, JAVA.RMI. di Sviluppo: Linux, Eclipse 1.3 oppure emacs+javac +JAVA Didattico: Lucidi delle lezioni M.L. Liu Distributed Computing, Principles and Applications, Addison Wesley Harold - JAVA Network Programming 2nd edition O'Reilly 2001 (la versione tradotta in italiano riguarda la prima edizione del testo). Materiale di Consultazione: M.Hughes, M. Shoffner, D.Hammer Java Network Programming Per i costrutti di base, Cay Horstmann Concetti di Informatica e Fondamenti di Java2

PROGRAMMA DEL CORSO Meccanismi per la Gestione delle Eccezioni: Sollevamento, Rilevazione, Gestione di eccezioni. Costrutti throws, try-catch. Threads: Classe Threads, Interfaccia Runnable, Attivazione, Priorità, Strutture dati condivise, Metodi synchronized. Streams: Proprietà degli Streams, Tipi di streams, Composizione di streams, ByteArrayInputStream, ByteArrayOutputStream. Indirizzamento IP: Classi di Indirizzi, Subnetting, Subnet Masks, Gestione degli Indirizzi IP in JAVA: La classe InetAddress. Meccanismi di Comunicazione in Rete: Sockets Connectionless e Connection Oriented. Connectionless Sockets: La classe Datagram Socket: creazione di sockets, generazione di pacchetti, timeouts, uso degli streams per la generazione di pacchetti di bytes, invio di oggetti su sockets connectionless. Multicast: La classe MulticastSocket, Indirizzi di Multicast, Associazione ad un gruppo di multicast. Proposte di reliable multicast (FIFO multicast,causal multicast, atomic multicast).

PROGRAMMA DEL CORSO Multicast: La classe MulticastSocket, Indirizzi di Multicast, Associazione ad un gruppo di multicast. Proposte di reliable multicast (FIFO multicast,causal multicast, atomic multicast). Connection Oriented Sockets: Le classi ServerSocket e Socket. Invio di oggetti su sockets TCP. Il Paradigma Client/Server: Caratteristiche del paradigma client/ server, Meccanismi per l'individuazione di un servizio, architettura di un servizio di rete. Oggetti Distribuiti: Remote Method Invocation, Definizione di Oggetti Remoti, Registrazione di Oggetti, Generazione di Stub e Skeletons. Meccanismi RMI Avanzati: Il meccanismo delle callback. Cenni a CORBA

1. Specifica 2. Intercettazione GESTIONE DELLE ECCEZIONI Perché la Gestione delle eccezioni? Si richiede di gestire correttamente le numerose eccezioni sollevate dai metodi delle classi della libreria JAVA.NET (es: localizzazione di un host remoto impossibile, spedizione di un messaggio sulla rete non eseguita con successo ). Passi fondamentali per una corretta gestione delle eccezioni: e Lancio della Eccezione (clausole throw + throws) (clausole try + catch) 3. Gestione Cosa è una eccezione? E un oggetto appartenente ad una qualunque classe derivata dalla Throwable. L oggetto descrive la eccezione che è stata sollevata Throwable Exception Error RunTimeException..

GESTIONE DELLE ECCEZIONI: SPECIFICA E LANCIO DivideByZeroTest :effettua la divisione tra due numeri e solleva una eccezione se il denominatore è uguale a 0. public class DivideByZeroTest {public static double quotient (int numerator, int denominator) throws ArithmeticException {if (denominator == 0) throw new ArithmeticException ( hai diviso per 0 ); return (double) numerator/denominator;};} Specifica: Elencare nella intestazione del metodo i tipi delle eccezioni sollevate (throws) Lancio: Creazione di un oggetto di tipo eccezione (es: ArithmeticException è una sottoclasse della RunTimeException) + lancio della eccezione (throws) Se si utilizzano librerie predefinite, controllare sulle API i tipi delle eccezioni sollevate dai metodi invocati

GESTIONE DELLE ECCEZIONI: INTERCETTAZIONE+GESTIONE Il programma P che invoca la ArithmeticException può: decidere intercettare di non gestire la eventuale eccezione sollevata ma di propagarla ai livelli superiori la eccezione deve essere dichiarata nella intestazione di P e gestire la eccezione intercettazione try + catch public static void main (String args[ ]) {int x,y; double ris; boolean ecc=false; try { x= Integer. parseint (args[0]); y= Integer. parseint (args[1]); ris= DivideByZeroTest.quotient (x,y); System.out.println (ris); } catch (ArithmeticException e) {System.out.println (e); ecc=true;} if (!ecc) {System.out.println ( non si e' verificata l'eccezione );} }

GESTIONE DELLE ECCEZIONI: INTERCETTAZIONE+GESTIONE Blocco try-catch = blocco di codice racchiuso in parentesi graffe tra try e catch Gestore delle eccezioni = blocco di codice racchiuso tra le parentesi graffe che seguono la clausola catch. Semantica try + catch: Esecuzione Se Se delle istruzioni all interno del blocco try-catch; le istruzioni ed i metodi eseguiti non sollevano eccezioni, si prosegue con la prima istruzione dopo il blocco try+catch; viene sollevata una eccezione, si interrompe l esecuzione del blocco try+catch e si passa il controllo al gestore delle istruzioni. Dopo l esecuzione del gestore, si prosegue con la prima istruzione dopo il blocco try-catch

GESTIONE DELLE ECCEZIONI: INTERCETTAZIONE+GESTIONE public static void main (String args[ ]) {int x,y; double ris; boolean ecc=false; try { x= Integer. parseint (args[0]); y= Integer. parseint (args[1]); ris= DivideByZeroTest.quotient (x,y); System.out.println (ris); } catch (ArithmeticException e) {System.out.println (e); ecc=true;} if (!ecc) {System.out.println (e);} }

GESTIONE DELLE ECCEZIONI: ALCUNI METODI UTILI Su un oggetto di tipo eccezione è possibile invocare tutti i metodi di base che possono essere invocati sul tipo base Throwable void printstacktrace() visualizza lo stack delle chiamate, cioè la sequenza dei metodi invocati fino al punto in cui si è verificata l eccezione: Esempio1: Se inserisco nell'esempio precedente e.printstacktrace() java.lang.arithmeticexception: hai diviso per 0 at DivideByZeroTest.quotient(DivideByZeroTest.java:4) at provadivide.main(provadivide.java:11) String e.getmessage() restituisce il messaggio che descrive la eccezione

GESTIONE DELLE ECCEZIONI: USO DELLA PRINTSTACKTRACE() public class Esempio { public static void main (String args[]) { try { method1 ( ); } catch (Exception e) {e.printstacktrace( );} }; public static void method1( ) throws Exception { method2 ( )}; public static void method2( ) throws Exception { method3 ( )}; public static void method3( ) throws Exception { throw new Exception( Ho sollevato una eccezione );}; }

MULTI THREADING:MOTIVAZIONI possibilità di definire più flussi di esecuzione all interno dello stesso programma; se il programma viene eseguito su un multiprocessor i threads vengono eseguiti simultaneamente miglioramento delle prestazioni del programma; se il programma viene eseguito su un uniprocessor i threads vengono eseguiti in timesharing sullo stesso processore l esecuzione dei diversi flussi di esecuzione avanza concorrentemente Non una panacea per aumentare le prestazioni, ma uno strumento per scrivere software robusto e responsivo, ad esempio consideriamo un browser : mentre viene caricata una pagina, mostra una animazione. Inoltre mentre carico la pagina posso premere il bottone di stop ed interrompere il caricamento. Le diverse attività possono essere associati a threads diversi. realizzazione di applicazioni client/server: ogni diversa richiesta di connessione dei clients può essere elaborata in un thread diverso (possibilmente su processori diversi)

Come si possono creare i Threads? Primo metodo derivare istanziare MULTI THREADING IN JAVA una classe della classe Thread ed effettuare un overriding del metodo run() un oggetto della sottoclasse creata ed invocare il metodo start() sull oggetto istanziato public class FooThread extends Thread { public void run ( ) { for (int i=0;i<100;i++) { System.out.println ( i= +i++); }} public static void main (String [ ] args) { FooThread myfoothread = new FooThread ( ); myfoothread.start(); }}

MULTI THREADING IN JAVA Secondo Metodo creare istanziare rendere una classe che implementa l interfaccia Runnable () ed implementare il metodo run() definito in questa interfaccia un oggetto di questa classe questo oggetto un thread public class FooRunnable implements Runnable { public void run ( ) { for (int i=0;i<100;i++) { System.out.println ( i= +i++); }} public static void main (String [ ] args) { }} FooRunnable myfoorunnable = new FooRunnable ( ); Thread foothread = new Thread (myfoorunnable); foothread.start();

MULTI THREADING IN JAVA Come scegliere tra i due metodi? In JAVA una classe può estendere una solo altra classe (eredità singola) il primo metodo può essere utilizzato solo quando la classe i cui oggetti devono essere eseguiti come threads non deve estendere altre classi Secondo metodo: gli oggetti Thread possono appartenere ad una classe classe che estende una classe arbitraria Esempio: Gestione degli eventi (es: movimento mouse, tastiera ) la classe che gestisce l evento deve è estendere una classe predefinita JAVA naturale eseguire il gestore come un thread separato

MULTI THREADING IN JAVA Stati di un thread: running, blocked, finished L esecuzione di un thread termina quando il metodo run() ha completato l esecuzione. L esecuzione di un thread può essere bloccata/sbloccata a causa di diversi eventi Esecuzione di una operazione di I/O metodi wait(), sleep(), yeld(), notify(), notifyall(), interrupt().. Metodo interrupt(), consente di risvegliare un thread

MULTI THREADING IN JAVA: SINCRONIZZAZIONE TRA THREADS import java.util.*; class Buffer {private Vector objects; public Buffer ( ){ objects = new Vector();} public Object extract() throws InterruptedException { synchronized (objects) { while (objects.isempty()){ objects.wait(); } Object object = objects.firstelement(); objects.removeelementat(0); return object; }} public void insert (Object object){ synchronized (objects){ objects.addelement(object); objects.notify(); }}}

MULTI THREADING IN JAVA: SINCRONIZZAZIONE TRA THREADS public class Consumer1 extends Thread { private Buffer buffer; public Consumer1(Buffer b){ this.buffer=b; } public void run() { try{ while (true) {Object object = buffer.extract(); } System.out.println(object); }}catch (InterruptedException ignored){ }

MULTI THREADING IN JAVA: SINCRONIZZAZIONE TRA THREADS public static void main (String args[ ]) throws InterruptedException{ } } Buffer buffer = new Buffer(); Consumer1 consumer = new Consumer1(buff); consumer.start( ); for (int i=0;i<20;i++) {int casual= (int)(math.random()*5000); buffer.insert(casual); }

ESERCIZIO Il laboratorio di Informatica del Polo Marconi è utilizzato da tre tipi di utenti, studenti, tesisti e professori ed ogni utente deve fare una richiesta al tutor per accedere al laboratorio. I computers del laboratorio sono numerati da 1 a 20. Le richieste di accesso sono diverse a seconda del tipo dell'utente: a) i professori accedono in modo esclusivo a tutto il laboratorio, poichè hanno necessità di utilizzare tutti i computers per effettuare prove in rete. b) i tesisti richiedono l'uso esclusivo di un solo computer, identificato dall'indice i, poiche' su quel computer e' istallato un particolare software necessario per lo sviluppo della tesi. c) gli studenti richiedono l'uso esclusivo di un qualsiasi computer. I professori hanno priorità su tutti nell'accesso al laboratorio, i tesisti hanno priorità sugli studenti. Scrivere un programma JAVA che simuli il comportamento degli utenti e del tutor. Il programma riceve in ingresso il numero di studenti, tesisti e professori che utilizzano il laboratorio ed attiva un thread per ogni utente. Ogni utente accede k volte al laboratorio, con k generato casualmente. Simulare l'intervallo di tempo che intercorre tra un accesso ed il successivo e l'intervallo di permanenza in laboratorio mediante il metodo sleep. Il tutor deve coordinare gli accessi al laboratorio. Il programma deve terminare quando tutti gli utenti hanno completato i loro accessi al laboratorio.

PROGRAMMAZIONE DI RETE: INTRODUZIONE Sistema Distribuito = insieme di hosts (computers) indipendenti, collegati mediante una Rete, e che possono collaborare per l esecuzione di un task. Distributed Computing (Network Computing) elaborazione effettuata da un sistema distribuito Parallel Computing utilizzazione simulatnea di più processori per eseguire un singolo Programma con alti requisiti computazionali. Scopo: aumento delle prestazioni del (compute-intensive applications, previsioni del tempo, grafica, astronomia, )

PROGRAMMAZIONE DI RETE: INTRODUZIONE Network Computing: per poter collaborare alla realizzazione di un task, due o più processi in esecuzione su hosts diversi, distribuiti sulla rete, devono comunicare, ovvero scambiarsi informazioni Comunicazione = Utilizza protocolli (= insieme di regole che i partners della comunicazione devono seguire per poter comunicare) ben definiti Alcuni protocolli utilizzati in INTERNET: TCP UDP (Trasmission Control Protocol) un protocollo connection-oriented (User Datagram Protocol) un protocollo connectionless

PROGRAMMAZIONE DI RETE: MECCANISMI DI IDENTIFICAZIONE DEGLI HOSTS Host Network Internet Backbone

PROGRAMMAZIONE DI RETE: MECCANISMI DI IDENTIFICAZIONE DEGLI HOSTS Identificare un processo con cui si vuole comunicare Occorre identificare la l host il rete all interno della quale si trova l host su cui e in esecuzione il processo all interno della rete processo in esecuzione sull host Identificazione dell host = defnita dal protocollo IP (Internet Protocol) Facciamo riferimento ad IPv4 (IP versione 4). IPv6 (versione 6) si basa sugli stessi principi Identificazione del processo = utilizza il concetto di porta Porta = Intero da 0 a 65535

PROGRAMMAZIONE DI RETE: MECCANISMI DI IDENTIFICAZIONE DEGLI HOSTS In IPv4, ogni host sulla rete è identificato da una stringa di 32 bits (4 bytes o 4 ottetti) Indirizzi IP asseganti dalla Internet Assigned Number Autority (IANA) Dotted Decimal Notation = 129.65.24.50 10000001 00011000 00110010 01000001