introduzione al linguaggio java

14
Java per elettronici ed elettrotecnici Terza lezione: applicazioni di rete ITIS Max Planck di Lancenigo di Villorba A.S. 2012-2013 Prof. PAOLO TOSATO Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported .

Upload: paolo-tosato

Post on 06-Dec-2014

499 views

Category:

Education


2 download

DESCRIPTION

Applicazioni di rete: terza lezione del corso "Java per elettronici ed elettrotecnici"

TRANSCRIPT

Page 2: Introduzione al linguaggio Java

2

Indice Paolo Tosato Java per elettronici ed elettrotecnici

03/05/2013

• I thread

• I socket

• Esempi: cominciamo a chattare

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 3: Introduzione al linguaggio Java

3

Stati di un thread • New: quando viene creato • Runnable: quando si chiama start(),

ma non è necessariamente in esecuzione, può ricevere la CPU

• Not runnable: non può avere CPU • Dead: termine

I thread In Java

• esecuzione concorrente di codice di oggetti della stessa classe o di classi diverse • istanza della classe Thread

Un thread è creato implicitamente quando diamo il comando java <nome file>

public static void main(String[] args) { Thread t = Thread.currentThread(); System.out.println("Nome: " + t.getName()); System.out.println("Priorità: " + t.getPriority()); // da 1 (Thread.MIN_PRIORITY) a 10 (Thread.MAX_PRIORITY) }

03/05/2013

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 4: Introduzione al linguaggio Java

I thread Java offre delle primitive per il multithreading, primitive non presenti in C/C++

• Thread.sleep(millisecondi): sospende il thread per un certo numero di millisecondi

• t.yield(): pone il thread t nella lista dei thread “runnable” e da la possibilità a un thread della stessa priorità di essere eseguito

• t.isAlive(): true se t non è nello stato dead

• t.join(): aspetta la fine del thread t prima di continuare

• t.start(): avvia l’esecuzione del thread t // metodo ASINCRONO

• t.stop(): termina il thread t // metodo DEPRECATED

Paolo Tosato Java per elettronici ed elettrotecnici

4 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 5: Introduzione al linguaggio Java

I thread public class PingPong extends Thread { String parola; boolean stop = false; public PingPong (String parola) { this.parola = parola; } public void run() { while (!stop) { System.out.println(parola); } } public void ferma() { stop = true; } }

Paolo Tosato Java per elettronici ed elettrotecnici

5 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

public class ProvaThread { public static void main(String args[]) { final int ATTESA = 5000; PingPong ping = new PingPong(“Ping”); PingPong pong = new PingPong(“Pong”); ping.start(); pong.start(); try { Thread.sleep(ATTESA); } catch (InterruptedException e) { e.printStackTrace(); } ping.ferma(); pong.ferma(); } }

Page 6: Introduzione al linguaggio Java

6

Si chiamano applicazioni distribuite le applicazioni la cui esecuzione è distribuita tra più computer; parti dell’applicazione si trovano su computer diversi e lavorano assieme.

I socket

03/05/2013

In Java

• Applicazioni client/server: i socket

• RMI (Remote Method Invocation): richiamare metodi di un oggetto remoto • presenza di un registro remoto: rmiregistry • utilizzano di default i socket TCP

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 7: Introduzione al linguaggio Java

I socket Paolo Tosato Java per elettronici ed elettrotecnici

7 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Socket • identifica un computer e un processo sul computer • è formato da un indirizzo IP che identifica un computer sulla rete e da un numero di

porta che identifica un processo o un’applicazione sul computer (da 0 a 65.535 – i primi 1024 numeri sono Well Known Port Number)

In un’applicazione client/server • il server apre un socket e resta in attesa di connessioni (apertura passiva) • il client chiama il socket del server per iniziare la connessione (apertura attiva)

Page 8: Introduzione al linguaggio Java

8

*** IL SERVER *** import java.io.*; import java.net.*; public class Server { private ServerSocket server; private Socket connessione; private BufferedReader dalClient; private PrintStream alClient; // Scrive bytes mentre PrintWriter scrive caratteri public Server() { // costruttore try { // port (20000): se = 0 sceglie la prima porta libera // backlog (5): lunghezza massima della coda delle richieste di connessione server = new ServerSocket(20000, 5); // DatagramSocket per connessioni UDP System.out.println("Server attivo"); connessione = server.accept(); dalClient = new BufferedReader(new InputStreamReader(connessione.getInputStream())); alClient = new PrintStream(connessione.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } }

Esempi: cominciamo a chattare

03/05/2013

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 9: Introduzione al linguaggio Java

public void conversazione() { String messaggio = ""; BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in)); try { alClient.println("Salve"); while(!messaggio.equals("fine")) { messaggio = dalClient.readLine(); System.out.println(messaggio); if (!messaggio.equals("fine")) { messaggio = tastiera.readLine(); alClient.println(messaggio); } } connessione.close(); } catch(IOException e) { e.printStackTrace(); } } }

