Технологии компьютерных сетей весна 2018 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Текст задания (incomplete))
(Задание 1)
Строка 7: Строка 7:
 
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]
 
* [http://kspt.icc.spbstu.ru/course/networks Слайды с лекций Политеха]
  
== Практика Алексюк ==
+
== Практика ==
  
Преподаватель: Алексюк Артем ('''aleksyuk@kspt.icc.spbstu.ru''')
+
Преподаватель: Алексюк Артем Олегович ('''aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com''')
 +
 
 +
[https://t.me/joinchat/ETSi-A1ZlsxHtWZnWWmX_Q Telegram-группа] для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki.
  
 
== Задания ==
 
== Задания ==
  
=== Задание 1. Простейший TCP-клиент/сервер ===
+
Порядок выполнения:
 +
# Сделать форк [https://github.com/h31/ProgrammingLabTask1 репозитория] на GitHub.
 +
# Для каждого задания сделать отдельную ветку (branch) в своём репозитории.
 +
# Работать над кодом, сохраняя файлы в соответствующей заданию директории.
 +
# В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request.
 +
# Исправить замечания преподавателя.
 +
# Дождаться статуса ''Approved'' у вашего Pull Request-а.
 +
 
 +
=== Задание 1. Простейший TCP-клиент/сервер (мессенджер) ===
 +
 
 +
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат, мессенджер). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента должен быть собственный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Пример вывода: <code><4:20> [Peter] Hello!</code>
 +
 
 +
Клиент должен иметь консольный интерфейс. Параметры работы клиент принимает через аргументы командной строки в следующем порядке: адрес сервера, порт, никнейм. Функции, которые '''не''' требуются от сервера и клиента:
 +
* Регистрация клиентов, логины-пароли.
 +
* Хранение истории переписки.
 +
* Проверка уникальности никнеймов.
 +
* Обработка временных зон.
 +
* Работа с языками, отличными от английского.
 +
 
 +
Чтобы принимаемые (входящие) сообщения не мешали пользователю вводить свой текст, предлагается включать отдельный режим отправки сообщения, например, при нажатии клавиши ''m''. В этом режиме пользователь вводит своё сообщение, новые сообщения от других пользователей временно не отображаются, после отправки сообщения (по Enter) режим автоматически отключается.
 +
 
 +
Предполагается, что клиент и сервер будут созданы на основе шаблона, находящегося в директории ''tcp_template'' репозитория. Шаблон заведомо неполный, в нем необходимо устранить следующие проблемы:
 +
* В коде сервера отсутствуют вызовы для корректного закрытия сокетов.
 +
* Сервер завершается после обработки первого же запроса.
 +
* Сервер способен работать одновременно только с одним клиентом.
 +
* Сервер не знает о длине получаемых сообщений.
 +
 
 +
Язык программирования - Си. Для сборки кода используйте утилиту CMake. Для организации работы с несколькими клиентами используйте потоки, pthreads в Linux/BSD/macOS и WinAPI в Windows. Не забывайте использовать примитивы синхронизации для блокировки общих между несколькими клиентами ресурсов.
  
Необходимо разработать простейшую систему обмена мгновенными сообщениями (чат). Чат-сервер должен принимать сообщения от клиентов и рассылать полученные сообщения всем подключенным клиентам. У каждого клиента есть собственный уникальный никнейм, задаваемый пользователем. При получении сообщения от другого клиента, на экран должно выводиться время получения сообщения, никнейм пользователя-отправителя и текст сообщения. Чтобы принимаемые сообщения не мешали пользователю вводить свой текст, предлагается
+
Результатом выполнения задания должно быть 4 программы, клиент и сервер под Windows и Linux/BSD/macOS, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.
  
Язык программирования - Си. Для сборки системы
+
Крайний срок выполнения: 18 марта. Обратите внимание, что замечания должны быть исправлены до дедлайна.

Версия 22:24, 28 февраля 2018

Лекции

Преподаватель: Ицыксон Владимир Михайлович (vlad@ftk.spbstu.ru, itsykson@gmail.com)

Практика

Преподаватель: Алексюк Артем Олегович (aleksyuk@kspt.icc.spbstu.ru, artyom.aleksyuk@gmail.com)

Telegram-группа для взаимодействия в ходе курса. Участвовать не обязательно, но очень желательно. В группе будут выкладываться объявления по курсу, кроме того, преподаватель будет по мере возможности отвечать там на вопросы. Основные объявления будут дублироваться в SeWiki.

Задания

Порядок выполнения:

  1. Сделать форк репозитория на GitHub.
  2. Для каждого задания сделать отдельную ветку (branch) в своём репозитории.
  3. Работать над кодом, сохраняя файлы в соответствующей заданию директории.
  4. В тот момент, когда вы будете готовы показать свой код (для проверки или консультации), сделать Pull Request.
  5. Исправить замечания преподавателя.
  6. Дождаться статуса 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, и описание вашего прикладного протокола. Протокол можно описать либо с помощью текста, либо с помощью изображения (таблицы, схемы и т.д.). Примеры описания протоколов - в слайдах лекций. Описание должно быть в такой степени подробным, чтобы по нему можно было написать альтернативную совместимую реализацию клиента/сервера.

Крайний срок выполнения: 18 марта. Обратите внимание, что замечания должны быть исправлены до дедлайна.