Технологии компьютерных сетей весна 2018 — различия между версиями
(Задание 1) |
(Исправления) |
||
Строка 19: | Строка 19: | ||
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории. | # Для каждого задания сделать отдельную ветку (branch) в своём репозитории. | ||
# Работать над кодом, сохраняя файлы в соответствующей заданию директории. | # Работать над кодом, сохраняя файлы в соответствующей заданию директории. | ||
− | # В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request. | + | # В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в '''мою''' ветку master. |
# Исправить замечания преподавателя. | # Исправить замечания преподавателя. | ||
# Дождаться статуса ''Approved'' у вашего Pull Request-а. | # Дождаться статуса ''Approved'' у вашего Pull Request-а. | ||
Строка 28: | Строка 28: | ||
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента: | Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента: | ||
− | * Регистрация клиентов, | + | * Регистрация клиентов, авторизация, аутентификация. |
* Хранение истории переписки. | * Хранение истории переписки. | ||
* Проверка уникальности никнеймов. | * Проверка уникальности никнеймов. | ||
Строка 46: | Строка 46: | ||
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера. | Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера. | ||
− | Крайний срок выполнения: 18 марта. | + | [https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ Бесплатная виртуальная машина] с триальной версией Windows. |
+ | |||
+ | Крайний срок выполнения: 18 марта в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя '''можно''' исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий. | ||
+ | |||
+ | Текущий план: | ||
+ | * До 18 марта - первое задание (2,5 недели). | ||
+ | * До 28 марта - второе задание (1,5 недели). | ||
+ | * До 25 апреля - первая часть третьего задания (4 недели). | ||
+ | * До 23 мая - вторая часть третьего задания (4 недели). |
Версия 18:22, 2 марта 2018
Лекции
Преподаватель: Ицыксон Владимир Михайлович (vlad@ftk.spbstu.ru, itsykson@gmail.com)
Практика
Преподаватель: Алексюк Артем Олегович (aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com)
Telegram-группа для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki.
Задания
Порядок выполнения:
- Сделать форк репозитория на GitHub.
- Для каждого задания сделать отдельную ветку (branch) в своём репозитории.
- Работать над кодом, сохраняя файлы в соответствующей заданию директории.
- В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request в мою ветку master.
- Исправить замечания преподавателя.
- Дождаться статуса Approved у вашего Pull Request-а.
Задание 1. Простейший TCP-клиент/сервер (мессенджер)
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: <4:20> [Peter] Hello!
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые не требуются от сервера и клиента:
- Регистрация клиентов, авторизация, аутентификация.
- Хранение истории переписки.
- Проверка уникальности никнеймов.
- Обработка временных зон.
- Работа с языками, отличными от английского.
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши m. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории tcp_template репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:
- В коде сервера отсутствуют вызовы для корректного закрытия сокетов.
- Сервер завершается после обработки первого же запроса.
- Сервер способен работать одновременно только с одним клиентом.
- Сервер не знает о длине получаемых сообщений.
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.
Бесплатная виртуальная машина с триальной версией Windows.
Крайний срок выполнения: 18 марта в 23:59. К этому времени необходимо выполнить задание, выложить его на GitHub и сделать Pull Request. Замечания преподавателя можно исправлять после дедлайна, но учтите, что в таком случае вы будете отнимать у себя время на выполнение следующих заданий.
Текущий план:
- До 18 марта - первое задание (2,5 недели).
- До 28 марта - второе задание (1,5 недели).
- До 25 апреля - первая часть третьего задания (4 недели).
- До 23 мая - вторая часть третьего задания (4 недели).