Реализуйте клиент-серверное взаимодействие, использующее для передачи данных протокол TCP.
Клиент должен принимать два или более аргументов - имя хоста и имена каталогов. Клиент устанавливает TCP соединение с сервером по указанному имени хоста, после чего запрашивает у сервера содержимое указанных каталогов. Полученный список выводится на стандартный поток вывода.
Сервер должен обеспечивать возможность одновременного обслуживания нескольких клиентов. Протокол взаимодействия с сервером - текстовый. Необходимо предусмотреть возможность взаимодействия с сервером используя команду telnet.
Варианты:
Вариант | Модель обслуживания | Размер пула | |
1 | Одно соединение - один подпроцесс | На каждое соединение создаётся новый подпроцесс | N/A |
2 | Для новых соединений используются заранее запущенные процессы из пула | Фиксированный | |
3 | Динамический. Если количество незанятых обслуживанием клиентов подпроцессов стало меньше N, должны создаваться новые, если стало больше K, "лишние" должны завершаться | ||
4 | Одно соединение - один поток (нить) | На каждое соединение создаётся новый поток | N/A |
5 | Для новых соединений используются заранее запущенные потоки из пула | Фиксированный | |
6 | Динамический. Если количество незанятых обслуживанием клиентов потоков стало меньше N, должны создаваться новые, если стало больше K, "лишние" должны завершаться |
Опционально:
Клиент при выводе должен сортировать содержимое каталогов по имени.
При выполнении работы могут быть полезны следующие man страницы:
opendir(3C), readdir(3C), closedir(3C), fork(2), pthread_create(3C),
socket(3SOCKET), connect(3SOCKET), listen(3SOCKET), accept(3SOCKET),
bind(3SOCKET).
Все файлы (исходный код, Makefile, исполнямые и объектные файлы, ...) должны быть в одном каталоге, для компиляции файлов должен быть написан Makefile, позволяющий перекомпилировать только изменённые файлы.