Il networking è una parte fondamentale della programmazione moderna, permettendo la comunicazione tra processi su reti locali o su Internet. In C, la creazione di connessioni di rete avviene principalmente attraverso l’uso di socket, che rappresentano un punto finale di comunicazione. In questa guida, esploreremo i concetti base del networking in C, compreso come creare, gestire e chiudere socket per realizzare semplici applicazioni client-server.
Cos’è un Socket?
Un socket è un’interfaccia che consente a un processo di inviare e ricevere dati su una rete. I socket possono essere utilizzati per implementare diversi protocolli di rete, tra cui TCP (Transmission Control Protocol) e UDP (User Datagram Protocol).
Tipi di Socket
Socket TCP: Forniscono una connessione affidabile e orientata al flusso, con garanzia di consegna dei dati.
Socket UDP: Offrono una connessione non affidabile e basata su datagrammi, senza garanzia di consegna.
Creazione di un Socket
Per creare un socket in C, utilizziamo la funzione socket().
Sintassi di socket()
domain: Specifica il dominio di comunicazione. Per esempio, AF_INET per IPv4.
type: Specifica il tipo di socket. Per esempio, SOCK_STREAM per TCP o SOCK_DGRAM per UDP.
protocol: Specifica il protocollo. Solitamente impostato a 0 per usare il protocollo predefinito.
Esempio di Creazione di un Socket TCP
Uscita:
Creazione di un Server TCP
Un server TCP inizia creando un socket, quindi lo lega (bind) a un indirizzo e porta specifici, lo ascolta (listen) per le connessioni in arrivo e accetta (accept) le connessioni da parte dei client.
Passi per Creare un Server TCP
Creare il socket con socket().
Associare il socket a un indirizzo IP e una porta con bind().
Ascoltare le connessioni in arrivo con listen().
Accettare una connessione in entrata con accept().
Comunicare con il client usando send() e recv().
Esempio di Server TCP
Uscita:
Creazione di un Client TCP
Un client TCP crea un socket, si connette a un server specificando l’indirizzo IP e la porta, quindi invia e riceve dati attraverso il socket.
Passi per Creare un Client TCP
Creare il socket con socket().
Connettersi al server con connect().
Comunicare con il server usando send() e recv().
Esempio di Client TCP
Uscita:
Networking con UDP
Con UDP, non c’è una connessione stabile tra client e server, quindi i dati sono inviati come pacchetti singoli. Le funzioni principali rimangono le stesse, ma con alcune differenze nell’uso di sendto e recvfrom invece di send e recv.
Esempio di Server UDP
Esempio di Client UDP
Uscita:
Conclusioni
Il networking in C è una competenza fondamentale per sviluppare applicazioni che richiedono la comunicazione tra diversi dispositivi su una rete. Comprendere come creare, configurare e utilizzare socket per la comunicazione TCP e UDP è essenziale per costruire server e client robusti e affidabili. Con pratica e sperimentazione, sarai in grado di affrontare progetti di networking sempre più complessi, sfruttando la potenza e la flessibilità del linguaggio C.