Нужна помощь с клиент-серверными программами на C под Linux
1.1 Сервер создает очередь POSIX, располагает там строку “Hello”. Клиент обращается к очереди, забирает строку “Hello” и отвечает строкой “Hi”. Сервер читает эту строку и выводит ее на экран. Эта программа практически написана, но, видимо, есть ошибка. Отправлю свой вариант.
1.1.2 Реализовать тот же функционал с помощью System V.
1.2 Программа создает сегмент разделяемой памяти, вторая подключается к нему. Первая пишет слово “Hello”, вторая читает, отвечает “Hi”, первая выводит на экран. Делаем через примитивы синхронизации - семафоры. Эту написать с нуля.
1.2.2 Реализовать тот же функционал с помощью System V.
2.1 Многопроцессная система написания сервера
Слушающий (главный) сервер, получив запрос от клиента, создает поток, в котором создает новый сервер и подключает к нему клиента (передает клиенту информацию для подключения к новому серверу). В случае UDP создается новый сокет и новая привязка. Эту привязку слушающий сервер отправляет клиенту. В случае TCP сделали accept в слушающем сервере и в новый процесс/поток передали дескриптор отщепленного клиента. А слушающий сервер уходит в accept слушать новую заявку от нового клиента. Как только приходит новый клиент, выходим из accept, получаем новый дескриптор, передаем его процессу/ потоку и снова уходим в accept ждать запрос от других.
2.2 Та же схема, что в 2.1. При запуске случающий (главный) сервер порождает пул заранее готовых процессов/потоков с обслуживающими серверами. Слушающий сервер следит за пулом обслуживающих серверов и при подключении клиента идентификатор свободного сервера возвращает клиенту, клиент подключается к нему. При количестве клиентов больше количества обслуживающих серверов создается новая порция обслуживающих серверов. Если количество клиентов уменьшается, лишние процессы уничтожаются. Для уведомления слушающего сервера можно использовать массив (только для потоков - слушающий сервер будет искать в массиве 0 и перераспределять на него нагрузку), канал, очереди сообщений, сигналы. Для TCP, UDP.
2.3 Производитель-потребитель.
Запускаем слушающий сервер, он создает очередь обслуживания и пул обслуживающих серверов. Есть клиент, он посылает заявку серверу, сервер ставит заявку в очередь запросов. В это время любой свободный сервер забирает заявку, решает ее, ставит в очередь ответов, слушающий сервер забирает ее оттуда и передает ее клиенту. Либо обслуживающий сервер сам может передать заявку клиенту обратно (для этого в очереди запросов должен быть идентификатор клиента). Для TCP, UDP.
2.4 Схема 2.3, но с мультиплексированием (предпочтительно epoll), при которой каждый из обслуживающих процессов может обслуживать сразу несколько клиентов. Для TCP, UDP.