Skip to content

mySkillsKit/falco_networkchat

Repository files navigation

Курсовой проект "Сетевой чат"

Описание проекта

Вам нужно разработать два приложения для обмена текстовыми сообщениями по сети с помощью консоли (терминала) между двумя и более пользователями.

Первое приложение - сервер чата, должно ожидать подключения пользователей.

Второе приложение - клиент чата, подключается к серверу чата и осуществляет доставку и получение новых сообщений.

Все сообщения должны записываться в file.log как на сервере, так и на клиентах. File.log должен дополняться при каждом запуске, а также при отправленном или полученном сообщении. Выход из чата должен быть осуществлен по команде exit.

Требования к серверу

  • Установка порта для подключения клиентов через файл настроек (например, settings.txt);
  • Возможность подключиться к серверу в любой момент и присоединиться к чату;
  • Отправка новых сообщений клиентам;
  • Запись всех отправленных через сервер сообщений с указанием имени пользователя и времени отправки.

Требования к клиенту

  • Выбор имени для участия в чате;
  • Прочитать настройки приложения из файла настроек - например, номер порта сервера;
  • Подключение к указанному в настройках серверу;
  • Для выхода из чата нужно набрать команду выхода - “/exit”;
  • Каждое сообщение участников должно записываться в текстовый файл - файл логирования. При каждом запуске приложения файл должен дополняться.

Требования в реализации

  • Сервер должен уметь одновременно ожидать новых пользователей и обрабатывать поступающие сообщения от пользователей;
  • Использован сборщик пакетов gradle/maven;
  • Код размещен на github;
  • Код покрыт unit-тестами.

Шаги реализации:

  1. Нарисовать схему приложений;

Chat.jpg

3. Описать архитектуру приложений (сколько потоков за что отвечают, придумать протокол обмена сообщениями между приложениями);

Первое приложение - сервер чата

В модели клиент-сервер сервер имеет уникальный IP-адрес и номер порта. Клиент пытается установить соединение с сервером, используя этот номер порта и IP-адрес. Сервер слушает и принимает соединение. После того, как соединение установлено, Сервер может получить сообщение от клиента, а также ответить на сообщение клиенту. Поскольку в чате участвует несколько клиентов, которые могут отправлять сообщения друг другу, мы будем использовать потоки. Поток гарантирует, что каждый клиент получит свой собственный серверный сокет.

Сервер запускает бесконечный цикл, чтобы продолжать принимать входящие запросы. Когда приходит запрос, он назначает новый поток для обработки коммуникационной части. Сервер также сохраняет имя клиента в ArrayList, чтобы отслеживать подключенные устройства. ArrayList хранит объект потока, соответствующий текущему запросу.

Второе приложение - клиент чата

Для клиента используем класс Socket и инициируем подключение к серверу в обход IP-адреса и номера порта. Используем сканер для получения ввода от пользователя и отправки данных на сервер с помощью объекта PrintWriter. Используем класс Client и поток для прослушивания ответа от сервера без блокировки при чтении со сканера. Используем in BufferReader для получения информации от клиента.

  1. Создать репозиторий проекта на github;
  2. Написать сервер;
  3. Провести интеграционный тест сервера, например с помощью telnet;
  4. Написать клиент;
  5. Провести интеграционный тест сервера и клиента;
  6. Протестировать сервер при подключении нескольких клиентов;
  7. Написать README.md к проекту;
  8. Отправить на проверку.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages