Простой консольный чат на C#
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена консольному чату на C# — TCP, сокеты, многопоточность и обмен сообщениями.
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
Простой консольный чат на C#
Простой консольный чат на C# — это учебное приложение, демонстрирующее базовые принципы сетевого взаимодействия между клиентом и сервером с использованием сокетов. Такое приложение помогает понять основы TCP-коммуникации, многопоточности и обработки входящих сообщений в реальном времени.
Архитектура приложения
Приложение состоит из двух компонентов:
- Сервер — принимает подключения от клиентов, пересылает полученные сообщения всем подключённым участникам.
- Клиент — подключается к серверу, отправляет текстовые сообщения и выводит полученные сообщения в консоль.
Оба компонента реализованы как консольные приложения на языке C# с использованием стандартной библиотеки System.Net.Sockets.
Сервер
Сервер использует TcpListener для прослушивания входящих соединений на заданном порту (например, 8888). Для каждого клиента создаётся отдельный поток, который читает входящие сообщения и рассылает их всем остальным подключённым клиентам.
Клиент
Клиент подключается к серверу по адресу 127.0.0.1 и порту 8888. Он запускает два потока:
- Один читает сообщения от сервера и выводит их в консоль.
- Другой ожидает ввода от пользователя и отправляет его на сервер.
Как использовать
- Запустите
ChatServer.exe— сервер начнёт ожидать подключений. - Запустите один или несколько экземпляров
ChatClient.exe. - Введите имя при первом запуске клиента.
- Пишите сообщения — они будут видны всем участникам чата.
Особенности реализации
- Кодировка: используется UTF-8 для корректной передачи кириллицы и специальных символов.
- Потокобезопасность: список клиентов защищён блокировкой
lock, чтобы избежать гонок при одновременном доступе из разных потоков. - Обработка отключения: при разрыве соединения клиент удаляется из списка, и сервер продолжает работать.
- Минимализм: нет авторизации, шифрования или хранения истории — только базовая функциональность.
Возможные улучшения
- Добавление уникальных идентификаторов пользователей.
- Поддержка команд (
/exit,/users). - Шифрование трафика через TLS.
- Сохранение истории чата.
- Графический интерфейс с использованием WPF или MAUI.