Задание №2
Задание
Реализовать клиентскую и серверную часть приложения. Клиент запрашивает у сервера выполнение математической операции, параметры, которые вводятся с клавиатуры. Сервер обрабатывает полученные данные и возвращает результат клиенту. Вариант - Поиск площади трапеции.
Обязательно использовать библиотеку socket
Реализовать с помощью протокола TCP
server.py
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("127.0.0.1", 8080))
server_socket.listen(10)
server_socket.settimeout(0.5)
try:
while True:
try:
client_socket, address = server_socket.accept()
client_socket.send(
"Введите через запятую без пробелов значения a, b и c, "
"где a и b - основания трапеции, а h - высота.".encode()
)
data = client_socket.recv(1024).decode()
a, b, h = (float(num) for num in data.split(","))
area = (a + b) / 2 * h
client_socket.send(f"Площадь трапеции: {area}".encode())
except socket.timeout:
pass
except KeyboardInterrupt:
server_socket.close()
- Создаём объект сокета с помощью
socket.socket(socket.AF_INET, socket.SOCK_DGRAM), гдеsocket.AF_INETотвечает за IPv4, аsocket.SOCK_STREAMза протокол TCP. - Задаём
.timeout, чтобы дать возможность программе поймать Ctrl+C. - С помощью
.acceptпринимаем соединение клиента. - С помощью
.sendотправляем пользователю информационное сообщение о требуемом вводе. - С помощью
.recvполучаем данные, проводим вычисления и отправляем результат обратно так же с помощью.send. - Оборачиваем полученный код в
try-except socket.timeout, чтобы таймаут не завершил работу сервера. - Оборачиваем этот
try-exceptв циклwhile True, чтобы сервер не прекратил работу после обработки первого запроса. - Оборачиваем цикл в
try-except KeyboardInterrupt, чтобы можно было завершить работу сервера по нажатию на Ctrl+C.
client.py
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("127.0.0.1", 8080))
question = client_socket.recv(1024).decode()
print(question)
abh = input()
client_socket.send(abh.encode())
result = client_socket.recv(1024).decode()
print(result)
client_socket.close()
- Создаём объект сокета с помощью
socket.socket(socket.AF_INET, socket.SOCK_DGRAM), гдеsocket.AF_INETотвечает за IPv4, аsocket.SOCK_STREAMза протокол TCP. - Подключаемся к серверу через
.connect. - С помощью
.recvполучаем информационное сообщение. - Через
input()вводим необходимые значения, перечисленные через запятую. - Отправляем на сервер с помощью
.sendи получаем результат с помощью.recv. - Закрываем соединение с помощью
.close.
