Простой консольный чат на C#

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена консольному чату на C# — TCP, сокеты, многопоточность и обмен сообщениями.

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.

Теория и соседние материалы

Простой консольный чат на C#

Простой консольный чат на C# — это учебное приложение, демонстрирующее базовые принципы сетевого взаимодействия между клиентом и сервером с использованием сокетов. Такое приложение помогает понять основы TCP-коммуникации, многопоточности и обработки входящих сообщений в реальном времени.


Архитектура приложения

Приложение состоит из двух компонентов:

  • Сервер — принимает подключения от клиентов, пересылает полученные сообщения всем подключённым участникам.
  • Клиент — подключается к серверу, отправляет текстовые сообщения и выводит полученные сообщения в консоль.

Оба компонента реализованы как консольные приложения на языке C# с использованием стандартной библиотеки System.Net.Sockets.


Сервер

Сервер использует TcpListener для прослушивания входящих соединений на заданном порту (например, 8888). Для каждого клиента создаётся отдельный поток, который читает входящие сообщения и рассылает их всем остальным подключённым клиентам.


Клиент

Клиент подключается к серверу по адресу 127.0.0.1 и порту 8888. Он запускает два потока:

  • Один читает сообщения от сервера и выводит их в консоль.
  • Другой ожидает ввода от пользователя и отправляет его на сервер.

Как использовать

  1. Запустите ChatServer.exe — сервер начнёт ожидать подключений.
  2. Запустите один или несколько экземпляров ChatClient.exe.
  3. Введите имя при первом запуске клиента.
  4. Пишите сообщения — они будут видны всем участникам чата.

Особенности реализации

  • Кодировка: используется UTF-8 для корректной передачи кириллицы и специальных символов.
  • Потокобезопасность: список клиентов защищён блокировкой lock, чтобы избежать гонок при одновременном доступе из разных потоков.
  • Обработка отключения: при разрыве соединения клиент удаляется из списка, и сервер продолжает работать.
  • Минимализм: нет авторизации, шифрования или хранения истории — только базовая функциональность.

Возможные улучшения

  • Добавление уникальных идентификаторов пользователей.
  • Поддержка команд (/exit, /users).
  • Шифрование трафика через TLS.
  • Сохранение истории чата.
  • Графический интерфейс с использованием WPF или MAUI.