SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
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.
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.
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.
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
403/05/2013
Quest' opera è distribuita con
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
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
503/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();
}
}
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.
I socket
Paolo Tosato Java per elettronici ed elettrotecnici
703/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)
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.
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
903/05/2013
Quest' opera è distribuita con
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
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.
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
1103/05/2013
Quest' opera è distribuita con
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
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();
}
}
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 ***
Esempi: cominciamo a chattare
Paolo Tosato Java per elettronici ed elettrotecnici
1403/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();
}
}

Weitere ähnliche Inhalte

Andere mochten auch

Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio JavaPaolo Tosato
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...Dissertation | Investigative acceptance of affordable robotic kits in the uk ...
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...Mukesh Kulal
 
Educational Robotics and Social Inclusion
Educational Robotics and Social InclusionEducational Robotics and Social Inclusion
Educational Robotics and Social InclusionPaolo Tosato
 
Esperienze di robotica creativa - Rospino
Esperienze di robotica creativa - RospinoEsperienze di robotica creativa - Rospino
Esperienze di robotica creativa - RospinoPaolo Tosato
 

Andere mochten auch (8)

Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...Dissertation | Investigative acceptance of affordable robotic kits in the uk ...
Dissertation | Investigative acceptance of affordable robotic kits in the uk ...
 
Educational Robotics and Social Inclusion
Educational Robotics and Social InclusionEducational Robotics and Social Inclusion
Educational Robotics and Social Inclusion
 
Esperienze di robotica creativa - Rospino
Esperienze di robotica creativa - RospinoEsperienze di robotica creativa - Rospino
Esperienze di robotica creativa - Rospino
 

Ähnlich wie Introduzione al linguaggio Java

Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio JavaPaolo Tosato
 
Terracotta JUG Milano
Terracotta JUG MilanoTerracotta JUG Milano
Terracotta JUG MilanoGuido Anselmi
 
Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)fgianneschi
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mockyuroller
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLAndrea Della Corte
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.jsnetmeansnet
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013Matteo Valoriani
 

Ähnlich wie Introduzione al linguaggio Java (20)

Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
 
Terracotta JUG Milano
Terracotta JUG MilanoTerracotta JUG Milano
Terracotta JUG Milano
 
Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Concurrency
ConcurrencyConcurrency
Concurrency
 
Multithread Programming
Multithread ProgrammingMultithread Programming
Multithread Programming
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 
Corso Java
Corso JavaCorso Java
Corso Java
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
 

Kürzlich hochgeladen

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 

Kürzlich hochgeladen (8)

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 

Introduzione al linguaggio Java

  • 1. 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.
  • 2. 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.
  • 3. 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.
  • 4. 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 403/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
  • 5. 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 503/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(); } }
  • 6. 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.
  • 7. I socket Paolo Tosato Java per elettronici ed elettrotecnici 703/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)
  • 8. 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.
  • 9. 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 903/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
  • 10. 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.
  • 11. 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 1103/05/2013 Quest' opera è distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
  • 12. 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(); } }
  • 13. 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 ***
  • 14. Esempi: cominciamo a chattare Paolo Tosato Java per elettronici ed elettrotecnici 1403/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(); } }