В этой статье мы рассмотрим клиент-серверную архитектуру на примере Python.

Питон – это универсальный язык программирования. С его помощью можно создать как бизнес-приложение, так и клиент-серверную модель. Второй вариант становится все более популярным и распространенным у разработчиков. Все это благодаря простому синтаксису Python.

В данной статье речь зайдет о так называемом сетевом программировании. Предстоит изучить не только клиент-серверные модели в Python, но и сокеты. В конце будет рассмотрен пример элементарного чата, написанного на этом языке программирования.

Протоколы

Сетевое программирование – это часть, отвечающая за обмен электронными материалами между сервером и клиентом. Соответствующими компонентами модели могут выступать не только физические servers и компьютеры, а также иное оборудование.

В основе клиент-серверной модели иногда заложена логическая реализация: в пределах одного стола или конкретного железа. Все манипуляции здесь будут применять некоторый свод правил по доставке, инкапсуляции и очередности пакетов и сетевого взаимодействия. Подобный принцип носит название протокола передачи данных.

В Питоне программное обеспечение сетевого характера обычно используют протоколы транспортного уровня двух видов: TCP и UDP.

О TCP

TCP протокол в Python встречается тогда, когда нужно обеспечить между компьютерами двусторонний канал обмена информации. Здесь требуется запомнить следующие сведения:

  1. При его задействовании пакеты будут обязательно доставляться с соблюдением порядка очередности и авто разбиением электронных материалов на пакеты. Предусматривается также контроль передачи информации.
  2. TCP не выделяется особой скоростью функционирования.
  3. Потерянные пакеты будут повторно и многократно отправляться. Это приводит к увеличению количества операций.

Соответствующий вариант гарантирует, что клиент точно получит всю необходимую информацию.

Кратко о UDP

UDP – это низкоуровневый протокол. Он позволяет устройствам отправлять и получать данные отдельными пакетами. Логическое соединение здесь будет отсутствовать.

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

Сокет – это…

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

Сокет – конечные точки двунаправленного канала связи. Взаимодействуют:

  • в процессе;
  • между процессами на одном устройстве;
  • между процессами на разном оборудовании.

Реализовываются через разнообразные типы каналов. Содержат в себе несколько параметров. Среди них выделяют две составляющие – IP-адрес и порт.

Порты и адреса

Когда server принимает соединение, он присваивает своему сокету конкретный порт. Port – это число в заголовках пакетов TCP, UDP, которое указывает, для какого софта в системе используется IP-пакет.

Здесь требуется уяснить следующее:

  1. Ports с номерами 0-1023 не допустимо. Связано это с тем, что они уже зарезервированы под служебные сетевые протоколы.
  2. Клиент, отправляя информацию, тоже создает собственный socket.
  3. Два сокета по каждую сторону «системы» будут образовывать виртуальное соединение. По нему осуществляется передача электронных материалов.
  4. При использовании TCP создаются два сокета: один слушатель (listen) и второй – socket обмена данными. Первый переходит в ожидание и активизируется при новом соединении. Второй носит название accept.

При помощи этих сведений составить грамотный код, который будет поддерживать работу в сети, станет проще. Но без грамотного управления модель «clients server» реализовать проблематично.

Лексика

Каждый рассматриваемый компонент имеет собственную лексику. Программисту предстоит уяснить такие данные:

  1. Domain – это семейство protocols, используемое в виде транспортного механизма. Соответствующие значения выступают в качестве констант.
  2. Type – тип связи между имеющимися конечными точками. Обычно Sock_Stream применяется для протоколов, ориентированных на непосредственное соединение. Sock_Dgram – без «подключения».
  3. Protocol – чаще всего это – нуль. Он применяется для идентификации варианта протокола в пределах типа и домена.
  4. Hostname. Идентификатор сетевого интерфейса.
  5. Port – каждый сервер слушает клиентов, которые вызывают один или несколько портов. Порт может быть номером Fixnum, строчкой с номером портал или именем службы.

Теперь стоит выяснить, что собой представляет модуль сокета. Эта информация пригодится как новичкам, так и опытным программистам.

О модуле socket

Для того, чтобы создать сокет, требуется использовать функцию под названием socket.socket() через модуль socket. У него такой синтаксис:Клиент-серверная модель в Питоне и сокеты

А вот описание имеющихся параметров:

  • _family – AF_UNIX или AF_INET;
  • _type – Sock_Stream или Sock_Dgram;
  • protocol – обычно не прописывается, по умолчанию – 0.

При наличии объекта «со кет» можно задействовать функции для клиентского или серверного programming.

Подключение сервера

Вот методы, которые помогут подключить сервер:

  • s.bind – связка адреса сокетом;
  • s.listen – установка и запуск прослушивателя TCP;
  • s.accept – пассивное принятие TCP-клиентского соединения, ожидая блокировки.

У сокета есть метод s.connect. Он активно проводит инициирование подключения к серверу TCP.

Общие методы

Каждый socket может использовать такие общие methods:

  • s.recv – получение сообщения;
  • s.send – передача текста;
  • s.recvfrom – получение сообщения UDP;
  • s.sendto – передача текста UDP;
  • s.close – закрытие socket;
  • socket.gethostname – возврат имени хоста.

Теперь, когда понятия import socket, а также client, server и print разобраны, можно взглянуть на пример элементарного чата на Питоне. Это – network приложение.

Пример чата

Сначала требуется написать серверную часть. А именно – то, что принимает соединение. Пример – по порту 5050. Сначала осуществляется подключение:

Клиент-серверная модель в Питоне и сокеты

Далее – непосредственное создание в коде:

Клиент-серверная модель в Питоне и сокеты

Нужно связать рассмотренный ранее компонент с интерфейсом и портом:

Клиент-серверная модель в Питоне и сокеты

Теперь – создать средство принятия сообщений и их отправки:

Клиент-серверная модель в Питоне и сокеты
Клиент-серверная модель в Питоне и сокеты

А вот клиентская часть:

Клиент-серверная модель в Питоне и сокеты

Остается настроить шифрование. Стоит прибегнуть к самому простому варианту – алгоритм XOR. Его ключевая идея – если есть некоторая величина, есть некий ключ шифрования, то можно через него зашифровать исходные электронные материалы. Для этого побитно применяется операция XOR.

В виде кода это выглядит так:

Клиент-серверная модель в Питоне и сокеты

Теперь остается лишь соединить все части кода и посмотреть на получившийся результат. Пример элементарен и примитивен, но для новичков он отлично подходит.

Вот туториалы, которые помогут лучше разобраться в рассмотренной тематике. А специализированные компьютерные дистанционные курсы дадут наиболее развернутую информацию по интересующему направлению.

Клиент-серверная модель в Питоне и сокеты