Необходимо реализовать программу «IPv4-чат», обменивающуюся текстовыми широковещательными (IPv4 UDP broadcast) сообщениями по сегменту локальной сети, с копиями запущенными на других машинах, физически подключенных к одному логическому сегменту сети.
Входные параметры для программы передаются в качестве обязательных опций командной строки. Список параметров включает IPv4 адрес и номер порта, на котором программа будет ожидать получение сообщений от других своих копий, выполняющихся на других машинах одного сегмента сети. И сразу после запуска, пользователю предлагается ввести свой nickname. Программа состоит из двух потоков (POSIX Threads):
- первый поток «слушает» socket (recvfrom) и после получения UDP-датаграммы выводит на экран IPv4 адрес отправителя, его nickname и полученное сообщение.
- второй поток ожидает от пользователя ввода текстового сообщения, с ограничением в 1007 байт. После окончания ввода, вместе с введённым текстовым сообщением и nickname, формирует и отправляет UDP-датаграмму (sendto) на широковещательный (broadcast) IPv4 адрес 255.255.255.255 и порт (указанный в опциях командной строки).
Сборка проекта происходит в docker-контейнере. Для этого созданы два скрипта: run_first.sh и run_second.sh, которые через команду docker run в интерактивном режиме запускают контейнеры c заданными ip-адресами 172.18.0.11 и 172.18.0.22 в общей виртуальной подсети.
При запуске скриптов нужно передать два аргумента для дальнейшей работы docker:
- порт (как требовалось в ТЗ)
- имя сети (создастся сеть с подсетью (subnet) 172.18.0.0/16; но если такая сеть уже существует, то следует ввести имя уже существующей сети)
Имя пользователя должно быть длиной до 20 символов и без пробелов. Чтобы выйти из чата, пользователю необходимо ввести ключевое слово ‘/STOP_CHAT’.