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

Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!MarioTraetta
 
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
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information GatheringSalvatore Lentini
 
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 06Majong DevJfu
 

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

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 IpLuca Astori
 
B Esercizi Tcp
B Esercizi TcpB Esercizi Tcp
B Esercizi Tcpacapone
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network ComandiMauro Ferrigno
 
Network e Internet
Network e InternetNetwork e Internet
Network e Internetmagaita89
 
Hosting: storia del protocollo http
Hosting: storia del protocollo httpHosting: storia del protocollo http
Hosting: storia del protocollo httpAruba S.p.A.
 
Telematica
TelematicaTelematica
Telematicajoefig
 
ecdl-modulo-7-reti-informatiche
ecdl-modulo-7-reti-informaticheecdl-modulo-7-reti-informatiche
ecdl-modulo-7-reti-informaticheMatekanc
 
MODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPMODULO 20 –> Introduzione al TCP/IP
MODULO 20 –> Introduzione al TCP/IPFrancesco Ciclosi
 

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

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 PythonPyCon Italia
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasportoacapone
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazzaFabiano Dalla Piazza
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio JavaPaolo Tosato
 
Presentazione Oz - Mozart
Presentazione Oz - MozartPresentazione Oz - Mozart
Presentazione Oz - Mozartfede
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in JavaAndrea Della Corte
 
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 SystemRoBisc
 
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 SDNMatteo D'Amore
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureStefano Valle
 

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

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
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 SubversionAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
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 JavaAndrea Della Corte
 
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)Andrea Della Corte
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceAndrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 
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 RESTAndrea 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

Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfPierLuigi Albini
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxfedericodellacosta2
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataGianluigi Cogo
 
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
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
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
 
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
 

Recently uploaded (8)

Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdf
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptx
 
La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open Data
 
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
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
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
 
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
 

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