SlideShare a Scribd company logo
1 of 24
Lezione 3: Connessioni
             TCP
       Corso di Programmazione in Rete
      Laurea Magistrale in Ing. Informatica
        Università degli Studi di Salerno



1
Outline
    ✦ Introduzione

    ✦ Connessioni TCP lato client: la classe
      Socket

    ✦ Connessioni TCP lato server: la classe
      ServerSocket

    ✦ Struttura di un server multi-threaded

2
Introduzione


    ✦ I protocolli di livello 4 (transport) più
      usati su internet:
     •   TCP: connection oriented
     •   UDP: datagram oriented




3
Socket
    ✦ Le API per i protocolli TCP e UDP usano il
      concetto di “socket” (“presa”) per
      specificare i due estremi del canale di
      comunicazione
    ✦ I socket attivi su una macchina per un
      determinato protocollo sono identificati
      attraverso un numero a 16 bit (port
      number)
     •   le applicazioni più comuni hanno un “well-known”
         port number usato per default
     •   nei sistemi Unix-like i numeri 0-1023 richiedono i
         privilegi di amministratore del sistema
4
Socket TCP
    ✦ Per il protocollo TCP (connection oriented)
      i due socket che devono comunicare
      devono essere connessi
     •   Una delle due parti inizia la connessione (client)
     •   L’altra parte deve essere in attesa di una richiesta
         di connessione (server); quando arriva una
         richiesta di connessione, il server deve accettare
         la richiesta per stabilire il collegamento
    ✦ L’instaurazione della connessione è
      un’operazione relativamente costosa in
      termini di tempo
5
Socket TCP in Java


    ✦ Le classi principali sono nel package
      java.net
    ✦ La classe che rappresenta un socket TCP
      dal punto di vista del client è Socket




6
Creazione di un Socket
    ✦ Costruttore:
     •   Socket(String hostAddress, int port)
    ✦ i parametri specificano l’indirizzo del
      socket a cui il socket creato si deve
      connettere
     •   hostAddress può essere l’indirizzo IP in forma
         “dotted” (es. “193.205.164.3”) o l’indirizzo
         simbolico (es. “www.unisa.it”)
    ✦ il costruttore solleva una IOException in
      caso di problemi

7
Uso di un client socket
    ✦ I seguenti metodi consentono di ottenere
      input/output stream associati al socket:
     •   InputStream getInputStream()
     •   OutputStream getOutputStream()
    ✦ Usando questi stream in congiunzione
      con le altre classi di I/O è possibile
      inviare/ricevere dati attraverso la
      connessione TCP
    ✦ Al termine dell’uso il socket deve essere
      chiuso col metodo close

8
Esempio


    ✦ Vogliamo realizzare un programma che
      apra una connessione TCP con un server,
      invii una stringa e legga una stringa di
      risposta dal server




9
Esempio
     ✦ Innanzitutto, creiamo il socket:

      import java.io.*;
      import java.net.*;

      public class EchoClient {
      	 public static final int PORT=7777;
      	
      	 public static void main(String args[]) throws IOException {
      	 	 Socket sock=new Socket(args[0], PORT);




10
Esempio
     ✦ Quindi inviamo la stringa, usando un
       PrintWriter:

     	   	   OutputStream os=sock.getOutputStream();
     	   	   Writer wr=new OutputStreamWriter(os, "UTF-8");
     	   	   PrintWriter prw=new PrintWriter(wr);
     	   	   prw.println("Hello, world");
     	   	   prw.flush();




         Nota: il metodo flush() forza l’invio di
         eventuali buffer in memoria


11
Esempio
     ✦ Infine, leggiamo la risposta dal server
       usando un BufferedReader:
      	   	   InputStream is=sock.getInputStream();
      	   	   Reader rd=new InputStreamReader(is, "UTF-8");
      	   	   BufferedReader brd=new BufferedReader(rd);
      	   	   String answer=brd.readLine();
      	   	   System.out.println(answer);
      	   	
      	   	   sock.close();
      	   }
      }




12
Socket lato server
     ✦ La creazione di socket TCP dal lato del
       server si effettua attraverso la classe
       ServerSocket
     ✦ Un ServerSocket rappresenta una
       “fabbrica” (“factory”) di socket: al
       momento in cui viene accettata una
       richiesta di connessione da un client, il
       ServerSocket crea un Socket attraverso il
       quale avviene la comunicazione

13
Creazione di ServerSocket

     ✦ Costruttore:
      •   ServerSocket(int port)
     ✦ Il ServerSocket è in attesa di richieste sul
       port specificato
     ✦ Anche le operazioni su ServerSocket
       possono lanciare IOException



