UDP socket
Nelle sezioni precedenti abbiamo imparato a scrivere in php dei semplici server e client con socket TCP. Adesso faremo la stessa cosa utilizzando i socket UDP.
I socket UDP sono molto più semplici da utilizzare perchè funzionano senza connessione. Un server UDP ha solo un socket che resta in attesa di ricevere dei dati ed un socket client che può inviare dei dati senza connessione.
Schema grafico di una comunicazione UDP
In questo schema sono rappresentate le semplici operazioni alla pari, che un elemento Server ed un elemento Client compiono per inviare ed intercettare dei messaggi con il più semplice protocollo UDP, che non prevede la fase della connessione.
La differenza fondamentale rispetto agli esempi precedenti la troviamo nella creazione del socket, eseguita sempre con la funzione socket_create
, ma con qualche variazione nei parametri passati. Per maggior chiarezza esaminiamola nei dettagli:
$sock = socket_create(AF_INET, SOCK_DGRAM, 0);
Il codice precedente creerà un socket con le seguenti proprietà :
Famiglia di indirizzi: AF_INET (questa è IP versione 4)
Tipo: SOCK_DGRAM (questo significa connessione orientata al protocollo UDP)
Protocollo: 0 (oppure IPPROTO_IP, questo è il protocollo IP)
Socket server UDP
Ecco un semplice esempio di socket server UDP sulla porta 6000 di localhost.
Esecuzione dello script
Dopo aver salvato il codice precedente nella cartella public_html
dandogli il nome udpserver.php
, lo possiamo mandare in esecuzione direttamente dalla riga di comando di un terminale:
$ php ~/public_html/udpserver.php
ottenendo in risposta:
Socket creato correttamente. Bind effettuato con successo. In attesa dei dati ...
Questo server UDP è in grado di gestire più client in quanto non utilizza una rigida connessione e risponde semplicemente a chi è in ingresso.
Socket client UDP
Mentre il nostro server UDP sta funzionando benissimo sul primo terminale è arrivato il momento di preparare il codice del programma client per effettuare una comunicazione da un secondo terminale.
Il client appena codificato richiede all'utente di inserire un qualche messaggio da inviare al server. Quindi rimane in attesa della risposta del server e la visualizza.
Esecuzione dello script
Dopo aver salvato il codice precedente nella cartella public_html
dandogli il nome udpclient.php
, lo possiamo mandare in esecuzione direttamente dalla riga di comando di un secondo terminale:
$ php ~/public_html/udpclient.php
ottenendo in risposta:
Socket creato correttamente. Digita il messaggio da inviare: Ciao a tutti Risposta: OK ... Ciao a tutti Digita il messaggio da inviare: .......
Nota
Forse è il caso di ricordare che l'attività rimasta in loop nei 2 terminali server e client può essere interrotta con Ctrl-C.
Conclusioni
In questi brevissimi appunti dedicati alla comunicazione UDP abbiamo visto come realizzare in PHP le basi minime per costruire un server ed un client UDP. I socket UDP sono utilizzati in tutti quei tipi di comunicazione di rete in cui, per una serie di motivi, l'affidabilità , intesa secondo l'accezione delle reti, non è molto importante.
Gli esempi sopra riportati sono molto semplici e avrebbero bisogno di tante modifiche per renderli utili ad un qualche uso pratico, ma possono costituire il punto di partenza per le proprie sperimentazioni.
Punto della situazione
In questa sezione abbiamo imparato come:
1 - Creare un socket UDP
2 - Attivare un semplice server UDP
3 - Attivare un semplice client UDP
L'ordine è il piacere della ragione; ma il disordine è la delizia dell'immaginazione.
Paul Claudel