Сетевое программирование и события
- Разбор предыдущего домашнего задания
- 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
?? тема повышенной сложности
? теоретическое задание
? тема для самостоятельного изучения