La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

I socket.

Presentazioni simili


Presentazione sul tema: "I socket."— Transcript della presentazione:

1 I socket

2 Le porte di comunicazione e i socket
La comunicazione tra client e server avviene tramite messaggi I messaggi sono costruiti al livello applicativo e variano in base al protocollo applicativo (es. HTTP, FTP ….) Un processo su un host (es. client) per inviare un messaggio ad un altro host (es. server) deve identificare in maniera univoca il processo destinatario Problema: ogni PC ha una sola porta fisica di connessione alla rete, se più applicazioni da parte di uno stesso host devono accedere alla rete devono essere riconosciute dai server Soluzione: indirizzo IP + porte logiche Questo meccanismo prende il nome di socket

3 Le porte logiche Una porta ha un valore numerico rappresentabile con 2 byte (16 bit) I valori che può assumere vanno da

4 Le porte logiche “well-known”
Le porte da 0 a sono riservate per le applicazioni Le porte di uno stesso protocollo sono diverse in base al servizio (TCP/UDP)

5 Le porte logiche “Registered”
I numeri di porta da a sono riservati a porte registrate e usati da alcuni servizi Possono essere anche usate dai client

6 Le porte logiche “Dynamic/Private”
I numeri di porta da a sono liberi Possono essere assegnati ai processi applicativi

7 Esempio Caso di un server sul quale sono disponibili più servizi:
invio di protocollo applicativo SMTP, il client deve inviare un messaggio opportunamente codificato alla porta TCP 25 del server sito web: protocollo applicativo HTTP, il client deve inviare un messaggio opportunamente codificato alla porta TCP 80 del server servizio DNS: trasformare il nome di un calcolatore in un indirizzo IP, il client invia una richiesta alla porta UDP 53 del server In generale: PER CHIEDERE UN SERVIZIO AD UN SERVER BISOGNA SPECIFICARE L’IP DEL SERVER E LA PORTA LOGICA CHE INDICA IL TIPO DI SERVIZIO

8 SOCKET Un socket è formato da una coppia <indirizzo IP: numero della porta> host C IP: host A IP: 80 3301 3300 Due applicazioni dell’host A host A: < :3301> host A: < :3300> e un’applicazione dell’host B host B: < :3301> comunicano alla stessa porta 80 dell’host C richiedendo un servizio HTTP host B IP: 3301

9 SOCKET Il client deve conoscere l’indirizzo IP e il numero di porta usati dal server (es: il servizio HTTP del server è sulla porta 80) Il numero di porta logica è libero a scelta tra quelli disponibili (es: 3301 oppure 3300) e deve essere trasmesso al server nel segmento di richiesta di connessione al server in modo che quest’ultimo possa successivamente inviare le risposte Allo stesso server possono arrivare contemporaneamente: richiesta da client diversi che potrebbero usare la stessa porta o richieste da porte diverse dallo stesso client

10 Programmazione SOCKET
Come si realizza a livello di codice al comunicazione tra client e server in rete? Tutti i Sistemi Operativi espongono un’interfaccia di programmazione (API) per i due principali protocolli del livello di trasporto UDP e TCP Il protocollo UDP (User Datagram Protocol) prevede la trasmissione di messaggi denominati datagram I singoli datagram sono inoltrati in rete senza garantire al mittente che essi raggiungeranno la destinazione Il protocollo UDP lascia al programmatore il compito di garantire l’integrità della comunicazione tra mittente e destinatario

11 Programmazione SOCKET
Il protocollo TCP (Transport Control Protocol) prevede la trasmissione di messaggi denominati bytestream Questo protocollo garantisce l’affidabilità della comunicazione ( a meno di gravi errori di comunicazione in rete) nel trasferimento di tutti i singoli byte senza errori o perdite I server TCP sono di tipo concorrente: quando ricevono una connessione di un client generano un nuovo processo che gestisce lo specifico client e resta in ascolto di altre richieste da parte di altri client

12 Programmazione SOCKET
Si possono quindi individuare due tipi fondamentali di socket: stream socket (Protocollo TCP) datagram socket (Protocollo UDP) Le funzioni più utilizzate per il linguaggio Java: socket/serverSocket: crea un nuovo socket close: termina l’utilizzo di un socket bind: collega un indirizzo di rete ad un socket listen: aspetta messaggi in ingresso accept: comincia ad un utilizzare una connessione in ingresso connect: crea una connessione con un host remoto send: trasmette dati su una connessione attiv recv: riceve dati da una connessione attiva

13 Stream Socket Con gli Stream Socket si realizza una connessione sequenziale, asimmetrica, affidabile basata su stream di byte di lunghezza variabile Ogni processo (client/server) crea un endpoint richiamando la funzione socket() Server: si mette in ascolto di un collegamento e quando gli arriva la richiesta la esaudisce accept() e subito dopo crea un nuovo socket in ascolto di nuove connessioni Client: fa una richiesta di connessione al server e quando viene accettata si stabilisce il collegamento Client e server si scambiano i messaggi (read() e write()) fino alla chiusura della connessione che viene effettuata con la funzione close()

