| .gitignore | ||
| gitea_api.py | ||
| http_requests_client.py | ||
| http_socket_client.py | ||
| README.md | ||
| requirements.txt | ||
| tcp_client.py | ||
| tcp_server.py | ||
| udp_client.py | ||
| udp_server.py | ||
Лабораторная работа 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.