📡

Socket UDP in Python

Comunicazione veloce senza connessione persistente

🧠 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.

Socket UDP

🖥️ Comandi per il Server UDP

1

Creazione del socket UDP

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  • socket.AF_INET specifica IPv4
  • socket.SOCK_DGRAM indica socket UDP

2

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 IP
  • 8080 è la porta di comunicazione

3

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

4

Invio risposta

server.sendto("Risposta dal server".encode(), addr)
  • Usa .encode() per convertire in bytes
  • addr è l’indirizzo del client

5

Chiusura socket

server.close()
  • Chiude il socket e libera le risorse

💻 Comandi per il Client UDP

1

Creazione del socket UDP

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

2

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

3

Ricezione risposta

data, server = client.recvfrom(1024)
print("Risposta:", data.decode())

4

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

Torna in alto