🧠 Cos’è UDP?
I socket UDP (User Datagram Protocol) sono un tipo di socket che permette di inviare e ricevere dati senza stabilire una connessione formale, a differenza dei socket TCP. Questo li rende più veloci, ma non garantisce la consegna dei pacchetti né l’ordine di arrivo.
🖥️ Comandi per il Server UDP
Creazione del socket UDP
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socket.AF_INETspecifica IPv4socket.SOCK_DGRAMindica socket UDP
Associazione a indirizzo e porta
server.bind(("127.0.0.1", 8080))
"127.0.0.1"limita la comunicazione locale"0.0.0.0"accetta connessioni da qualsiasi IP8080è la porta di comunicazione
Ricezione messaggio
data, addr = server.recvfrom(1024)
print(f"Messaggio da {addr}: {data.decode()}")
- Attende messaggi di massimo 1024 byte
- Restituisce dati e indirizzo mittente
- Usa
.decode()per ottenere una stringa
Invio risposta
server.sendto("Risposta dal server".encode(), addr)
- Usa
.encode()per convertire in bytes addrè l’indirizzo del client
Chiusura socket
server.close()
- Chiude il socket e libera le risorse
💻 Comandi per il Client UDP
Creazione del socket UDP
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Invio messaggio al server
client.sendto("Ciao server!".encode(), ("127.0.0.1", 8080))
- Invia il messaggio all’IP e porta specificati
- Usa
.encode()per convertire in bytes
Ricezione risposta
data, server = client.recvfrom(1024)
print("Risposta:", data.decode())
Chiusura socket
client.close()
💡 Esempi Completi
Server UDP
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(("127.0.0.1", 8080))
print("Server UDP in ascolto...")
data, addr = server.recvfrom(1024)
print(f"Messaggio da {addr}: {data.decode()}")
server.sendto("Risposta dal server".encode(), addr)
server.close()
Client UDP
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ("127.0.0.1", 8080)
client.sendto("Ciao server UDP!".encode(), server_address)
data, server = client.recvfrom(1024)
print("Risposta:", data.decode())
client.close()
🎯 Esercitazioni Pratiche
📚 Esercizio 1: Comunicazione UDP in un Istituto Scolastico
Un istituto scolastico desidera implementare un sistema di notifiche interne tra la segreteria e le classi. L’obiettivo è inviare avvisi importanti ai docenti senza utilizzare email o sistemi complessi.
Il sistema deve:
- La segreteria (server) rimane in ascolto su una porta specifica
- Un docente (client) invia comunicazioni alla segreteria
- Il server riceve il messaggio e lo registra
Esempio: “Avviso: la lezione di informatica inizierà alle 9:00 invece che alle 8:30.”
💡 Soluzione
Server:
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(("127.0.0.1", 65432))
while True:
message, addr = server.recvfrom(1024)
print(f"Messaggio da {addr}: {message.decode()}")
Client:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b"Avviso: le lezioni iniziano alle 9", ("127.0.0.1", 65432))
🎓 Esercizio 2: Server di Quiz in Tempo Reale
Scenario: Un professore invia domande a studenti che rispondono via UDP.
Server:
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(("127.0.0.1", 65432))
while True:
question = "Quanto fa 2+2?"
print("Inviando domanda...")
server.sendto(question.encode(), ("127.0.0.1", 65433))
Client:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.bind(("127.0.0.1", 65433))
data, addr = client.recvfrom(1024)
print(data.decode())
answer = input("Risposta: ")
client.sendto(answer.encode(), ("127.0.0.1", 65432))
🚀 Altre Lezioni
Continua il tuo percorso sui socket in Python
📚 Percorso Formativo
Completa il tuo percorso sui socket in Python