UDP-Multicast bietet einen Mechanismus für die Eins-zu-Viele-Kommunikation in einem Netzwerk. Im Gegensatz zum Broadcasting kann ein Multicast nur von denjenigen empfangen werden, die die jeweilige interessierende Multicast-Adresse abonniert haben. Diese Anwendung implementiert einen einfachen Chatroom-Multicast über ein lokales Netzwerk.
Vorsicht
Alle Nachrichten im Chatroom werden über unverschlüsselte UDP-Multicast-Kanäle gesendet.
Für die Benutzeroberfläche verwendet dieses Projekt das egui-Framework. Im Back-End steuert die Tokio-Laufzeitumgebung alle asynchronen Arbeitslasten: Netzwerk, Synchronisierung und Aufgabenplanung.
Der Hauptthread führt die Benutzeroberflächenlogik aus. In einem separaten Netzwerkthread verarbeitet die Tokio-Laufzeit ein- und ausgehende Nachrichten. Informationen werden über Kanäle zwischen den beiden Threads weitergegeben.
Beim Start initialisiert das Netzwerk-Back-End einen Socket, der an 0.0.0.0:3000
bindet. Der Socket fügt sich dann der Multicast-Adresse 224.0.0.69:3000
hinzu. Um zu verhindern, dass sich mehrere Instanzen der Anwendung an dieselbe Adresse (auf demselben Gerät) binden, ist das Flag SO_REUSEADDR
deaktiviert. Alle diese Werte können über die Befehlszeilenschnittstelle angepasst werden.
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
Um den Server auszuführen
# 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