14
Attesa di una connessione

     ✦ Il ServerSocket si mette in attesa della
       prossima richiesta e la accetta
       instaurando una connessione con il
       metodo:
      •   Socket accept();
     ✦ Il Socket restituito è utilizzabile per
       comunicare con il client



15
Esempio


     ✦ Per completare l’esempio precedente,
       realizziamo un server che accetti una
       connessione, legga una stringa attraverso
       il socket e invii alla connessione due volte
       la stessa stringa




16
Esempio
     ✦ Creiamo il ServerSocket e accettiamo la
       connessione:
     import java.io.*;
     import java.net.*;

     public class EchoServer {
     	 public static final int PORT=7777;
     	
     	 public static void main(String args[]) throws IOException {
     	 	 ServerSocket serv=new ServerSocket(PORT);
     	 	 Socket sock=serv.accept();




17
Esempio
     ✦ Leggiamo una stringa:



     	   	   BufferedReader brd=new BufferedReader(
     	   	   	 	 new InputStreamReader(
     	   	   	 	 	 	 sock.getInputStream(), "UTF-8"));
     	   	   String s=brd.readLine();




18
Esempio
     ✦ Inviamo la risposta:
     	   	   PrintWriter prw=new PrintWriter(
     	   	   	 	 new OutputStreamWriter(
     	   	   	 	 	 	 sock.getOutputStream(), "UTF-8"));
     	   	   prw.print(s);
     	   	   prw.println(s);
     	   	   prw.flush();
     	   	   sock.close();
     	   }
     }




19
Server multi-threaded

     ✦ Di solito un server deve servire più di una
       singola richiesta
     ✦ Il modo più semplice è creare un thread
       per ogni nuova richiesta di connessione
      •   il thread principale esegue accept() in un ciclo
      •   i thread creati per ogni richiesta gestiscono la
          comunicazione con il client




20
Esempio



     ✦ Modifichiamo il server precedente in
       modo da poter servire più richieste




21
Esempio
     ✦ Per cominciare, definiamo la classe:
     import java.io.*;
     import java.net.*;

     public class ThreadedEchoServer implements Runnable {
     	 public static final int PORT=7777;
     	
     	 private Socket sock;
     	
     	 public ThreadedEchoServer(Socket s) {
     	 	 sock=s;
     	 }
     	



22
Esempio
     ✦ Nel main creiamo i thread:

     	   public static void main(String args[]) throws IOException {
     	   	 ServerSocket serv=new ServerSocket(PORT);
     	   	 while (true) {
     	   	 	 Socket sock=serv.accept();
     	   	 	 ThreadedEchoServer server=new ThreadedEchoServer(sock);
     	   	 	 Thread t=new Thread(server);
     	   	 	 t.start();
     	   	 }
     	   }




23
Esempio
     ✦ Il metodo run contiene la gestione di una
       singola connessione
         	   public void run() {
         	   	   try {
         	   	   	   BufferedReader brd=new BufferedReader(
         	   	   	   	   	  new InputStreamReader(
         	   	   	   	   	  	   	  sock.getInputStream(), "UTF-8"));
         	   	   	   String s=brd.readLine();
         	   	   	
         	   	   	   PrintWriter prw=new PrintWriter(
         	   	   	   	   	  new OutputStreamWriter(
         	   	   	   	   	  	   	  sock.getOutputStream(), "UTF-8"));
         	   	   	   prw.print(s);
         	   	   	   prw.println(s);
         	   	   	   prw.flush();
         	   	   } catch (IOException exc) {
         	   	   	   System.out.println("Eccezione I/O:" + exc);
         	   	   	   exc.printStackTrace();
         	   	   } finally {
         	   	   	   try { sock.close(); }
         	   	   	   catch (IOException exc2) { }
         	   	   }
         	   }
         }

24

More Related Content

What's hot (7)

Heartbleed - OpenSSL Bug
Heartbleed - OpenSSL BugHeartbleed - OpenSSL Bug
Heartbleed - OpenSSL Bug
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
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
 
iOS_course_7
iOS_course_7iOS_course_7
iOS_course_7
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information Gathering
 
pugBO #10 PSR e Composer
pugBO #10 PSR e ComposerpugBO #10 PSR e Composer
pugBO #10 PSR e Composer
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 

Viewers also liked (11)

Network essentials
Network essentialsNetwork essentials
Network essentials
 
Lumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp IpLumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
Lumit.Basic.Knowledge.Training.Introduzione.Tcp Ip
 
