O multicast UDP fornece um mecanismo para comunicação um-para-muitos em uma rede. Ao contrário da radiodifusão, um multicast só pode ser recebido por aqueles inscritos no endereço multicast específico de interesse. Este aplicativo implementa um multicast básico de sala de bate-papo em uma rede local.
Cuidado
Todas as mensagens na sala de bate-papo são enviadas por canais multicast UDP não criptografados .
Para a interface do usuário, este projeto usa o framework egui. No back-end, o tempo de execução do Tokio potencializa todas as cargas de trabalho assíncronas: rede, sincronização e agendamento de tarefas.
O thread principal executa a lógica da interface do usuário. Em um thread de rede separado, o tempo de execução do Tokio lida com mensagens recebidas e enviadas. As informações são passadas entre os dois threads por meio de canais.
Na inicialização, o back-end da rede inicializa um soquete que se liga a 0.0.0.0:3000
. O soquete então se junta ao endereço multicast 224.0.0.69:3000
. Para evitar que várias instâncias do aplicativo sejam vinculadas ao mesmo endereço (no mesmo dispositivo), o sinalizador SO_REUSEADDR
está desabilitado. Todos esses valores podem ser ajustados por meio da interface de linha de comando.
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
Para executar o servidor
# 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