14 Server TCP Stream Socket
In un server TCP abbiamo due tipi di socket: Connection socket: per accettare connessioni ed è condiviso Data socket: un socket per le operazioni di read() e write(), NON condiviso

15 Connection e Data Socket
Client A IP: Server IP connect Data socket Connection socket send/receive Client B IP: connect Data socket send/receive Data socket In Java due classe: ServerSocket(int port) per creare una connection socket specificando il numero di porta su cui rimanere in ascolto Socket(InetAdress addres, int port) per creare una data socket a seguito di una connessione

16 Lato Server: mettersi in attesa di una connessione
Creare un’istanza della classe java.net.ServerSocket specificando il numero di porta su cui rimanere in ascolto. ServerSocket serverSocket = new  ServerSocket(4567); Chiamare il metodo accept() che fa in modo che il server rimanga in ascolto di una richiesta di connessione (la porta non deve essere già in uso) Socket socket=serverSocket.accept(); Quando il metodo completa la sua esecuzione la connessione col client è stabilita e viene restituita un’istanza di java.net.Socket connessa al client remoto.

17 Lato Client: aprire una connessione
Aprire un socket specificando indirizzo IP e numero di porta del server.   Socket socket = new  Socket(“ ”,  4567) All’indirizzo e numero di porta specificati ci deve essere in ascolto un processo server. Se la connessione ha successo si usano (sia dal lato client che dal lato server) gli stream associati al socket per permettere la comunicazione tra client e server (e viceversa) Scanner in  = new  Scanner(socket.getInputStream()); PrintWriter out =  new PrintWriter(socket.getOutputStream());

18 Datagram Socket Si realizza una comunicazione che permette di scambiare dati senza connessione (i messaggi contengono l’indirizzo di destinazione e provenienza) mediante il trasferimento di datagrammi che inoltrano messaggi di dimensione variabile, senza garantire ordine o arrivo dei pacchetti, quindi si ha una comunicazione inaffidabile. Sono supportate nel dominio Internet dal protocollo UDP. Operativamente, ogni processo crea il proprio endpoint richiamando la primitiva che crea il socket e successivamente: il server si mette in attesa di ricevere i dati e alla loro ricezione può inviare un risposta; il client invia il pacchetto di dati al server può mettersi in attesa di una risposta con le stesse primitive che ha utilizzato il server; Al termine della comunicazione il socket viene chiuso. Il loro vantaggio è quello di trasferire velocemente i dati e non esistono differenze tra le chiamate effettuate dai vari processi coinvolti nella comunicazione

19 JAVA SOCKET Le operazioni necessarie per un trasferimento di dati tra due host sono le seguenti: Un server apre un canale di comunicazione su una determinata porta e rimane in ascolto, in attesa di una richiesta di connessione (ServerSocket); un host client fa una richiesta di connessione a un server Socket (con indirizzo IP e address port conosciuti: socket sul client); il server accetta la connessione del client e così viene instaurato un canale di comunicazione tra i due host.

20 JAVA SOCKET Java utilizza la classe Socket per la creazione degli oggetti che permettono di stabilire un canale di comunicazione tra un client e un server attraverso il quale si comunica utilizzando due stream Le classi che Java mette a disposizione per l’utilizzo dei socket sono: classe InetAddress; classe ServerSocket; classe Socket

21 Classe InetAddress La classe InetAddress mette a disposizione diversi metodi per astrarre informazioni dal particolare tipo di indirizzo IP specificato Non sono previsti costruttori e l’unico modo per creare un oggetto di classe InetAddress prevede l’utilizzo di metodi statici, e in particolare sa stessa di effettuare le dovute traduzioni

22 Classe InetAddress public String getHostName()
restituisce il nome dell’host che corrisponde all’indirizzo IP dell’InetAddress; se il nome non è ancora noto (per esempio se l’oggetto è stato creato specificando un indirizzo IP numerico), verrà cercato tramite il DNS; se tale ricerca fallisce, verrà restituito l’indirizzo IP numerico sotto forma di stringa public String getHostAddress() simile al precedente, restituisce però l’indirizzo IP numerico, sotto forma di stringa, corrispondente all’oggetto InetAddress. public byte[] getAddress() l’indirizzo IP numerico restituito sarà sotto forma di matrice di byte; l’ordinamento dei byte è high byte first (che è l’ordinamento tipico della rete) della macchina locale;

23 La classe Socket Permette di definire una connessione client-server via TCP su entrambi i lati, sia client che server. La differenza tra client e server sta nella modalità di creazione di un oggetto di questo tipo: nel server l’oggetto Socket viene creato dal metodo accept() della classe ServerSocket; il client dovrà provvedere a creare un’istanza di Socket: per creare un socket con un server in esecuzione su un certo host è sufficiente creare un oggetto di classe Socket specificando nel costruttore l’indirizzo Internet dell’host e il numero di porta. Dopo che l’oggetto Socket è stato istanziato, è possibile ottenere (tramite appositi metodi) due stream (uno di input e uno di output): tramite essi è possibile comunicare con l’host, e riceverne messaggi.


Scaricare ppt "I socket."

Presentazioni simili


Annunci Google