Сетевое программирование и события
- Разбор предыдущего домашнего задания
- TCP и UDP: отличия в организации и программировании на Python
- Надёжность
- Широковещание
- Порядок программрования
Модуль select: select() и poll()
Понятие «файлового дескриптора» в select
Простой пример UDP-сервера: pyudp.py и широковещательного UDP-клиента: pybroad.py
Домашнее задание
Прочитать про UDP в Википедии
почитать и попробовать примеры с сайта Python (Внимание! это примеры для Python3, кое-какие модули там переименованы, input() — это raw_input() и т. п.)
- Собрать клиент и сервер в единую программу, которая одновременно и слушает, и посылает сообщения.
- Для начала — просто собрать
«Карта сети». Модифицировать UDP-сервер таким образом, чтобы он рисовал с помощью PyGame все «засветившиеся» компьютеры
- так как в домашних условиях, возможно, доступен только один IP:
научить программу быть только клиентом (не выполнять bind()) — например, по внешнему виду имени (начинается на "-") или просто обрабатывать исключение socket.error
- ввести в протокол понятие "идентификатор" (например, первое слово в датаграмме) и модифицировать клиент и сервер так, чтобы клиент мог задать идентификатор, а сервер их различал
- украсить как-нибудь
- так как в домашних условиях, возможно, доступен только один IP:
«Терминальный сервер». Модифицировать любую графическую программу таким образом, чтобы она вдобавок принимала подключения по TCP или UDP и рассылала клиентам актуальную картинку. Написать простой клиент, который регулярно получает и отображает картинку.
Обратите внимание: poll() возвращает некоторый «файловый дескриптор» (возможно, не один), надо проверить, от какого он сокета.
Если картинка слишком велика, одним recv() она может не прочитаться. Придётся изобретать протокол, в котором при передаче данных специально помечается, где начало картинки, а где конец.
Условные обозначения
— тема по Linux
— тема повышенной сложности
— теоретическое задание
— тема для самостоятельного изучения