Skip to content
This repository has been archived by the owner on Sep 9, 2021. It is now read-only.

Антропова А. и Романов А. 3530901/70201 lab3_2 #89

Closed
wants to merge 10 commits into from

Conversation

Lexcorp3439
Copy link

Лабораторная работа №3: Калькулятор

Выполнили: Антропова А.А (клиент) и Романов А.Л. (сервер) гр 3530901/70201

Задание:

Разработать приложение-сервер «Удаленный калькулятор»,
позволяющее по запросу выполнять математические операции, и удаленный клиент для сервера.

  1. Быстрые операции: + - / *
  2. Долгие операции: факториал и квадратный корень

Вычисление «долгих» математических операций (факториал, квадратный корень) с последующей отложенной посылкой результата
клиенту (отдельная операция, инициируемая сервером).

Подготовка:

Для запуска необходимо скачать Python 3.x

Протокол

Есть 2 формата пакетов: Operation и Response.
Operation - пакет отправляемый от клиентов к серверу.
Response - пакет отправляемый от сервера клиентам.

Operation

Operation ID (2 байта) Operation type (2 байта) Operand 1 (4 байта) Operand 2 (4 байта) Timeout (4 байта)
  • Operation ID - идентификатор операции (счетчик ведется на клиенте)
  • Operation type - тип операции (+ - / * ! sqrt)
  • Operand 1 - первый операнд
  • Operand 2 - второй операнд (не используется для «долгих» операций)
  • Timeout - предел времени исполнения операции

Response

Operation ID (2 байта) Result code (2 байта) Result (8 байт) Message (40 байт)
  • Operation ID - идентификатор операции (счетчик ведется на клиенте)
  • Result code - код результат (ok:0, timeout:1, err:2)
  • Result - результат операции
  • Message - сообщение, описывающее результат (передается при ошибке)

Клиент

Запуск

При первом запуске клиента необходимо ввести команду для загрузки зависимостей:

python3 -m pip install -r requirements.txt

Затем можно вводить команду для запуска клиента:

python3 -m src.lab3.calculator.client_runner 127.0.0.1 1237
  • Первый аргумент (a.b.c.d) - адрес клиента (обязательный параметр)
  • Второй аргумент (p) - порт клиента (обязательный параметр)

Пример работы:

Добро пожаловать в консольный калькулятор! 
Поддерживаемые быстрые опреации: +-*/;
Поддерживаемые медленные операции: sqrt, !

Примеры медленных операций: 
1. sqrt(5)
2. sqrt(4.0) t=5
3. 4!
4. 5! t=6
        
Примечание: 
Медленные операции выполняются только над ПОЛОЖИТЕЛЬНЫМИ числами
Для медленных операций через атрибут 't=' можно указать таймаут операции. Если он не указан, t=0.1
        
[1] Введите выражение: 5+5
[1] Запрос успешно отправлен на сервер!
[1] Ответ: 10.0
[2] Введите выражение: sqrt(5) t=5
[2] Запрос успешно отправлен на сервер!
[3] Введите выражение: 6+6
[3] Запрос успешно отправлен на сервер!
[2] Ответ: 2.23606797749979
[4] Введите выражение: 
[3] Ответ: 12.0
[4*] Введите выражение: 3!
[4] Запрос успешно отправлен на сервер!
[5] Введите выражение: 
[4] Время выполнения операции превысило заданный таймаут! 
Попробуйте повторить операцию, увеличив таймаут.
[5*] Введите выражение: 
Клиент успешно остановлен!

Сервер

Запуск

Для запуска сервера необзодимо ввести команду в консоль:

python3 -m src.lab3.calculator.server_runner 127.0.0.1 1237
  • Первый аргумент (a.b.c.d) - адрес сервера (обязательный параметр)
  • Второй аргумент (p) - порт сервера (обязательный параметр)

Важно:

На сервер специально выставлена задержка на медленных операциях в 2 секунды,
чтобы можно было протестировать работу долгий операций, а также таймауты

Пример работы: (на основе запросов из примера работы клиента)

Listening for connections on 127.0.0.1:1236...
<272755962>: Accepted new connection from 127.0.0.1:51563
<272773892>: Accepted new connection from 127.0.0.1:51564
<272755962> [1]: operation=0 operand1=5.0 operand2=5.0
<272755962> [1]: code=0 result=10.0
<272755962> [2]: operation=4 operand1=5.0 operand2=0.0
<272755962> [2]: code=0 result=2.23606797749979
<272755962> [3]: operation=0 operand1=6.0 operand2=6.0
<272755962> [3]: code=0 result=12.0
<272755962> [4]: operation=5 operand1=3.0 operand2=0.0
<272755962> [4]: code=1 result=1
<272755962>: Closed connection
<272773892>: Closed connection

@wrbbz
Copy link
Contributor

wrbbz commented Jan 17, 2021

  • По какому принципу ответ подсвечивается красным? Если ввести 5!, то пришедший ответ подсветится красным. Если ввести 5! и не дожидаясь ответа ввести, например, 5+5, то будет подсвечен ответ на последнюю операцию (исправить)
  • Наверное, раз мы не дожидаемся ответа от сервера на долгие операции, есть смысл писать на что мы получили ответ. Например, не Ответ: 120.0 , а 5! = 120, например (исправлять не обязательно)
  • Наверное, стоит предупредить пользователя, что медленные операции не выдают ответ сразу, а получают от сервера через некоторое время
  • Есть смысл ответ для факториала предствлять в целочисленном виде (исправлять не обязательно)
  • Зачем тут дополнительная зависимость? Просто для придания цвета тексту? Для этого можно использовать коды цвета (исправлять не обязательно)
  • Порт после завершения сервера не освобождается. В том случае, когда сервер завершен раньше клиентов (исправить)

@Lexcorp3439
Copy link
Author

Поправил высвобождение портов.

@antropovaa
Copy link

  • ошибка с цветом ответа
  • 5! = 120
  • предупреждение пользователя
  • ответ для факториала в целочисленном виде

Дополнительная зависимость для удобства + хотела попробовать поработать с зависимостями

@wrbbz
Copy link
Contributor

wrbbz commented Jan 17, 2021

+ хотела попробовать поработать с зависимостями

Это хорошо. Учебные проекты для этого и нужны

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Зачтено Третья лабораторная Задания из методички
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants