Многоадресная рассылка UDP обеспечивает механизм связи «один ко многим» в сети. В отличие от широковещания, многоадресную рассылку могут принимать только те, кто подписан на конкретный интересующий адрес многоадресной рассылки. Это приложение реализует базовую многоадресную рассылку чата по локальной сети.
Осторожность
Все сообщения в чате передаются по незашифрованным многоадресным каналам UDP.
Для пользовательского интерфейса в этом проекте используется платформа egui. На внутренней стороне среда выполнения Tokio обеспечивает все асинхронные рабочие нагрузки: работу в сети, синхронизацию и планирование задач.
Основной поток выполняет логику пользовательского интерфейса. В отдельном сетевом потоке среда выполнения Tokio обрабатывает входящие и исходящие сообщения. Информация передается между двумя потоками по каналам.
При запуске серверная часть сети инициализирует сокет, который привязывается к 0.0.0.0:3000
. Затем сокет присоединяется к многоадресному адресу 224.0.0.69:3000
. Чтобы предотвратить привязку нескольких экземпляров приложения к одному и тому же адресу (на одном устройстве), флаг SO_REUSEADDR
отключен. Все эти значения можно настроить через интерфейс командной строки.
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
Чтобы запустить сервер
# 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