B Esercizi Tcp
B Esercizi TcpB Esercizi Tcp
B Esercizi Tcp
 
OpenId @JavaDayRoma
OpenId @JavaDayRomaOpenId @JavaDayRoma
OpenId @JavaDayRoma
 
World wide web
World wide webWorld wide web
World wide web
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network Comandi
 
Network e Internet
Network e InternetNetwork e Internet
Network e Internet
 
Hosting: storia del protocollo http
Hosting: storia del protocollo httpHosting: storia del protocollo http
Hosting: storia del protocollo http
 
Telematica
TelematicaTelematica
Telematica
 
ecdl-modulo-7-reti-informatiche
ecdl-modulo-7-reti-informaticheecdl-modulo-7-reti-informatiche
ecdl-modulo-7-reti-informatiche
 
MODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPMODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IP
 

Similar to Lezione 3: Connessioni TCP

3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasporto
acapone
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazza
Fabiano Dalla Piazza
 

Similar to Lezione 3: Connessioni TCP (20)

Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Socket python
Socket pythonSocket python
Socket python
 
Gnutella
GnutellaGnutella
Gnutella
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
socket e SocketServer: il framework per i server Internet in Python
socket e SocketServer: il framework per i server Internet in Pythonsocket e SocketServer: il framework per i server Internet in Python
socket e SocketServer: il framework per i server Internet in Python
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasporto
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazza
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Presentazione Oz - Mozart
Presentazione Oz - MozartPresentazione Oz - Mozart
Presentazione Oz - Mozart
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Yagwto
YagwtoYagwto
Yagwto
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Reti Domestiche
Reti DomesticheReti Domestiche
Reti Domestiche
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
 
Introduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name SystemIntroduzione ai protocolli tcp/ip ed al Domain Name System
Introduzione ai protocolli tcp/ip ed al Domain Name System
 
Soluzioni per la difesa da attacchi DoS nelle reti SDN
Soluzioni per la difesa da attacchi DoS nelle reti SDNSoluzioni per la difesa da attacchi DoS nelle reti SDN
Soluzioni per la difesa da attacchi DoS nelle reti SDN
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architetture
 

More from Andrea Della Corte

More from Andrea Della Corte (19)

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Recently uploaded

Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 

Recently uploaded (20)

ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
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
 
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
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
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
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 

