# Лабораторная работа 3 Тема: работа с сетевыми соединениями в Python. В проекте реализованы простые примеры TCP, UDP, HTTP-запросов через `socket` и `requests`, а также пример запроса к API Gitea. ## Подготовка Создать и активировать виртуальное окружение: ```powershell python -m venv .venv .\.venv\Scripts\Activate.ps1 ``` Установить зависимости: ```powershell pip install -r requirements.txt ``` ## TCP Сервер: ```powershell python tcp_server.py ``` Клиент: ```powershell python tcp_client.py "hello server" ``` Чтобы остановить TCP-сервер: ```powershell python tcp_client.py EXIT ``` TCP-сервер работает на порту `10000`. Он принимает сообщение, переводит его в верхний регистр и возвращает клиенту. Фильтр Wireshark: ```text tcp.port==10000 ``` ## UDP Сервер: ```powershell python udp_server.py ``` Клиент: ```powershell python udp_client.py "hello server" ``` Чтобы остановить UDP-сервер: ```powershell python udp_client.py EXIT ``` UDP-сервер работает на порту `10001`. Он принимает сообщение, переворачивает строку и возвращает клиенту. Фильтр Wireshark: ```text udp.port==10001 ``` ## HTTP через socket ```powershell python http_socket_client.py ``` Программа вручную открывает TCP-соединение с `vyatsu.ru` на порту `80`, отправляет HTTP-запрос и выводит часть ответа. При проверке сервер вернул ответ `301 Moved Permanently`, потому что сайт перенаправляет запрос на HTTPS-версию. Фильтр Wireshark: ```text tcp.port==80 ``` ## HTTP через requests ```powershell python http_requests_client.py ``` `requests` сам формирует HTTP-запрос, обрабатывает ответ и предоставляет удобный объект `response`. При проверке `requests` автоматически обработал перенаправление и получил итоговый статус `200`. ## Gitea API Токен нельзя хранить в коде. Нужно создать файл `.env`: ```text GITEA_TOKEN=ваш_токен ``` Файл `.env` добавлен в `.gitignore`, поэтому он не должен попасть в коммит. Запуск: ```powershell python gitea_api.py ``` Программа выполняет запрос к: ```text https://git.vyatsu.ru/api/v1/user ``` Для создания репозитория через API используется файл: ```powershell python create_gitea_repo.py ``` Скрипт создает публичный репозиторий `API_REPO`. ## Выводы TCP устанавливает соединение перед передачей данных. В Wireshark можно увидеть трехстороннее рукопожатие: `SYN`, `SYN-ACK`, `ACK`. При завершении соединения видны пакеты `FIN` и `ACK`. UDP не устанавливает соединение перед отправкой данных. В Wireshark видны отдельные UDP-пакеты без handshake и без подтверждений доставки. При работе через `socket` HTTP-запрос нужно составлять вручную. В примере через `socket` виден ответ `301 Moved Permanently`. Библиотека `requests` делает больше действий автоматически: формирует заголовки, обрабатывает ответ и переходит по перенаправлению, поэтому итоговый ответ получился со статусом `200`. Через API Gitea был выполнен запрос к данным пользователя и создан репозиторий `API_REPO`. Для этого использовался токен, который хранится в `.env` и не попадает в коммиты.