Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Connessione TCP - Java, Slide di Informatica

Connessione TCP in ambito Java

Tipologia: Slide

2022/2023

Caricato il 18/06/2026

alex-battilana
alex-battilana 🇮🇹

2 documenti

1 / 17

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Socket
terza lezione
Protocollo TCP
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Anteprima parziale del testo

Scarica Connessione TCP - Java e più Slide in PDF di Informatica solo su Docsity!

Socket

terza lezione

Protocollo TCP

Unità di apprendimento 2

Lezione 4

La connessione tramite

socket TCP

Note

⚫ WebSocket Con lo scopo principale di ottimizzare le prestazioni della

comunicazione tra browser e server web nel 2011 sono stati introdotti i

WebSocket

⚫ un protocollo di comunicazione bidirezionale di livello applicativo basato sul

protocollo di trasporto TCP.

⚫ Diversamente dai socket TCP,i WebSocket permettono di trasmettere e

ricevere interi messaggi, sollevando lo sviluppatore dall'onere della loro

ricostruzione partire dal flusso di byte ricevuto.

⚫ Comunicazione di processi su pc: Utilizzando lo specialeindirizzo IP di

loopback(127.0.0.1), è possibile impiegare il protocollo TCP come meccanismo

di comunicazione tra processi attivi sullo stesso computer.

Intro

⚫ Il protocollo TCP prevede la connessione esplicita di un processo client auna processo server in esecuzione su computer diversi interconnessi in una rete LAN o WAN che impiega lo stack di protocolli TCP/IP3 per la trasmissione/ricezione bidirezionale di un flusso di byte denominato bytestream. ⚫ Il singolo computer connesso in rete è identificato dal proprio indirizzoIPv4 a 32 bit, mentre i processi server e client sono associati univocamente a un numero di porta a 16 bit. ⚫ La coppia indirizzo IP e numero di porta TCP identifica in modo univoco uno dei due socket della connessione. Il protocollo TCP garantisce l'affidabilità della comunicazione end-to-end tra i due socket connessi ⚫ a meno di gravi errori di comunicazione sulla rete è garantita la ricezione da parte del socket destinatario di tutti i singoli byte nell’ordine in cui sono trasmessi dal socket mittente senza errori, o perdite.La connessione del processo client al processo server ha come prerequisito l’«ascolto» da parte del processo server della richiesta di connessione su un numero di porta noto al processo client che deve inoltrare la richiesta stessa prima di avviare la comunicazione.

Protocollo di comunicazione

Il diagramma UML illustra l’ordine temporale di invocazione delle funzioni API di gestione dei socket TCP e l’interazione tra i processi client e il processo server. La comunicazione tra i processi client e server mediante invocazione delle funzioni send e recv avviene solo nelle fasi di attivazione evidenziate incolore. L’invocazione della funzione bind da parte dei processi client non viene effettuata perché non è necessario che i relativi socket abbiano un numero di porta determinato: in questo caso il sistema operativo associa il socket a un numero di porta scelto casualmente tra quelli disponibili

Creare una socket - Primitiva socket ()

Librerie

  • **#include **
  • #include Sintassi Int socket( int domain, int type, int protocol);
  • La funzione socket restituisce un identificatore del socket aperto , oppure – 1 in caso di errore;
  • per un socket di tipo TCP il parametro domain deve assumere il valore AF_INET (protocollo IP versione 4)
  • il parametro type il valore SOCK_STREAM (protocollo di tipo bytestream)
  • il parametro protocol il valore IPPROTO_TCP (protocollo TCP);
  • se si desidera un socket «nonbloccante» rispetto alle operazioni di lettura al valore del parametro type deve essere aggiunto con l’operatore C/C++ «|»(or ) il valore SOCK_NONBLOCK. se si desidera un socket «non bloccante» rispetto alle operazioni di lettura alvalore del parametro type deve essere aggiunto con l’operatore «|» (or ) il valore SOCK_NONBLOCK.

Funzione Bind segue

⚫ Chiamando la bind() si può specificare o no l’indirizzp IP e la porta,

assegnando valori ai due campi sin_addr e sin_port della struttura

sockaddr_in passata alla bind come secondo argomento.

⚫ A seconda del valore otteniamo risultati diversi, che sono qui

elencati, nella tabella che si riferisce solo al caso

Funzioni Bind Segue

⚫ Specificando il numero di porta 0 il kernel sceglie collega il socket

ad un numero di porta temporaneo nel momento in cui la bind() è

chiamata. Specificando la wildcard (mediante la costante

INADDR_ANY per IPv4) il kernel non sceglie l’indirizzo IP locale

fino a che o il socket è connesso (se TCP) o viene inviato il primo

datagram per quel socket (se UDP)

Attesa di unarichiesta diconnessionesu un

socket da parte di un server TCP - Accept ()

Sintassi int accept( int socket, struct sockaddr* cli_addr, int * dim); La funzione accept blocca il processo server in attesa di una richiesta di connessione da parte di un processo client in caso di connessione accettata con successo la funzione restituisce l’identificatore del socket su cui avviene la comunicazione con il processo client ,–1 altrimenti

  • Socket : listening socket. L’identificatore del socket che si occupa di instaurare le connessioni con i client che lo richiedono, secondo le impostazioni definite dalla bind() e dalla listen().
  • Cli_addr : è un puntatore alla struttura sockaddr_in, su cui la funzione accept scrive l’indirizzo IP del client e il numero di porta del client, con cui è stata instaurata la connessione a cui si riferisce il socket che viene restituito come risultato
  • Dim : è un puntatore alla dimensione (in byte) della struttura cli_addr che viene restituita.

Richiesta diconnessionemedianteun socket a

un server TCP - Connect ()

Sintassi int connect( int socket, struct sockaddr* servaddr, int * dim);

  • La funzione connect è invocata dal processo client per richiedere la connessione a un processo server
  • Per farlo ne specifica l’indirizzo IP e il numero di porta TCP nei campi della struttura add di tipo sockaddr la cui dimensione in byte è definita nel parametro dim;
  • Socket : descrittore ottenuto dalla chiamata alla funzione socket
  • Servaddr : un puntatore alla struttura sockaddr, e deve specificare l’indirizzo IP e il numero di porta del server da connettere.
  • Dim : specifica la dimensione della struttura dati che contiene l’indirizzo del server servaddr, viene di solito assegnata mediante la sizeof(servaddr).
  • 0 se la connessione vie stabilita, - 1 altrimenti

Ricevere i dati recv()

int recv( int socket, void* buffer, int size, int flag);

  • La funzione recv utilizza il socket TCP specificato per ricevere al massimo size byte di dati nell’array buffer dal socket TCP a cui è connesso;
  • il parametro flag è impiegato in relazione a funzionalità avanzate e può essere impostato al valore 0;
  • la funzione restituisce il numero di byte ricevuti in caso di successo, – 1 altrimenti Nota Le funzioni send e recv non necessitano di parametri per la definizione o la restituzione dell’identità (indirizzo IP e numero diporta) rispettivamente del socket destinatario o mittente in quanto il protocollo TCP prevede esclusivamente la comunicazione con socket con cui è stata preventivamente stabilita la connessione

Chiusura della socket close ()

int close( int socket); E’ la funzione che serve a chiudere il socket specificato. La funzione restituisce 0 in caso di successo, - 1 altrimenti. Il parametro socket rappresenta il numero identificativo del socket da chiudere.