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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

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

(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

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

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

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

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

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

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

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

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

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

(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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DNS: Domain Name System

DNS: Domain Name System DNS: Domain Name System Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP (32 bit) - usato per instradare i pacchetti nome, per es., mario.lit.unicas.it - usati

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

Gestione delle Eccezioni

Gestione delle Eccezioni Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un

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

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Sviluppo Web Autore: Alessio Bernardo Revisione: 1 Data: 23/05/13 Titolo: Sviluppo piattaforma e-learning e sviluppo siti web File: Documentazione tecnica Sito:

Dettagli

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

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo. In una rete di ampie dimensioni, ciascuna sottorete (es. LAN, WAN) è connessa ad altre sottoreti tramite router. Internet è un insieme di reti connesse tra loro. Essenzialmente, in una rete alcune macchine

Dettagli

DNS: Domain Name System

DNS: Domain Name System DNS: Domain Name System Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP (32 bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

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

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute DNS: Domain Name System I name DNS Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP ( bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

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

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

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

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

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

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

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

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

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

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

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

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

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint parseint parseint showinputdialog JOptionPanenull null throw BankAccount IllegalArgumentException amount public class BankAccount { public void withdraw(double amount) { if (balance < amount) { // Parametro

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

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

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

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA A.A. 2007/08 Tutor: Barbara Pettazzoni barbara.pettazzoni@studio.unibo.it Java: Compilazione e Traduzione Editing, compilazione, esecuzione

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

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

Scrivere un programma in Java

Scrivere un programma in Java Programmare in JAVA Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA uff. 0577 234850 - interno: 7102 Stanza 119 rigutini@dii.unisi.it http://www.dii.unisi.it/~rigutini/

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A 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 = 1; public

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

Jav@Lab Il linguaggio Java I file sequenziali

Jav@Lab Il linguaggio Java I file sequenziali Jav@Lab Il linguaggio Java I file sequenziali Input e Output Secondo i canoni dei linguaggi di programmazione "procedurali" il concetto di input e output è strettamente legato al tipo di dispositivo esterno

Dettagli

Unità B3 Strutture di controllo

Unità B3 Strutture di controllo (A) CONOSCENZA TERMINOLOGICA Dare una breve descrizione dei termini introdotti: I/O su console Package Blocco di controllo Oggetto System.out Oggetto System.in Oggetto Tastiera Metodo readline() Strutture

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

Programmazione distribuita in Java. Socket & Client-Server

Programmazione distribuita in Java. Socket & Client-Server Programmazione distribuita in Java Socket & Client-Server 1 Strumenti per networking Libreria java.net Socket (Astrazione per una presa di comunicazione) Serializzazione Socket Per comunicare si apre una

Dettagli

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144 Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe

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

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

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

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008 Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 6 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti

Dettagli

Sockets in Java. Lorenzo Gallucci

Sockets in Java. Lorenzo Gallucci Sockets in Java Lorenzo Gallucci Sockets La libreria Java dispone di un API per la gestione dell I/O di rete Il package di riferimento è java.net Vari compiti: Gestione dell I/O su socket (sia TCP che

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

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

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50 Guida all uso dell ambiente di sviluppo 1 integrato o IDE JCreator LE 4.50 Inizializzazione: creazione del nuovo progetto e del file sorgente in ambiente JCreator Al lancio del programma si apre la finestra

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

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

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

Fondamenti di Internet e Reti. Antonio Capone, Matteo Cesana, Ilario Filippini, Guido Maier

Fondamenti di Internet e Reti. Antonio Capone, Matteo Cesana, Ilario Filippini, Guido Maier Fondamenti di Internet e Reti Antonio Capone, Matteo Cesana, Ilario Filippini, Guido Maier Fondamenti di Internet e Reti Programmazione Socket Antonio Capone, Matteo Cesana, Ilario Filippini, Guido Maier

Dettagli

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

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2) Gestione di errori e situazioni eccezionali Gestione delle eccezioni Una procedura (utente o di libreria) deve poter segnalare l impossibilità di produrre un risultato significativo o la propria terminazione

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

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

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Le Reti di Calcolatori (parte 2) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela

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

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

Flussi, lettori e scrittori

Flussi, lettori e scrittori Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,

Dettagli

Introduzione. Java. G. Prencipe prencipe@di.unipi.it. accesso alla rete -- TCP

Introduzione. Java. G. Prencipe prencipe@di.unipi.it. accesso alla rete -- TCP Java accesso alla rete -- TCP G. Prencipe prencipe@di.unipi.it Introduzione Storicamente, programmare su un sistema di macchine distribuite è sempre stato complesso Il programmatore doveva conoscere diversi

Dettagli

Capitolo 2: Livello di applicazione

Capitolo 2: Livello di applicazione Programmazione delle socket in Java Nota per l utilizzo: Abbiamo preparato queste slide con l intenzione di renderle disponibili a tutti (professori, studenti, lettori). Sono in formato PowerPoint in modo

Dettagli

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124 UnicastRemoteObject Java RMI fornisce diverse classi base per definire server remoti: UnicastRemoteObject < RemoteServer < RemoteObject dove A < B significa che A è una sottoclasse di B. UnicastRemotObject

Dettagli

Introduzione all elaborazione di database nel Web

Introduzione all elaborazione di database nel Web Introduzione all elaborazione di database nel Web Prof.ssa M. Cesa 1 Concetti base del Web Il Web è formato da computer nella rete Internet connessi fra loro in una modalità particolare che consente un

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html

Dettagli

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD La prima applicazione Java con NetBeans IDE Dott. Ing. M. Banci, PhD Creare la prima applicazione 1. Creare un progetto: Quando si crea un progetto IDE occorre creare un ambiente nel quale costruire e

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

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; } Java è un linguaggio di programmazione c indipendente dalla piattaforma, ovvero un linguaggio di programmazione che permette di compilare i programmi una volta sola e di installarli su computer che usano

Dettagli

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet:

Servlet e JDBC. Servlet e Web Server. Servlet e Web Server. Servlet e Web Server. Richieste. Servlet. Servlet: e JDBC Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino e : estensioni del Java API permettono di scrivere

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Le Reti di Calcolatori (parte 2) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela

Dettagli

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Sviluppato da Santoro Carlo Maurizio Matricola:0108/528 Sviluppo terminato il: 18/06/06 TRACCIA DEL PROGETTO Si costruisca, utilizzando la

Dettagli