Lezione 3: Connessioni TCP

  • 1. Lezione 3: Connessioni TCP Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Introduzione ✦ Connessioni TCP lato client: la classe Socket ✦ Connessioni TCP lato server: la classe ServerSocket ✦ Struttura di un server multi-threaded 2
  • 3. Introduzione ✦ I protocolli di livello 4 (transport) più usati su internet: • TCP: connection oriented • UDP: datagram oriented 3
  • 4. Socket ✦ Le API per i protocolli TCP e UDP usano il concetto di “socket” (“presa”) per specificare i due estremi del canale di comunicazione ✦ I socket attivi su una macchina per un determinato protocollo sono identificati attraverso un numero a 16 bit (port number) • le applicazioni più comuni hanno un “well-known” port number usato per default • nei sistemi Unix-like i numeri 0-1023 richiedono i privilegi di amministratore del sistema 4
  • 5. Socket TCP ✦ Per il protocollo TCP (connection oriented) i due socket che devono comunicare devono essere connessi • Una delle due parti inizia la connessione (client) • L’altra parte deve essere in attesa di una richiesta di connessione (server); quando arriva una richiesta di connessione, il server deve accettare la richiesta per stabilire il collegamento ✦ L’instaurazione della connessione è un’operazione relativamente costosa in termini di tempo 5
  • 6. Socket TCP in Java ✦ Le classi principali sono nel package java.net ✦ La classe che rappresenta un socket TCP dal punto di vista del client è Socket 6
  • 7. Creazione di un Socket ✦ Costruttore: • Socket(String hostAddress, int port) ✦ i parametri specificano l’indirizzo del socket a cui il socket creato si deve connettere • hostAddress può essere l’indirizzo IP in forma “dotted” (es. “193.205.164.3”) o l’indirizzo simbolico (es. “www.unisa.it”) ✦ il costruttore solleva una IOException in caso di problemi 7
  • 8. Uso di un client socket ✦ I seguenti metodi consentono di ottenere input/output stream associati al socket: • InputStream getInputStream() • OutputStream getOutputStream() ✦ Usando questi stream in congiunzione con le altre classi di I/O è possibile inviare/ricevere dati attraverso la connessione TCP ✦ Al termine dell’uso il socket deve essere chiuso col metodo close 8
  • 9. Esempio ✦ Vogliamo realizzare un programma che apra una connessione TCP con un server, invii una stringa e legga una stringa di risposta dal server 9
  • 10. Esempio ✦ Innanzitutto, creiamo il socket: import java.io.*; import java.net.*; public class EchoClient { public static final int PORT=7777; public static void main(String args[]) throws IOException { Socket sock=new Socket(args[0], PORT); 10
  • 11. Esempio ✦ Quindi inviamo la stringa, usando un PrintWriter: OutputStream os=sock.getOutputStream(); Writer wr=new OutputStreamWriter(os, "UTF-8"); PrintWriter prw=new PrintWriter(wr); prw.println("Hello, world"); prw.flush(); Nota: il metodo flush() forza l’invio di eventuali buffer in memoria 11
  • 12. Esempio ✦ Infine, leggiamo la risposta dal server usando un BufferedReader: InputStream is=sock.getInputStream(); Reader rd=new InputStreamReader(is, "UTF-8"); BufferedReader brd=new BufferedReader(rd); String answer=brd.readLine(); System.out.println(answer); sock.close(); } } 12
  • 13. Socket lato server ✦ La creazione di socket TCP dal lato del server si effettua attraverso la classe ServerSocket ✦ Un ServerSocket rappresenta una “fabbrica” (“factory”) di socket: al momento in cui viene accettata una richiesta di connessione da un client, il ServerSocket crea un Socket attraverso il quale avviene la comunicazione 13
  • 14. Creazione di ServerSocket ✦ Costruttore: • ServerSocket(int port) ✦ Il ServerSocket è in attesa di richieste sul port specificato ✦ Anche le operazioni su ServerSocket possono lanciare IOException 14
  • 15. Attesa di una connessione ✦ Il ServerSocket si mette in attesa della prossima richiesta e la accetta instaurando una connessione con il metodo: • Socket accept(); ✦ Il Socket restituito è utilizzabile per comunicare con il client 15
  • 16. Esempio ✦ Per completare l’esempio precedente, realizziamo un server che accetti una connessione, legga una stringa attraverso il socket e invii alla connessione due volte la stessa stringa 16
  • 17. Esempio ✦ Creiamo il ServerSocket e accettiamo la connessione: import java.io.*; import java.net.*; public class EchoServer { public static final int PORT=7777; public static void main(String args[]) throws IOException { ServerSocket serv=new ServerSocket(PORT); Socket sock=serv.accept(); 17
  • 18. Esempio ✦ Leggiamo una stringa: BufferedReader brd=new BufferedReader( new InputStreamReader( sock.getInputStream(), "UTF-8")); String s=brd.readLine(); 18
  • 19. Esempio ✦ Inviamo la risposta: PrintWriter prw=new PrintWriter( new OutputStreamWriter( sock.getOutputStream(), "UTF-8")); prw.print(s); prw.println(s); prw.flush(); sock.close(); } } 19
  • 20. Server multi-threaded ✦ Di solito un server deve servire più di una singola richiesta ✦ Il modo più semplice è creare un thread per ogni nuova richiesta di connessione • il thread principale esegue accept() in un ciclo • i thread creati per ogni richiesta gestiscono la comunicazione con il client 20
  • 21. Esempio ✦ Modifichiamo il server precedente in modo da poter servire più richieste 21
  • 22. Esempio ✦ Per cominciare, definiamo la classe: import java.io.*; import java.net.*; public class ThreadedEchoServer implements Runnable { public static final int PORT=7777; private Socket sock; public ThreadedEchoServer(Socket s) { sock=s; } 22
  • 23. Esempio ✦ Nel main creiamo i thread: public static void main(String args[]) throws IOException { ServerSocket serv=new ServerSocket(PORT); while (true) { Socket sock=serv.accept(); ThreadedEchoServer server=new ThreadedEchoServer(sock); Thread t=new Thread(server); t.start(); } } 23
  • 24. Esempio ✦ Il metodo run contiene la gestione di una singola connessione public void run() { try { BufferedReader brd=new BufferedReader( new InputStreamReader( sock.getInputStream(), "UTF-8")); String s=brd.readLine(); PrintWriter prw=new PrintWriter( new OutputStreamWriter( sock.getOutputStream(), "UTF-8")); prw.print(s); prw.println(s); prw.flush(); } catch (IOException exc) { System.out.println("Eccezione I/O:" + exc); exc.printStackTrace(); } finally { try { sock.close(); } catch (IOException exc2) { } } } } 24