Сетевое программирование и события

Простой пример UDP-сервера: pyudp.py и широковещательного UDP-клиента: pybroad.py

Домашнее задание

  1. {i} Прочитать про UDP в Википедии

  2. <!> {i} почитать и попробовать примеры с сайта Python (Внимание! это примеры для Python3, кое-какие модули там переименованы, input() — это raw_input() и т. п.)

  3. Собрать клиент и сервер в единую программу, которая одновременно и слушает, и посылает сообщения.
    • Для начала — просто собрать
    • «Карта сети». Модифицировать UDP-сервер таким образом, чтобы он рисовал с помощью PyGame все «засветившиеся» компьютеры

      • так как в домашних условиях, возможно, доступен только один IP:
        • научить программу быть только клиентом (не выполнять bind()) — например, по внешнему виду имени (начинается на "-") или просто обрабатывать исключение socket.error

        • ввести в протокол понятие "идентификатор" (например, первое слово в датаграмме) и модифицировать клиент и сервер так, чтобы клиент мог задать идентификатор, а сервер их различал
      • украсить как-нибудь
      • 2014-03-28-udp.py

  4. <!> «Терминальный сервер». Модифицировать любую графическую программу таким образом, чтобы она вдобавок принимала подключения по TCP или UDP и рассылала клиентам актуальную картинку. Написать простой клиент, который регулярно получает и отображает картинку.

    • Обратите внимание: poll() возвращает некоторый «файловый дескриптор» (возможно, не один), надо проверить, от какого он сокета.

    • Если картинка слишком велика, одним recv() она может не прочитаться. Придётся изобретать протокол, в котором при передаче данных специально помечается, где начало картинки, а где конец.

    • 2014-03-28-ubclient.py и 2014-03-28-udpbowling.py

Условные обозначения


CategoryClass CategoryVmsh

LecturesVMSH/Python/2014-03-28 (last edited 2014-04-04 10:17:29 by FrBrGeorge)