Esempi: cominciamo a chattare Paolo Tosato Java per elettronici ed elettrotecnici

9 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 10: Introduzione al linguaggio Java

10

*** IL CLIENT *** import java.io.*; import java.net.*; public class Client { private Socket connessione; private BufferedReader dalServer; private PrintStream alServer; // Scrive bytes mentre PrintWriter scrive caratteri public Client() { BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("Inserire l'indirizzo del server"); String indirizzo = tastiera.readLine(); connessione = new Socket(indirizzo, 20000); dalServer = new BufferedReader(new InputStreamReader(connessione.getInputStream())); alServer = new PrintStream(connessione.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } }

Esempi: cominciamo a chattare

03/05/2013

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 11: Introduzione al linguaggio Java

public void conversazione() { String messaggio = ""; BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in)); try { while(!messaggio.equals("fine")) { messaggio = dalServer.readLine(); System.out.println(messaggio); if (!messaggio.equals("fine")) { messaggio = tastiera.readLine(); alServer.println(messaggio); } } connessione.close(); } catch(IOException e) { e.printStackTrace(); } } }

Esempi: cominciamo a chattare Paolo Tosato Java per elettronici ed elettrotecnici

11 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

Page 12: Introduzione al linguaggio Java

12

*** MAIN DEL SERVER *** public class ProvaServer { public static void main(String[] args) { Server server = new Server(); server.conversazione(); } }

Esempi: cominciamo a chattare

03/05/2013

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

*** MAIN DEL CLIENT *** public class ProvaClient { public static void main(String[] args) { Client client = new Client(); client.conversazione(); } }

Page 13: Introduzione al linguaggio Java

13

import java.io.*; import java.net.*; public class Server extends Thread { private ServerSocket server; public Server() { try { server = new ServerSocket(20000, 5); System.out.println("Server attivo"); this.start(); } catch (IOException e) { e.printStackTrace(); } }

Esempi: cominciamo a chattare

03/05/2013

Paolo Tosato Java per elettronici ed elettrotecnici

Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

public void run() { try { while (true) { Socket richiestaClient = server.accept(); /* Quando un client cerca di connettersi, il server genera un thread per gestire quel client */ new Connessione(richiestaClient); } } catch (IOException e) { e.printStackTrace(); } } }

*** SERVER multithreading per gestire più client contemporaneamente ***

Page 14: Introduzione al linguaggio Java

Esempi: cominciamo a chattare Paolo Tosato Java per elettronici ed elettrotecnici

14 03/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.

import java.io.*; import java.net.*; public class Connessione extends Thread { private Socket connessione; private BufferedReader dalClient; private PrintStream alClient; public Connessione(Socket richiestaClient) { try { connessione = richiestaClient; dalClient = new BufferedReader( new InputStreamReader( connessione.getInputStream())); alClient = new PrintStream( connessione.getOutputStream()); this.start(); } catch (IOException e) { e.printStackTrace(); } }

public void run() { try { String messaggio = ""; alClient.println("Salve"); while (!messaggio.equals("fine")) { messaggio = dalClient.readLine(); alClient.println(messaggio); } connessione.close(); } catch (IOException e) { e.printStackTrace(); } } }

public class ProvaServer { public static void main(String[] args) { // il server va chiuso manualmente, // per esempio Ctrl-C Server server = new Server(); } }