Applicazioni TCP/IP. Maurizio Cozzetto. Brescia 20 agosto 2014

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Applicazioni TCP/IP. Maurizio Cozzetto. Brescia 20 agosto 2014"

Transcript

1 Applicazioni TCP/IP Maurizio Cozzetto Brescia 20 agosto 2014 Un po' di teoria Ricordiamo che un'applicazione distribuita e un'applicazione composta da piu programmi (almeno 2) posti in esecuzione su macchine diverse all'interno di una rete di calcolatori e che utilizzano un protocollo di comunicazione comune. I pc connessi a Internet comunicano tra loro usando diversi protocolli tra cui il piu famoso e forse il TCP/IP (Transmission Control Protocol/Internet Protocol) ben supportato da Java. Un altro protocollo e l'udp (User Datagram Protocol). Il protocollo TCP/IP viene definito protocollo connection-oriented, orientato alla connessione, cioe garantisce che i pacchetti inviati arrivino a destinazione (se vi e un qualche errore il destinatario chiede la ritrasmissione del pacchetto), mentre l'udp non garantisce l'arrivo di tutti i pacchetti e viene definito connection-less. E' preferito in genere in tutti quei casi in cui perdite contenute di informazione durante la trasmissione sono trascurabili (come nelle trasmissioni audio-video) e quello che conta invece e la velocita di trasmissione. Java utilizza per la comunicazione in rete il paradigma di programmazione basato sul concetto di socket, progettato presso l'universita di Berkley (California). Socket Il socket puo essere definito come un punto terminale o di aggancio di una linea di comunicazione da cui un programma puo inviare i dati in rete e puo ricevere i dati dalla rete. Il socket (la traduzione letterale e presa di corrente) e un'astrazione software che e in qualche modo l'equivalente della presa elettrica per gli apparecchi elettrici. In pratica un socket e una coppia di valori, il primo identifica un computer e il secondo un processo sul computer: scendendo piu in dettaglio un socket e formato da un indirizzo IP (4 byte o 8 byte a seconda della versione dello standard IP, IPv4 o IPv6) che identifica un computer sulla rete e da un numero di porta TCP (2 byte) che identifica un processo o un'applicazione in esecuzione. Il socket rappresenta solo uno dei due capi di una comunicazione; due computer per comunicare usano ciascuno un socket e tra i due socket si crea una connessione (full-duplex) per il trasferimento dei dati in due direzioni. La realizzazione di applicazioni client/server in Java come vedremo tra poco si basa sulle classi contenute nel package java.net e in particolare sulle classi InetAddress, ServerSocket e Socket (per maggiori dettagli sui metodi posseduti dalle classi, consulta il libro di testo). Ricordiamo brevemente che un programma e detto client (front-end) se richiede un servizio a un programma detto server (back-end) che fornisce il servizio richiesto e poi si rimette in ascolto in attesa di ulteriori richieste da parte di altri client. É un modello asimmetrico (in contrapposizione col modello UDP che invece e simmetrico) chiamato anche request-replay perche si basa sul susseguirsi di richieste e risposte. Puo accadere frequentemente che su un server vi siano in esecuzione servizi diversi per cui, per distinguerli, si usa un numero identificativo del servizio, la porta appunto. Pag. 1/20

2 Per esempio su una macchina server, potrebbero girare il server web Apache (o il server web Tomcat, un server web Java che quindi richiede una JVM già installata, o entrambi) e il database server MySQL. Un web server fornisce solitamente pagine web statiche o dinamiche (se il server dispone di un opportuno interprete di un certo linguaggio come PHP o Java), un database server dati organizzati in un database relazionale. Le porte impiegate sono quasi sempre la porta 80 per il server web Apache, la porta 8080 per il web server Tomcat e la porta 3306 per il database server MySQL. Se si vogliono usare porte differenti, occorre configurare i server editando opportunamente determinati file di configurazione. Le porte dalla 0 alla 1023 sono riservate ai principali servizi di rete conosciuti e sono dette anche Well Known Ports, le porte dalla 1024 alla sono le Registered Ports, mentre le porte dalla alla sono le Dynamic and/or Private Ports. Per un elenco parziale delle Well Known Ports, consulta Inoltre un server singlethread (o server unicast o singlecast) e un server che comunica con un solo client alla volta (se esistono altri client, ogni cliente deve attendere il proprio turno), mentre se il server e multithread (o server multicast) al server possono connettersi contemporaneamente piu client (per ogni client, il server attiva un thread distinto) e poi si rimette in ascolto di nuove connessioni. Fig. 1. Un server multithread gestisce la comunicazione con 2 client mediante due oggetti di tipo Socket. L'oggetto di tipo ServerSocket è detto socket di benvenuto (Welcome socket) e provvede a creare i socket di comunicazione coi client per ogni richiesta. Altra considerazione importante e che, una volta stabilita la connessione, la comunicazione tra client e server e basata sulla comunicazione tra flussi di dati (stream), cioe inviare dati equivale a scrivere file mentre ricevere dati equivale a leggere file. In questo articolo, per ragioni di brevità, prenderemo in esame solo il protocollo TCP/IP. Pag. 2/20

