Разработка корпоративного клиент-серверного чата для локальной сети предприятия
Автор: Письмак Д.И., Бегалин А.Ш.
Журнал: Теория и практика современной науки @modern-j
Рубрика: Математика, информатика и инженерия
Статья в выпуске: 5 (35), 2018 года.
Бесплатный доступ
Статья посвящена описанию процесса разработки и использования корпоративного клиент-серверного чата для локальной сети предприятия. Программа реализована в среде Visual Studio и представляет собой приложение на основе Windows Forms. В программе имеются функции обмена общими, приватными, групповыми сообщениями, регистрация групп и пользователей, панель администрирования.
Программа, чат, мессенджер, пользователи
Короткий адрес: https://sciup.org/140273215
IDR: 140273215
Текст научной статьи Разработка корпоративного клиент-серверного чата для локальной сети предприятия
Корпоративный клиент-серверный чат для локальной сети предприятия позволяет обмениваться сообщениями зарегистрированным пользователям в трех видах чатов (публичный, приватный, групповой) и являет собой 2 приложения (клиентское и серверное) написанные в среде Visual Studio на языке C# с использованием Windows Forms.
В основе локального чата лежит технология TCP-соединений, что гарантирует доставку сообщений до конечного адресата, в отличии UDP протокола. В качестве адреса, однозначно определяющего, серверные и клиентские машины в сети используется адрес-IPv4, как наиболее распространенный по состоянию на 2018 год. Программа разделена на 2 части: клиенсткую и серверную, с целью распределения нагрузки и потоков передачи сообщений. Интерфейс клиентского приложения выглядит в соответствии с рисунком 1.

Рисунок 1. Клиентский интерфейс
Класс CorpServer содержит в себе следующие переменные:
htUsers – хэш-таблица, хранящая в себе до 30 объектов включающая в себя имя пользователя в качестве ключа и соединение в качестве данных htConnections – хэш-таблица, хранящая в себе до 30 объектов, включающая в себя соединение в качестве ключа и имя пользователя в качестве данных
Данные переменные используется для отслеживания и проверки текущих соединений на достоверность. Хэш-таблицы в данном случае являются более оптимальными в отличие от простых массивов, так как поддерживают операции добавления/удаления записей в ходе работы и позволяют проводить поиск записей по индексу, что значительно ускоряет работу с ними.
Переменная очереди (Queue) Banned хранит в себе список пользователей чье подключение раннее было ограничено администратором и используется для выполнения административных функций в дальнейших методах.
Описание рассылки сообщений
Для работы с соединениями создается отдельный поток (Thread) с каждым клиентом и работа с клиентами осуществляется поочередно, с использованием отдельных потоков в цикле. Данный способ реализован следующим образом:
public static void SendCorpChatMessages(string Message)
{
StreamWriter swSenderSender;
e = new StatusChangedEventArgs(Message);
OnStatusChanged(e);
// массив юзеров, определение количества
// помещает всех TCPклиентов в массив
{
// кидаем каждому сообщение try
{
{ continue;
}
// отсылает сообщение выбранному юзеру swSenderSender = new StreamWriter(tcpClients[i].GetStream());
swSenderSender.WriteLine(Message);
swSenderSender = null;
Метод SendCorpChatMessages используется для рассылки сообщений/команд от сервера к клиенту. В первую очередь создается объект для записи данных в поток StreamWriter. В случае возникновения какого либо события (как появление нового сообщения команды) создается массив соединений tcpClients, размером, определяемым количеством записей в htUsers и значениями непосредственно из хэш-таблицы htUsers. Затем, запускается цикл и в случае если соединение соответствует всем условиям, то в поток вносится запись, содержащая в себе сообщение/команду, после чего потом закрывается и очищается, затем цикл переходит к следующему соединению. В случае если соединение отсутствует, однако запись о пользователе есть в хэш-таблице, значит пользователь удаляется их хэш-таблицы и массива tcpClients.
Список литературы Разработка корпоративного клиент-серверного чата для локальной сети предприятия
- Уведомление о событии в приложении, 2017. - режим доступа к источнику: https://stackoverflow.com/questions/15085970/implement-buzz-feature.
- Многопоточность в клиент-серверных приложениях/ Metanit, 2015. - режим доступа к источнику: https://metanit.com/sharp/net/4.3.php.