Операционные системы ← ЛабораторныеЛабораторная работа №3

Сокеты, многопоточный сервер

Требуется изучить интерфейс одной из библиотек, реализующих многопоточность: pthreads, Plan 9 libthreads и др. и реализовать сервер, заданный вариантом.

Требования по протоколу аналогичны требованиям в лабораторной №2, детали протоколов разработать самостоятельно.

Варианты:

  1. Сервер обмена мгновенными сообщениями.
  2. Сервер обмена сообщениями в режиме офлайн.
  3. Игровой сервер. Клиенты играют в царя горы друг против друга.

Пояснения к заданиям

Во первом варианте достаточно реализовать простейший протокол: для приема и передачи сообщений клиент должен представиться (команда hello <name> ), а потом передавать сообщения командой send <recipient> <message> . Сообщения однострочные, передаются адресату, если он присоединен. При отсутствии адресата среди присоединившихся клиентов, отправляющему посылается сообщение об ошибке. Предусмотреть возможность просмотра списка присутствующих на сервере участников (команда who ). По команде bye сервер должен разрывать соединение.

Во втором варианте протокол аналогичен протоколу из первого варианта, но сообщения не посылаются адресату сразу, а записываются в специальные файлы (почтовые ящики). Команда who необязательна. Для чтения сообщения предусмотреть команду receive, по которой сервер выдает накопившиеся сообщения и опустошает почтовый ящик.

В третьем варианте игра заключается в том, чтобы «сбросить с горы» всех противников. Каждый участник представляется командой hello <name>, после чего становится виден остальным участникам (по команде who). Командой kill <name> участник отсоединяет от сервера (сбрасывает с горы) противника. Выигрывает тот, кто кому удалось избавиться от всех противников.