Программирование сокетов

programmirovanie soketov Сетевые сценарии

Теперь, когда мы знаем, какую роль играют сокеты в общей структуре Интернета, пойдем дальше и посмотрим, какие инструменты предоставляет Python для программирования сокетов в сценариях. В этом разделе будет показано, как использовать интерфейс Python к сокетам для организации низкоуровневых сетевых взаимодействий. В последующих главах мы будем использовать модули протоколов более высокого уровня, скрывающих операции с лежащими в их основе сокетами. При этом интерфейс Python к сокетам может использоваться непосредственно для реализации собственных сетевых взаимодействий и организации доступа к стандартным протоколам вручную.

Как мы уже видели в главе 5, основным интерфейсом сокетов в Python является стандартный библиотечный модуль socket. Подобно модулю POSIX os модуль socket служит лишь тонкой оберткой (интерфейсным слоем) вокруг функций для работы с сокетами из библиотеки на языке C. Подобно файлам Python этот модуль основывается на объектах — методы объекта сокета, реализованные в этом модуле, после преобразования данных вызывают соответствующие операции библиотеки C. Например, функции send и recv в библиотеке C отображаются в методы объекта сокета в языке Python.

Модуль socket обеспечивает возможность выполнения операций с сокетами в любой системе, поддерживающей сокеты в стиле BSD Windows, Mac OS, Linux, Unix и так далее, — и таким образом обеспечивает переносимый интерфейс сокетов. Кроме того, этот модуль поддерживает все стандартные типы сокетов — TCP/IP, UDP, дейтаграммы и доменные сокеты Unix — и может использоваться как прикладной интерфейс доступа к сети и как универсальный механизм взаимодействий между процессами, выполняющимися на одном и том же компьютере.

С функциональной точки зрения, сокеты являются программными инструментами передачи байтов между программами, которые могут выполняться на разных компьютерах. Хотя сокеты сами по себе способны передавать только строки байтов, тем не менее, вы можете также передавать через них объекты Python, используя модуль pickle. Этот модуль способен преобразовывать объекты Python, такие как списки, словари и экземпляры классов, в строки байтов и обратно и обеспечивает поддержку необходимого промежуточного этапа при передаче объектов высокого уровня через сокеты.

Для преобразования объектов Python в упакованные строки двоичных байтов, готовые к передаче, можно также использовать модуль struct, но в целом его возможности ограничиваются объектами, которые могут отображаться в типы данных языка программирования C. Модуль pickle поддерживает возможность передачи более крупных объектов, таких как словари и экземпляры классов. Для других задач, включая использование большинства стандартных протоколов Интернета, достаточно использовать простые строки байтов. Поближе с модулем pickle мы познакомимся в этой главе и далее в книге.

Помимо реализации простого обмена данными модуль socket также включает различные дополнительные инструменты. Например, в нем имеются функции для выполнения следующих и других задач:

     Переупорядочение байтов в стандартный сетевой порядок и обратно (ntohl, htonl).

     Определение имени компьютера и его сетевого адреса (gethostname, gethostbyname).

     Обертывание объектов-сокетов объектами файлов (sockobj.makefile).

     Перевод сокетов в неблокирующий режим (sockobj.setblocking).

     Установка предельного времени ожидания для сокета (sockobj.settimeout).

Если ваша версия Python была собрана с поддержкой протокола защищенных сокетов (Secure Sockets Layer, SSL), стандартный библиотечный модуль ssl обеспечит также возможность шифрования передаваемых данных с помощью функции ssl.wrap_socket. Эта функция обертывает объект сокета логикой SSL, которая в свою очередь будет использоваться другими стандартными библиотечными модулями для поддержки безопасного протокола HTTPS (http.client и urllib.request), безопасной передачи сообщений электронной почты (poplib и smtplib) и других видов взаимодействий. Мы встретимся с некоторыми из этих модулей далее в этой части книги, но не будем изучать все дополнительные особенности модуля socket — за подробностями, опущенными здесь, обращайтесь к руководству по стандартной библиотеке Python.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий