La multidiffusion UDP fournit un mécanisme de communication un-à-plusieurs dans un réseau. Contrairement à la diffusion, une multidiffusion ne peut être reçue que par les abonnés à l'adresse de multidiffusion particulière qui les intéresse. Cette application implémente une multidiffusion de base de salle de discussion sur un réseau local.
Prudence
Tous les messages de la salle de discussion sont envoyés via des canaux de multidiffusion UDP non cryptés .
Pour l'interface utilisateur, ce projet utilise le framework egui. Dans le back-end, le runtime Tokio alimente toutes les charges de travail asynchrones : mise en réseau, synchronisation et planification des tâches.
Le thread principal exécute la logique de l’interface utilisateur. Sur un thread réseau distinct, le runtime Tokio gère les messages entrants et sortants. Les informations sont transmises entre les deux threads via des canaux.
Au démarrage, le back-end du réseau initialise un socket qui se lie à 0.0.0.0:3000
. Le socket rejoint ensuite l'adresse de multidiffusion 224.0.0.69:3000
. Pour empêcher plusieurs instances de l'application de se lier à la même adresse (sur le même appareil), l'indicateur SO_REUSEADDR
est désactivé. Toutes ces valeurs peuvent être modifiées via l'interface de ligne de commande.
Usage: udp-multicast-chat [-a <addr>] [-p <port>] [--reuse]
Networking options.
Options:
-a, --addr multicast address that the socket must join
-p, --port specific port to bind the socket to
--reuse whether or not to allow the UDP socket to be reused by
another application
--help display usage information
Pour exécuter le serveur
# Bind to `0.0.0.0:3000`, then join the multicast address
# `224.0.0.69:3000`, and launch the user interface.
cargo run --release -- --addr 224.0.0.69 --port 3000