Лабораторная работа Многопользовательские приложения на C# Реализуйте распределенный сервис передачи сообщений, имеющий топологию кольца. В сети работают несколько приложений, TCP-соединения между которыми образуют кольцо. Каждое приложение связано только с двумя узлами: следующим и предыдущим. Все приложения имеют идентификаторы, и каждое при отправке данных указывает идентификатор получателя. Данные и идентификатор адресата вводятся пользователем. Каждое приложение поддерживает два постоянных TCP-соединения: с предыдущим и со следующим узлами. В соединении со следующим узлом текущий узел является клиентом (т.е. он подключался к порту следующего), в соединении с предыдущим – сервером (т.е. он прослушивал некоторый порт и подключил предыдущий узел). Список приложений, входящих в кольцо, статичен. Он составляется заранее и все участники кольцевого обмена данными после нажатия кнопки «Подключиться к кольцу» считывают его из текстового файла. В текстовом файле храниться таблица с тремя столбцами: ID приложения, IPадрес, прослушиваемый порт подключения предыдущего узла. Перед нажатием кнопки «Подключиться к кольцу» пользователь должен заполнить текстовое поле «ID текущего приложения».