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 (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

Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
lukebonham
 

Ä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

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 

Kürzlich hochgeladen (19)

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 

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(); } }