3 Server unicast Cominciamo col vedere le istruzioni fondamentali per la creazione di un server unicast, che accetta richieste da parte di un client, fornisce la risposta (trasforma una stringa inviata dal client in maiuscolo) e quindi si rimettere in ascolto di una nuova richiesta. Il server, se riceve piu richieste, le mette in una coda di attesa, per cui fornisce il servizio ad un client alla volta. /* * TCPServer.java package it.mauriziocozzetto.tcpclientserver.simple; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.net.serversocket; import java.net.socket; /** maurizio public class TCPServer { public static void main(string[] args) throws IOException { // Crea un serversocket sulla porta 6789 ServerSocket serversocket = new ServerSocket(6789); while (true) { System.out.println("Server in ascolto sulla porta " + serversocket.getlocalport() + "..."); // Attesa di una richiesta di connessione da parte di un client Socket clientsocket = serversocket.accept(); // Stream di input bufferizzato proveniente dal client BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // Stream di output verso il client BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); // Legge i dati provenienti dal client String clientsentence = in.readline(); System.out.println("Stringa ricevuta: " + clientsentence); // Il server provvede a rendere maiuscola la stringa ricevuta dal client String capitalizedsentence = clientsentence.touppercase(); // Il server invia la stringa verso il client out.write(capitalizedsentence); // Invio di una nuova linea out.newline(); Pag. 3/20

4 // Forza l'invio dei dati verso il client out.flush(); // Chiusura degli stream e del socket in.close(); out.close(); clientsocket.close(); // Fine while // Fine main // Fine classe TCPServer Non avremmo in teoria bisogno di scrivere un client per testare questo server: si puo usare telnet. Ogni volta che premiamo <invio>, cio che abbiamo inserito viene spedito al server e che quello che viene inviato dal server viene scritto sullo schermo. Presenteremo in ogni caso successivamente un client Java per questioni di completezza. Fig. 2. Il telnet in azione. Il server in questo caso gira localmente. Il comando telnet richiede due parametri: il nome o l'indirizzo IP del server e la porta su cui esso risponde. Ecco invece il codice del client Java. /* * TCPClient.java package it.mauriziocozzetto.tcpclientserver.simple; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.net.socket; import java.util.scanner; Pag. 4/20

5 /** maurizio public class TCPClient { public static void main(string[] args) throws IOException { // Creazione di un socket sulla porta 6789 sulla macchina "localhost" Socket clientsocket = new Socket("localhost", 6789); // Stream proveniente dal server BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // Stream diretto verso il server BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); // Lettura dei dati da tastiera Scanner input = new Scanner(System.in); System.out.print("Inserisci una frase: "); String sentence = input.nextline(); // Invio dei dati dati al server out.write(sentence); // Nuova riga out.newline(); // Forza l'invio dei dati verso il server out.flush(); // Lettura della stringa dal server (il server la trasforma in maiuscolo) String modifiedsentence = in.readline(); // Stampa sulla console System.out.println("Dal server: " + modifiedsentence); // Chiusura degli stream e del socket in.close(); out.close(); clientsocket.close(); // Fine metodo main // Fine classe TCPClient Per provare il programma, dobbiamo prima lanciare il server e successivamente uno o piu client, altrimenti avremo degli errori in fase di esecuzione (in particolare si ottiene l'eccezione Connection refused). Ecco il risultato dell'esecuzione. Partiamo dal server. Server in ascolto sulla porta Stringa ricevuta: ciao come ti va? Server in ascolto sulla porta Pag. 5/20

6 Per un client Java, abbiamo: Inserisci una frase: ciao come ti va? Dal server: CIAO COME TI VA? BUILD SUCCESSFUL (total time: 1 minute 38 seconds) Possiamo notare che il client termina regolarmente la sua esecuzione, mentre il server rimane indefinitivamente in attesa. Per arrestare il server, dobbiamo interromperlo dall'ide o dobbiamo uccidere il relativo processo. Loop di richiesta Se vogliamo consentire ad un singolo client di ripetere la richiesta inviando piu stringhe al server, dobbiamo modificare non solo il codice del client ma anche il codice del server, inserendo due loop distinti. Nel loop del client, la condizione di arresto e l'inserimento della stringa 0 (oppure fine o FINE o qualsiasi altra stringa), mentre nel loop del server la condizione di uscita e in.readline() == null. Infatti, se il client chiude la connessione quando l'utente inserisce la stringa 0, in.readline() e null (in e l'oggetto di tipo BufferedReader associato al socket). Per brevità, riportiamo solo i frammenti di codice relativi ai loop. Per il client: // Preparazione dell'oggetto associato alla tastiera Scanner input = new Scanner(System.in); while(true) { // Lettura della stringa System.out.print("Inserisci una frase (0 per terminare): "); String sentence = input.nextline(); if (sentence.equals("0")) { break; // Invio dei dati dati al server out.write(sentence); out.newline(); out.flush(); // Lettura della stringa dal server (il server la trasforma in maiuscolo) String modifiedsentence = in.readline(); // Stampa sulla console System.out.println("Dal server: " + modifiedsentence); Per il server: while (true) { // Legge i dati provenienti dal client String clientsentence = in.readline(); if (clientsentence == null) { System.out.println("Il client ha chiuso la connessione"); break; Pag. 6/20

7 System.out.println("Stringa ricevuta: " + clientsentence); // Il server provvede a rendere maiuscola la stringa ricevuta dal client String capitalizedsentence = clientsentence.touppercase(); // Il server invia la stringa verso il client out.write(capitalizedsentence); out.newline(); out.flush(); // Fine while Ecco l'output prodotto dal programma (parte client): Inserisci una frase (0 per terminare): Questa è la frase 1 Dal server: QUESTA È LA FRASE 1 Inserisci una frase (0 per terminare): Questa è la frase 2 Dal server: QUESTA È LA FRASE 2 Inserisci una frase (0 per terminare): Questa è la frase 3 Dal server: QUESTA È LA FRASE 3 Inserisci una frase (0 per terminare): 0 BUILD SUCCESSFUL (total time: 29 seconds) Output prodotto dal server: Server in ascolto sulla porta Stringa ricevuta: Questa è la frase 1 Stringa ricevuta: Questa è la frase 2 Stringa ricevuta: Questa è la frase 3 Il client ha chiuso la connessione Server in ascolto sulla porta Classi wrapper Possiamo riscrivere l'applicativo precedente considerando due thread distinti, uno per il client e uno per il server e aggiungendo inoltre alcune informazioni (indirizzo IP, porta ecc) sulle connessioni stabilite. Partiamo dal codice del server. /* * TCPUnicastServerThread.java package it.mauriziocozzetto.tcpclientserver.unicast; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.net.serversocket; import java.net.socket; /** maurizio public class TCPUnicastServerThread extends Thread { private ServerSocket serversocket; Pag. 7/20

8 public TCPUnicastServerThread(int portnumber) throws IOException { serversocket = new ServerSocket(portNumber); System.out.println("Informazioni sul server"); public void run() { while (true) { try { System.out.println("Server in ascolto..."); // Attesa di una richiesta di connessione Socket clientsocket = serversocket.accept(); System.out.println("Informazioni sul client"); System.out.println(clientSocket.toString()); // Stream di input e di output da e verso il client BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); //Ricezione della stringa dal client String clientsentence = in.readline(); System.out.println("Stringa ricevuta: " + clientsentence); // Trasformazione in maiuscolo della stringa e invio al client String capitalizedsentence = clientsentence.touppercase(); out.write(capitalizedsentence); out.newline(); out.flush(); // Chiusura degli stream e del socket in.close(); out.close(); clientsocket.close(); catch (IOException e) { e.printstacktrace(); // Fine try-catch // Fine while // Fine metodo run public static void main(string argv[]) throws Exception { TCPUnicastServerThread serverthread = new TCPUnicastServerThread(6789); serverthread.start(); // Fine classe TCPUnicastServerThread Segue codice del client. /* * TCPClientThread.java Pag. 8/20

9 package it.mauriziocozzetto.tcpclientserver.unicast; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.net.socket; import java.util.scanner; /** maurizio public class TCPClientThread extends Thread { private Socket clientsocket; public TCPClientThread(String hostname, int portnumber) throws IOException { clientsocket = new Socket(hostname, portnumber); System.out.println("Informazioni sul client"); System.out.println(clientSocket); // Fine costruttore public void run() { try { // Stream da e verso il server BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); // Lettura della stringa da tastiera System.out.print("Inserisci una frase: "); Scanner input = new Scanner(System.in); String sentence = input.nextline(); // Invio della stringa al server out.write(sentence); out.newline(); out.flush(); // Ricezione della stringa convertita in maiuscolo e stampa String modifiedsentence = in.readline(); System.out.println("Dal server: " + modifiedsentence); // Chiusura degli stream e del socket in.close(); out.close(); clientsocket.close(); catch (IOException e) { e.printstacktrace(); // Fine try-catch public static void main(string argv[]) throws Exception { TCPClientThread clientthread = new TCPClientThread("localhost", 6789); Pag. 9/20

10 clientthread.start(); // Fine metodo main // Fine classe TCPClientThread Segue un esempio di esecuzione con un solo client. Informazioni sul client Socket[addr=localhost/ ,port=6789,localport=52269] Inserisci una frase: Ciao, come ti va? Dal server: CIAO, COME TI VA? BUILD SUCCESSFUL (total time: 9 seconds) Questo e l'output prodotto dal server. Informazioni sul server ServerSocket[addr= / ,localport=6789] Server in ascolto... Informazioni sul client Socket[addr=/ ,port=52269,localport=6789] Stringa ricevuta: Ciao, come ti va? Server in ascolto... Come si puo notare, la porta del client e un numero scelto dal sistema operativo. Server multicast I casi precedenti sono semplici esempi di servizi di tipo iterativo. Nei casi piu realistici, occorre implementare invece un server concorrente che crea uno specifico thread di comunicazione con il client, rendendo possibile l'accettazione di ulteriori richieste di connessione nello stesso tempo in cui sono gestiti uno o piu client. Riportiamo solo il codice del server e del thread creato dal server (il thread crea gli stream di comunicazione e si preoccupa di convertire la stringa ricevuta dal client in maiuscolo), mentre il codice del client rimane lo stesso dell'esempio precedente. /* * TCPMulticastServerThread.java package it.mauriziocozzetto.tcpclientserver.multicast; import java.io.ioexception; import java.net.serversocket; import java.net.socket; /** maurizio public class TCPMulticastServerThread extends Thread { private ServerSocket serversocket; public TCPMulticastServerThread(int portnumber) throws IOException { serversocket = new ServerSocket(portNumber); System.out.println("Informazioni sul server"); public void run() { Pag. 10/20

11 while (true) { try { System.out.println("Server in ascolto..."); // Attesa di una richiesta di connessione Socket clientsocket = serversocket.accept(); System.out.println("Informazioni sul client"); System.out.println(clientSocket.toString()); // Creazione e lancio del thread StringCapitalizerThread thread = new StringCapitalizerThread(clientSocket); thread.start(); catch (IOException e) { e.printstacktrace(); // Fine while // Fine metodo run public static void main(string argv[]) throws Exception { TCPMulticastServerThread serverthread = new TCPMulticastServerThread(6789); serverthread.start(); // fine classe TCPMulticastServerThread Segue codice del thread. /* * StringCapitalizerThread.java package it.mauriziocozzetto.tcpclientserver.multicast; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.ioexception; import java.io.inputstreamreader; import java.net.socket; /** maurizio public class StringCapitalizerThread extends Thread { private Socket socket; public StringCapitalizerThread(Socket socket) throws IOException { this.socket = public void run() { try { // Stream di input e di output da e verso il client BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())); Pag. 11/20

12 //Ricezione della stringa dal client String clientsentence = in.readline(); System.out.println("Stringa ricevuta: " + clientsentence); // Trasformazione in maiuscolo della stringa e invio al client String capitalizedsentence = clientsentence.touppercase(); out.write(capitalizedsentence); out.newline(); out.flush(); // Chiusura degli stream e del socket in.close(); out.close(); this.socket.close(); catch (IOException e) { e.printstacktrace(); // Fine metodo run // Fine classe StringCapitalizerThread Ecco l'output prodotto dal programma. Nel nostro caso, ci sono due client il cui arrivo e sequenziale, ma si puo ipotizzare tranquillamente che essi arrivino contemporaneamente. Output del server. Informazioni sul server ServerSocket[addr= / ,localport=6789] Server in ascolto... Informazioni sul client Socket[addr=/ ,port=53162,localport=6789] Server in ascolto... Stringa ricevuta: Hello, how are you? Informazioni sul client Socket[addr=/ ,port=53169,localport=6789] Server in ascolto... Stringa ricevuta: Ciao, come stai? Output dei client. Informazioni sul client Socket[addr=localhost/ ,port=6789,localport=53162] Inserisci una frase: Hello, how are you? Dal server: HELLO, HOW ARE YOU? BUILD SUCCESSFUL (total time: 10 seconds) Informazioni sul client Socket[addr=localhost/ ,port=6789,localport=53169] Inserisci una frase: Ciao, come stai? Dal server: CIAO, COME STAI? BUILD SUCCESSFUL (total time: 21 seconds) Implementazione di un protocollo testuale Di solito il thread di comunicazione col client implementa un protocollo applicativo di tipo testuale in base al quale il client invia una richiesta in forma di stringa di caratteri, il server la interpreta e successivamente risponde al client inviando la stringa di caratteri che soddisfa alle regole imposte dal Pag. 12/20

13 protocollo. Nel nostro caso, il protocollo testuale e basato sui seguenti comandi terminati dai caratteri CR (codice ASCII 13 o 0xD in esadecimale) e LF (codice ASCII 10 o 0xA): M,stringa m,stringa V,stringa S,stringa,inizio,fine Esempi di comandi del protocollo sono le stringhe M,ciao come stai? che richiede che la stringa posta dopo la M sia trasformata in maiuscolo (risultato: CIAO COME STAI?), oppure m,hello WORLD! che richiede che la stringa che segue la m minuscola sia trasformata in minuscolo (risultato: hello world!), oppure V,ciao come state? che richiede il conteggio delle vocali contenute nella stringa (risultato: 7 come oggetto stringa; se serve il valore numerico, ricorriamo al metodo statico parseint() della classe Integer). A tale proposito, presentiamo la classe CommandParser che valuta i comandi e la classe CommandParserTest che acquisisce le stringhe da analizzare da un file di testo, le interpreta correttamente e crea un file risultato. Per semplificare ulteriormente la gestione dell'input e dell'output di un file testuale, usiamo la libreria stdlib.jar sviluppata presso l'università di Princeton ( contiene i sorgenti, la libreria in formato jar e reperibile all'indirizzo In particolare, alle classi in forma compilata In e Out cui e demandata la gestione dell'input e dell'output in generale, la gestione dei file di testo e la comunicazione mediante socket. /** * CommandParser.java package it.mauriziocozzetto.parser; /** maurizio public class CommandParser { private String command; // la stringa di partenza private String sep; // il carattere di separazione public CommandParser(String command, String sep) { this.command = command; this.sep = sep; // Valuta la stringa e produce i risultati public String evaluate() { String[] s = this.command.split(this.sep); switch(s[0]) { case "M": if (s.length == 2) return s[1].touppercase(); else throw new RuntimeException("Comando M: il numero degli argomenti è sbagliato"); case "m": if (s.length == 2) Pag. 13/20

14 return (s[1].tolowercase()); else throw new RuntimeException("Comando m: il numero degli argomenti è sbagliato"); case "V": if (s.length == 2) { int c = 0; for (int i = 0; i < s[1].length(); i++) if (s[1].charat(i)=='a' s[1].charat(i)=='e' s[1].charat(i)=='i' s[1].charat(i)=='o' s[1].charat(i)=='u' s[1].charat(i)=='a' s[1].charat(i)=='e' s[1].charat(i)=='i' s[1].charat(i)=='o' s[1].charat(i)=='u') c++; return String.valueOf(c); else throw new RuntimeException("Comando V: il numero degli argomenti è sbagliato"); case "S": if (s.length == 4) { return s[1].substring(integer.parseint(s[2]), Integer.parseInt(s[3])); else throw new RuntimeException("Comando S: il numero degli argomenti è sbagliato"); default: throw new RuntimeException(s[0] + ": comando non previsto"); // Fine switch // Fine metodo evaluate // Proviamo i comandi del protocollo public static void main(string[] args) { CommandParser p = null; try { p = new CommandParser("M,ciao come ti va", ","); System.out.println(p.evaluate()); p = new CommandParser("S,ciao come ti va,2,8", ","); System.out.println(p.evaluate()); p = new CommandParser("m,hello everybody claps your hands!", ","); System.out.println(p.evaluate()); p = new CommandParser("m,ciao COME TI VA", ","); System.out.println(p.evaluate()); p = new CommandParser("V,ciao come ti va", ","); System.out.println(p.evaluate()); p = new CommandParser("X,ciao come ti va", ","); System.out.println(p.evaluate()); catch (RuntimeException e) { System.out.println(e.getMessage()); // Fine metodo main // Fine classe CommandParser Pag. 14/20

15 Output del programma: CIAO COME TI VA ao com hello everybody claps your hands! ciao come ti va 7 X: comando non previsto BUILD SUCCESSFUL (total time: 0 seconds) /* * CommandParserTest.java package it.mauriziocozzetto.parser; import java.io.file; import edu.princeton.cs.introcs.in; import edu.princeton.cs.introcs.out; /** maurizio public class CommandParserTest { public static void main(string[] args) { In f1 = null; try { // Controlliamo se il file esiste f1 = new In(new File("commands.txt")); catch (Exception e) { System.out.println(e); return; // Creiamo il file di output Out f2 = new Out("results.txt"); boolean error = false; // Finchè ci sono dati while (!f1.isempty()) { // Leggo una riga String s = f1.readline(); // Preparo l'oggetto parser che la analizza CommandParser parser = new CommandParser(s, ","); try{ // Valuto la riga e scrivo il risultato nel file di output f2.println(parser.evaluate()); // Mando anche a video i risultati come controllo System.out.println(parser.evaluate()); catch(exception e) { // Scrivo il messaggio di errore nel file di output e proseguo l'elaborazione f2.println(e.getmessage()); error = true; Pag. 15/20

16 // Se c'è un errore, non interrompiamo l'esecuzione, ma saltiamo la riga if (error) { error = false; // Fine ciclo while f1.close(); f2.close(); System.out.println("Fine"); // Fine metodo main // Fine classe CommandParserTest Il file commands.txt contiene le seguenti informazioni: M,ciao come stai? X,questa riga contiene un comando non valido M,questa riga va trasformata in maiuscolo m,questa RIGA va TRASFORMATA IN MINUSCOLO m,questa riga contiene troppi argomenti,1,2 V,Questa riga contiene 12 vocali V,Questa invece 9 vocali S,Troviamo una sottostringa a partire dal carattere 3 fino al carattere 20 escluso,3,20 S,Nuova sottostringa a partire dal carattere 10 fino al carattere 30 escluso,10,30 Il file results.txt contiene i seguenti dati: CIAO COME STAI? X: comando non previsto QUESTA RIGA VA TRASFORMATA IN MAIUSCOLO questa riga va trasformata in minuscolo Comando m: il numero degli argomenti è sbagliato 12 9 viamo una sottost ostringa a partire d Esempio conclusivo In questo lavoro finale, poniamo alcuni comandi previsti dal nostro protocollo in un file di testo. Ogni riga del file viene letta e inviata al server, il quale, essendo provvisto di un oggetto di tipo CommandParser provvede ad interpretare correttamente il comando, ad elaborarlo e a spedire immediatamente al client il risultato dell'elaborazione ottenuta. Il client riceve tale elaborazione e la memorizza in un file di output distinto (vedi fig. 3). Per semplicità di lettura, ci limitiamo ad usare un server unicast. /* * TCPServer.java package it.mauriziocozzetto.tcpclientserver.parser; import edu.princeton.cs.introcs.in; import edu.princeton.cs.introcs.out; import java.io.ioexception; import java.net.serversocket; import java.net.socket; Pag. 16/20

17 /** * maurizio public class TCPServer { public static void main(string[] args) throws IOException { // Crea un serversocket sulla porta 6789 ServerSocket serversocket = new ServerSocket(6789); while (true) { System.out.println("Server in ascolto sulla porta " + serversocket.getlocalport() + "..."); // Attesa di una richiesta di connessione da parte di un client Socket clientsocket = serversocket.accept(); // Stream di input proveniente dal client In in = new In(clientSocket); // Stream di output verso il client Out out = new Out(clientSocket); while (true) { // Legge i dati provenienti dal client String command = in.readline(); if (command == null) { System.out.println("Il client ha chiuso la connessione"); break; System.out.println("Stringa ricevuta: " + command); // Il server provvede a interpretare i comandi mediante l'oggetto parser CommandParser parser = new CommandParser(command,","); boolean error = false; try { // Il server valuta il comando e invia la stringa risultato al client String result = parser.evaluate(); out.println(result); catch(exception e) { // Se ci sono errori, viene inviato il tipo di errore out.println(e.getmessage()); error = true; // Si continua l'elaborazione con la riga successiva if (error) { error = false; // Fine while interno Pag. 17/20

18 // Chiusura del socket in.close(); out.close(); clientsocket.close(); // Fine while esterno // Fine metodo main // Fine classe TCPServer /* * TCPClient.java package it.mauriziocozzetto.tcpclientserver.parser; import edu.princeton.cs.introcs.in; import edu.princeton.cs.introcs.out; import java.io.ioexception; import java.net.socket; /** maurizio public class TCPClient { public static void main(string[] args) throws IOException { // Creazione di un socket sulla porta 6789 sulla macchina "localhost" Socket clientsocket = new Socket("localhost", 6789); // Stream proveniente dal server In in = new In(clientSocket); // Stream diretto verso il server Out out = new Out(clientSocket); // Preparazione dei due file (supponiamo che il file di input esista già sul disco) In f1 = new In("commands.txt"); Out f2 = new Out("results.txt"); // Finchè ci sono dati while(!f1.isempty()) { // Lettura di una riga dal file String command = f1.readline(); // Invio dei dati dati al server out.println(command); // Lettura del risultata proveniente dal server String result = in.readline(); // Stampa sulla console e scrittura sul disco System.out.println("Dal server: " + result); f2.println(result); // Fine ciclo while // Chiusura degli stream e del socket Pag. 18/20

19 in.close(); out.close(); f1.close(); f2.close(); clientsocket.close(); System.out.println("Fine"); // Fine metodo main // Fine classe TCPClient Output del client (il file di input e lo stesso dell'esempio precedente): Dal server: CIAO COME STAI? Dal server: X: comando non previsto Dal server: QUESTA RIGA VA TRASFORMATA IN MAIUSCOLO Dal server: questa riga va trasformata in minuscolo Dal server: Comando m: il numero degli argomenti è sbagliato Dal server: 12 Dal server: 9 Dal server: viamo una sottost Dal server: ostringa a partire d Fine BUILD SUCCESSFUL (total time: 0 seconds) Output del server: Server in ascolto sulla porta Stringa ricevuta: M,ciao come stai? Stringa ricevuta: X,questa riga contiene un comando non valido Stringa ricevuta: M,questa riga va trasformata in maiuscolo Stringa ricevuta: m,questa RIGA va TRASFORMATA IN MINUSCOLO Stringa ricevuta: m,questa riga contiene troppi argomenti,1,2 Stringa ricevuta: V,Questa riga contiene 12 vocali Stringa ricevuta: V,Questa invece 9 vocali Stringa ricevuta: S,Troviamo una sottostringa a partire dal carattere 3 fino al carattere 20 escluso,3,20 Stringa ricevuta: S,Nuova sottostringa a partire dal carattere 10 fino al carattere 30 escluso,10,30 Il client ha chiuso la connessione Server in ascolto sulla porta Bibliografia Meini-Formichi, Tecnologie e progettazione di sistemi informatici e di telecomunicazioni, Zanichelli, volume 3 Scorzoni, Informatica, Programmazione in Java, Loescher Camagni-Nikolassy, Tecnologie e progettazione di sistemi informatici e di telecomunicazioni, Hoepli, volume 3 Lorenzo Bettini, Programmazione distribuita in Java (pdf), Dipartimento Sistemi e Informatica, Università di Firenze, Ottobre 2005 Lorenzi-Facchetti-Rizzi, Il linguaggio Java (Nuova Edizione), Atlas Kurose-Ross, Computer Networking, A Top-Down Approach, 5 th edition, Pearson Pag. 19/20

20 Fig. 3 Interazione tra le varie componenti del sistema. Pag. 20/20

Applicazioni distribuite

Applicazioni distribuite Applicazioni distribuite Maurizio Cozzetto 1 agosto 2009 Un pò di teoria Ricordiamo che un'applicazione distribuita è un'applicazione composta da più programmi (almeno 2) posti in esecuzione su macchine

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la

Dettagli

Programmare con le Socket

Programmare con le Socket Programmare con le Socket Corso Reti ed Applicazioni Lab Sockets pag. 1 Programmare con le Socket TCP Il Client deve contattare il server - Il processo server deve già essere attivo - Il server deve aver

Dettagli

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

Programmare con le Socket TCP in java. 2: Application Layer 1 Programmare con le Socket TCP in java 2: Application Layer 1 Il Client contatta il server Il Server: Il processo server è sempre attivo in attesa di connessioni (demone) Crea una socket per accettare la

Dettagli

Programmare con le Socket TCP

Programmare con le Socket TCP Programmare con le Socket TCP Il Client deve contattare il server Il processo server deve già essere attivo Il server deve aver creato una socket che accetta la connessione del client ( socket di benvenuto

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura

Dettagli

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

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

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete 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

Dettagli

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

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta

Dettagli

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

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Laboratorio di Sistemi Applicazioni distribuite Java

Laboratorio di Sistemi Applicazioni distribuite Java Un po' di teoria Ricordiamo che un'applicazione distribuita è un'applicazione composta da più programmi (almeno 2) posti in esecuzione su macchine diverse all'interno di una rete di calcolatori e che utilizzano

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

Socket & RMI Ingegneria del Software - San Pietro

Socket & RMI Ingegneria del Software - San Pietro Socket & RMI Ingegneria del Software - San Pietro Socket È possibile trattare la comunicazione di rete allo stesso modo con cui è possibile trattare la lettura da file. La classe Socket rappresenta la

Dettagli

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI Confronto tra ISO-OSI e TCP/IP, con approfondimento di quest ultimo e del livello di trasporto in cui agiscono i SOCKET. TCP/IP

Dettagli

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

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

appunti delle lezioni Architetture client/server: applicazioni server

appunti delle lezioni Architetture client/server: applicazioni server Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante

Dettagli

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

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

Dettagli

Reti di Calcolatori:

Reti di Calcolatori: Reti di Calcolatori: Internet, Intranet e Mobile Computing a.a. 2007/2008 http://www.di.uniba.it/~lisi/courses/reti/reti0708.htm dott.ssa Francesca A. Lisi lisi@di.uniba.it Orario di ricevimento: mercoledì

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Corsi di Reti di Calcolatori (Docente Luca Becchetti) NOT : le soluzioni proposte sono volutamente sintetiche. Lo studente dovrebbe fare uno sforzo per risolvere i quesiti in modo autonomo, espandendo

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

appunti delle lezioni Architetture client/server: applicazioni client

appunti delle lezioni Architetture client/server: applicazioni client Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un esempio particolarmente

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Corso di Reti di Calcolatori T

Corso di Reti di Calcolatori T Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 2 (proposta) Socket Java con connessione Luca Foschini Anno accademico 2015/2016 Esercitazione 2 1 Specifica

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Programmazione dei socket con TCP #2

Programmazione dei socket con TCP #2 I Il Server e il Client si scambiano messaggi attraverso la rete mediante un dell API (Application Programming Interface) Telematica II 10. Esercitazione/Laboratorio 3 Server ports Clients user space Socket

Dettagli

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

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31

Dettagli

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

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

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

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing a.a. 2002/03 Livello di Trasporto UDP Descrive la comunicazione tra due dispositivi Fornisce un meccanismo per il trasferimento di dati tra sistemi terminali (end user) Prof. Vincenzo Auletta auletta@dia.unisa.it

Dettagli

Laboratorio di Informatica Lezione 4

Laboratorio di Informatica Lezione 4 Laboratorio di Informatica Lezione 4 Cristian Consonni 28 ottobre 2015 Cristian Consonni Laboratorio di Informatica, Lezione 4 1 / 42 Outline 1 Canali standard 2 Input da tastiera 3 Output 4 Esercizi (parte

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

Transmission Control Protocol

Transmission Control Protocol Transmission Control Protocol Franco Callegati Franco Callegati IC3N 2000 N. 1 Transmission Control Protocol - RFC 793 Protocollo di tipo connection-oriented Ha lo scopo di realizzare una comunicazione

Dettagli

Esercizio 2. Client e server comunicano attraverso socket TCP

Esercizio 2. Client e server comunicano attraverso socket TCP Esercizio 1 Scrivere una applicazione client/server in cui: Il client, in un ciclo infinito: Legge una stringa da standard input Invia al processo server la stringa. Il server visualizza: L'IP da cui si

Dettagli

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

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi Connessioni di rete Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi 1 Socket orientato alla connessione o non orientato alla connessione 2 Socket in astratto 3 Socket modalità

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale

Dettagli

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

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/2014. 1.1 Lato client RETI INFORMATICHE - SPECIFICHE DI PROGETTO A.A. 2013/2014 1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/2014 Il progetto consiste nello sviluppo di un

Dettagli

Reti di Calcolatori. Il software

Reti di Calcolatori. Il software Reti di Calcolatori Il software Lo Stack Protocollare Application: supporta le applicazioni che usano la rete; Transport: trasferimento dati tra host; Network: instradamento (routing) di datagram dalla

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

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

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

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

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2010/2011 Il progetto consiste nello sviluppo di un applicazione client/server. Sia il server che il client dovranno

Dettagli

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

Dettagli

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

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione Esercitazione: Socket Java con connessione Sviluppare un applicazione C/S che effettui il trasferimento di un file dal client al server (put) usando una connessione. In particolare nel servizio: il client

Dettagli

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

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento I protocolli del livello di applicazione Porte Nelle reti di calcolatori, le porte (traduzione impropria del termine port inglese, che in realtà significa porto) sono lo strumento utilizzato per permettere

Dettagli

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Datagrammi. NOTA: MulticastSocket estende DatagramSocket Datagrammi Le applicazioni che comunicano tramite socket possiedono un canale di comunicazione dedicato. Per comunicare, un client ed un server stabiliscono una connessione, trasmettono dati, quindi chiudono

Dettagli

Reti di Telecomunicazione Lezione 8

Reti di Telecomunicazione Lezione 8 Reti di Telecomunicazione Lezione 8 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Livello di trasporto Programma della lezione relazione tra lo strato di trasporto e lo strato

Dettagli

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

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete IP Analizziamo con sufficiente dettaglio il sistema denominato IP, usato per consentire a due computer mobili di spostarsi liberamente in altre reti pur mantenendo lo stesso indirizzo IP. In particolare,

Dettagli

Tale attività non è descritta in questa dispensa

Tale attività non è descritta in questa dispensa Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa

Dettagli

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

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione I semestre 04/05 Comunicazione tra Computer Protocolli Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica 1

Dettagli

Lo scenario: la definizione di Internet

Lo scenario: la definizione di Internet 1 Lo scenario: la definizione di Internet INTERNET E UN INSIEME DI RETI DI COMPUTER INTERCONNESSE TRA LORO SIA FISICAMENTE (LINEE DI COMUNICAZIONE) SIA LOGICAMENTE (PROTOCOLLI DI COMUNICAZIONE SPECIALIZZATI)

Dettagli

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

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete 1. Si consideri un protocollo per il trasporto non affidabile di dati realtime. Il sender spedisce un pacchetto

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

Corso di Reti di Calcolatori. Datagrammi

Corso di Reti di Calcolatori. Datagrammi Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

Database e reti. Piero Gallo Pasquale Sirsi

Database e reti. Piero Gallo Pasquale Sirsi Database e reti Piero Gallo Pasquale Sirsi Approcci per l interfacciamento Il nostro obiettivo è, ora, quello di individuare i possibili approcci per integrare una base di dati gestita da un in un ambiente

Dettagli

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

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

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

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

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

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

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine. ESERCIZIARIO Risposte ai quesiti: 2.1 Non sono necessarie modifiche. Il nuovo protocollo utilizzerà i servizi forniti da uno dei protocolli di livello trasporto. 2.2 Il server deve essere sempre in esecuzione

Dettagli

P2-11: BOOTP e DHCP (Capitolo 23)

P2-11: BOOTP e DHCP (Capitolo 23) Autunno 2002 Prof. Roberto De Prisco -11: BOOTP e DHCP (Capitolo 23) Università degli studi di Salerno Laurea e Diploma in Informatica Indirizzi IP dinamici 11.2 Un indirizzo IP statico è assegnato ad

Dettagli

Reti di Telecomunicazione Lezione 6

Reti di Telecomunicazione Lezione 6 Reti di Telecomunicazione Lezione 6 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Lo strato di applicazione protocolli Programma della lezione Applicazioni di rete client - server

Dettagli

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

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00 Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00 NB: alcune domande hanno risposta multipla: si richiede di identificare TUTTE le risposte corrette. Cognome: Nome:

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Appunti di Informatica www.mimmocorrado.it 1

Appunti di Informatica www.mimmocorrado.it 1 Installare Java Il programma può essere scaricato dal seguente indirizzo: http://www.java.com/it/download/windows_ie.jsp?locale=it&host=www.java.com Per installare la JDK è necessario: 1. scaricare il

Dettagli

Manuale per la configurazione di AziendaSoft in rete

Manuale per la configurazione di AziendaSoft in rete Manuale per la configurazione di AziendaSoft in rete Data del manuale: 7/5/2013 Aggiornamento del manuale: 2.0 del 10/2/2014 Immagini tratte da Windows 7 Versione di AziendaSoft 7 Sommario 1. Premessa...

Dettagli

Let's start! File > New Project > Ruby > Ruby on Rails Application (events)

Let's start! File > New Project > Ruby > Ruby on Rails Application (events) La nuova versione di Netbeans 6 consente di lavorare con Ruby On Rails, un potente e nuovissimo framework per lo sviluppo e la prototipazione di applicazioni web, che fa uso del design-pattern MVC (Model-View-Controller,

Dettagli

12.5 UDP (User Datagram Protocol)

12.5 UDP (User Datagram Protocol) CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP 88 12.5 UDP (User Datagram Protocol) L UDP (User Datagram Protocol) é uno dei due protocolli del livello di trasporto. Come l IP, é un protocollo inaffidabile, che

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

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:

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: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Altri tipi di connessione

Altri tipi di connessione Altri tipi di connessione Francesca Martelli f.martel@di.unipi.it Socket Un socket è una connessione a una porta su un computer remoto, che è usata per scambiare informazioni con comandi HTTP Supponiamo

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA1 1.3 - Le strutture di controllo 1 Prerequisiti Istruzioni semplici Strutture di controllo Scittura di semplici applicazioni Java 2 1 Introduzione In molti casi le

Dettagli

Dal protocollo IP ai livelli superiori

Dal protocollo IP ai livelli superiori Dal protocollo IP ai livelli superiori Prof. Enrico Terrone A. S: 2008/09 Protocollo IP Abbiamo visto che il protocollo IP opera al livello di rete definendo indirizzi a 32 bit detti indirizzi IP che permettono

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

LABORATORIO DI INFORMATICA 1 2014-2015. - parte 6 -

LABORATORIO DI INFORMATICA 1 2014-2015. - parte 6 - LABORATORIO DI INFORMATICA 1 2014-2015 - parte 6 - Lettura da File Obiettivo: leggere un file Per prima cosa dobbiamo creare un oggetto che rappresenti il file che vogliamo utilizzare (inserendo anche

Dettagli

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

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dell ambiente di sviluppo, compilazione ed esecuzione 1 Introduzione Java è un linguaggio

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Oreste Signore, <oreste@w3.org> Responsabile Ufficio Italiano W3C Area della Ricerca CNR - via Moruzzi, 1-56124 Pisa

Oreste Signore, <oreste@w3.org> Responsabile Ufficio Italiano W3C Area della Ricerca CNR - via Moruzzi, 1-56124 Pisa http://www.w3c.it/education/2012/upra/basicinternet/#(1) 1 of 16 Oreste Signore, Responsabile Ufficio Italiano W3C Area della Ricerca CNR - via Moruzzi, 1-56124 Pisa Master in Comunicazione

Dettagli

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Applicazioni web. Parte 10 Socket. Alberto Ferrari Applicazioni web Parte 10 Socket Protocolli I computer collegati ad Internet comunicano tra loro usando il Transmission Control Protocol (TCP) o lo User Datagram Protocol (UDP) Quando si scrivono programmi

Dettagli

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

Dettagli

Programmazione Server Side e Database in rete

Programmazione Server Side e Database in rete Programmazione Server Side e Database in rete Prof. Massimo PALOMBO -IIS A. MEUCCI Casarano La programmazione Stand-Alone consente di costruire applicazioni, più o meno complesse, ma utilizzabili esclusivamente

Dettagli

Cifratura simmetrica

Cifratura simmetrica Cifratura Cifratura simmetrica Alice canale insicuro Bob 2 Cifratura simmetrica m Algoritmo di decifratura m Alice canale insicuro Algoritmo di cifratura Bob 3 Cifrari simmetrici chiave privata k chiave

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet Indirizzi Internet e Protocolli I livelli di trasporto delle informazioni Comunicazione e naming in Internet Tre nuovi standard Sistema di indirizzamento delle risorse (URL) Linguaggio HTML Protocollo

Dettagli

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

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

Dettagli

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Principi, Modelli e Applicazioni per Sistemi Distribuiti M Università degli Studi di Bologna Facoltà di Ingegneria Principi, Modelli e Applicazioni per Sistemi Distribuiti M Esercitazione 2 (svolta) Socket Java con connessione Alessandro Pernafini Architettura

Dettagli

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

Dettagli

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

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Http con java, URL Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie

Dettagli

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++ ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è

Dettagli

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4) Architettura del WWW World Wide Web Sintesi dei livelli di rete Livelli di trasporto e inferiori (Livelli 1-4) - Connessione fisica - Trasmissione dei pacchetti ( IP ) - Affidabilità della comunicazione

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

Standard di comunicazione

Standard di comunicazione Standard di comunicazione Organizzato a livelli per ridurne la complessità e aumentarne la flessibilità il numero dei livelli e le loro funzionalità dipendono dal tipo di rete ogni livello formalizza un

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

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

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Telematica II 12. Esercitazione/Laboratorio 4

Telematica II 12. Esercitazione/Laboratorio 4 Server UDP in JAVA Telematica II 12. Esercitazione/Laboratorio 4 DayTime daemon UDP Port 13 obiettivo realizzazione di un servizio per l invio della data/orario del server al client utilizzo di un datagram

Dettagli