lab3/README.md
2026-05-07 15:00:51 +03:00

3.9 KiB
Raw Blame History

Лабораторная работа 3

Тема: работа с сетевыми соединениями в Python.

В проекте реализованы простые примеры TCP, UDP, HTTP-запросов через socket и requests, а также пример запроса к API Gitea.

Подготовка

Создать и активировать виртуальное окружение:

python -m venv .venv
.\.venv\Scripts\Activate.ps1

Установить зависимости:

pip install -r requirements.txt

TCP

Сервер:

python tcp_server.py

Клиент:

python tcp_client.py "hello server"

Чтобы остановить TCP-сервер:

python tcp_client.py EXIT

TCP-сервер работает на порту 10000. Он принимает сообщение, переводит его в верхний регистр и возвращает клиенту.

Фильтр Wireshark:

tcp.port==10000

UDP

Сервер:

python udp_server.py

Клиент:

python udp_client.py "hello server"

Чтобы остановить UDP-сервер:

python udp_client.py EXIT

UDP-сервер работает на порту 10001. Он принимает сообщение, переворачивает строку и возвращает клиенту.

Фильтр Wireshark:

udp.port==10001

HTTP через socket

python http_socket_client.py

Программа вручную открывает TCP-соединение с vyatsu.ru на порту 80, отправляет HTTP-запрос и выводит часть ответа. При проверке сервер вернул ответ 301 Moved Permanently, потому что сайт перенаправляет запрос на HTTPS-версию.

Фильтр Wireshark:

tcp.port==80

HTTP через requests

python http_requests_client.py

requests сам формирует HTTP-запрос, обрабатывает ответ и предоставляет удобный объект response. При проверке requests автоматически обработал перенаправление и получил итоговый статус 200.

Gitea API

Токен нельзя хранить в коде. Нужно создать файл .env:

GITEA_TOKEN=ваш_токен

Файл .env добавлен в .gitignore, поэтому он не должен попасть в коммит.

Запуск:

python gitea_api.py

Программа выполняет запрос к:

https://git.vyatsu.ru/api/v1/user

Выводы

TCP устанавливает соединение перед передачей данных. В Wireshark можно увидеть трехстороннее рукопожатие: SYN, SYN-ACK, ACK. При завершении соединения видны пакеты FIN и ACK.

UDP не устанавливает соединение перед отправкой данных. В Wireshark видны отдельные UDP-пакеты без handshake и без подтверждений доставки.

При работе через socket HTTP-запрос нужно составлять вручную. В примере через socket виден ответ 301 Moved Permanently. Библиотека requests делает больше действий автоматически: формирует заголовки, обрабатывает ответ и переходит по перенаправлению, поэтому итоговый ответ получился со статусом 200.