ЛР 1. Сокеты
1. Задание 1: Взаимодействие по протоколу UDP
Цель: Разработать простейший клиент-серверный сервис для демонстрации передачи данных в формате дейтаграмм с использованием протокола UDP (User Datagram Protocol).
Описание:
Реализация включала создание двух скриптов (task1_server.py и task1_client.py). Ключевой особенностью стало использование сокета типа SOCK_DGRAM и методов sendto() и recvfrom(). Эти методы позволили клиенту отправить сообщение на заданный адрес сервера, не требуя предварительного установления соединения. Сервер принял дейтаграмму, определил адрес отправителя и отправил ответную дейтаграмму, используя этот адрес.
Вывод: Работа успешно продемонстрировала принцип функционирования протокола UDP: быстрая, не требующая подтверждения и не гарантирующая доставку связь, идеальная для приложений, где важна скорость, а не надежность.
2. Задание 2: Решение квадратного уравнения по TCP
Цель: Разработать надежный клиент-серверный сервис, использующий протокол TCP, для вычисления корней квадратного уравнения (ax^2 + bx + c = 0) на стороне сервера.
Описание:
Использовался сокет типа SOCK_STREAM. Клиент устанавливал соединение методом s.connect(), отправлял строку с коэффициентами. Сервер принимал соединение методом s.accept(), парсил входную строку и вызывал функцию для решения уравнения. Функция solve_quadratic_min обрабатывала все случаи дискриминанта ($D > 0$, $D = 0$, $D < 0$), используя модуль cmath для работы с комплексными корнями. Результат надежно передавался обратно клиенту по установленному соединению.
Вывод: Сервис подтвердил ключевые свойства TCP: надежность и упорядоченность передачи данных, что необходимо для точных вычислений.
3. Задание 3: Базовый HTTP GET-сервер
Цель: Реализовать простейший Web-сервер, способный обрабатывать HTTP-запросы методом GET.
Описание:
Сервер был реализован на базе TCP-сокета и прослушивал порт 8080. После приема соединения и получения HTTP-запроса, сервер вручную формировал полный HTTP-ответ. Этот ответ включал статус HTTP/1.1 200 OK, необходимые заголовки (Content-Type: text/html, Content-Length) и содержимое статического HTML-файла (index3.html).
Вывод: Успешно продемонстрировано, что протокол HTTP является текстовым протоколом прикладного уровня, работающим поверх надежного транспортного протокола TCP.
4. Задание 4: Многопоточный чат-сервер
Цель: Разработать TCP-сервер, способный одновременно обслуживать множество клиентов, реализуя функционал чата.
Описание:
Для обеспечения одновременной работы использовался модуль threading. При подключении каждого нового клиента сервер запускал для него отдельный поток (handle_client). В потоке обрабатывались входящие сообщения, а функция broadcast рассылала эти сообщения всем остальным активным клиентам, обеспечивая работу чата.
Вывод: Реализация показала, как многопоточность применяется в сетевом программировании для создания масштабируемых сервисов, способных асинхронно управлять множеством TCP-соединений.
5. Задание 5: Web-сервер с обработкой форм (HTTP POST)
Цель: Расширить функционал Web-сервера для обработки данных, отправленных клиентом через HTML-форму методом HTTP POST.
Описание:
Сервер был доработан для распознавания двух методов: GET (для отображения формы) и POST (для приема данных). При получении POST-запроса, сервер извлекал тело запроса, содержащее URL-кодированные данные формы (имя, email), используя urllib.parse.parse_qs. После парсинга сервер генерировал и отправлял клиенту динамический HTML-ответ, подтверждающий прием данных.
Вывод: Продемонстрирована ключевая функциональность веб-приложений: прием пользовательского ввода через HTTP POST и генерация динамического контента на основе обработанных данных.