8) Come avviene la comunicazione datagram (connectionless)?

La connessione tra processo client e processo server non viene creata:

Il client ed il server devono creare ciascuno una socket e definirne l’indirizzo (primitive socket e bind), formando così le relative half-association.

I processi possono comunicare specificando, per ogni messaggio, la socket dell’interlocutore.

Il server si mette in attesa di un messaggio

error=recvfrom(sd,msg,lun,flags,mitt,lun_mitt);

/*mitt e lun_mitt specificano l’indirizzo del mittente*/

…che gli viene inviato dal client.

error=sendto(sd,msg,lun,flags,dest,lun_dest);

/*dest e lun_dest specificano l’indirizzo del destinatario*/

dopo l’elaborazione il server spedisce la risposta, che viene ricevuta dal client. Le primitive usate sono sempre sendto e recvfrom.

al termine si elimina la socket

close(sd); /*eliminazione*/

quindi, il processo Client deve conoscere l’indirizzo internet del nodo remoto e la porta del servizio da usare, mentre il processo Server deve conoscere la porta per il servizio da offrire ed assegnare, se occorre, wildcard addresses per l’indirizzo Internet locale.

Schema:

SERVER
CLIENT
socket()
socket()
bind()
bind()
recvfrom()
 
<ATTESA>
<= sendto()
<ELABORA>
 
sendto()
=> recvfrom()
close()
close()

Note:

Poiché UDP non è affidabile intrinsecamente, per ottenere maggiore affidabilità occorre prevedere una procedura di ritrasmissione nella applicazione.

Per prevenire situazioni di perdita dovute alla trasmissione di molti messaggi, si usano messaggi i più lunghi possibile.

 


Back
Index
Next