Skip to content

Client-server application. Sockets, threads, semaphores and shared memory.

Notifications You must be signed in to change notification settings

PushinSt/ClientServer-Socket-Threads-Semaphore-SharedMem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Тестовое задание (С++)

на позицию «Разработчик С++»

Задача:

Необходимо реализовать клиент-серверное приложение. Программы должны взаимодействовать с использованием сокетов.

Программа №1:
Должна состоять из двух потоков и одного общего буфера.

Поток 1.
Принимает строку, которую введет пользователь. Должна быть проверка, что строка состоит только из цифр и не превышает 64 символа. После проверки строка должна быть отсортирована по убыванию и все четные элементы заменены на латинские буквы «КВ». После данная строка помещается в общий буфер и поток должен ожидать дальнейшего ввода пользователя.

Поток 2.
Должен обрабатывать данные которые помещаются в общий буфер. После получения данных общий буфер затирается. Поток должен вывести полученные данные на экран, рассчитать общую сумму всех, которые являются численными значениями. Полученную сумму передать в Программу №2. После этого поток ожидает следующие данные.

Примечание по Программе №1: Взаимодействие потоков должно быть синхронизировано, поток №2 не должен постоянно опрашивать общий буфер. Механизм синхронизации не должен быть глобальной переменной.

Программа №2:
Ожидает данные от Программы №1. При получении данных происходит анализ из скольких символов состоит переданное значение. Если оно больше 2-ух символов и если оно кратно 32 выводит сообщение о полученных данных, иначе выводится сообщение об ошибке. Далее программа продолжает ожидать данные.

Примечание по заданию: Не обязательно все размещать в одном классе. Может быть разработана иерархия классов. Чем более функционален интерфейс класса, тем лучше.

Реализация:

Компиляция проиcходит с помощью стандартных команд (для удобства для каждой программы имеется свой make файл):

g++ prog1.cpp header.h -lpthread -o prog1
g++ prog2.cpp header.h -o prog2

После компиляции программы запускаются командами:

./prog1
./prog2

Описание работы программы №1 (клиент):

По условию задачи необходимо было использовать два потока. В качестве механизма синхронизации потока были выбраны семафоры, а для общего буфера - разделяемую память shared memory.

Описание работы программы №2 (сервер):

Для реализации клиент-серверного взаимодействия использовались сокеты. Сокет — это абстракция, которая позволяет работать с сетевыми ресурсами, как с файлами.

About

Client-server application. Sockets, threads, semaphores and shared memory.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published