Python — это язык высокого уровня, специально разработанный для облегчения жизни разработчиков. С другой стороны, сетевое программирование может быть утомительной и сложной задачей на других языках программирования, но на языке программирования Python это просто и легко. Это позволяет пользователю писать сценарии, которые могут автоматизировать сложную конфигурацию сети. В этой статье мы увидим, как выполнить сетевое программирование с помощью Python.
Как Python используется в сети?
Язык программирования Python играет жизненно важную роль в сетевом программировании. Python имеет встроенную стандартную библиотеку, которая обеспечивает полную поддержку кодирования и декодирования данных, сетевых протоколов и всех других сетевых концепций. Написание кода для сетевого программирования на Python намного проще, чем на C++ или Java. Язык программирования Python обеспечивает два уровня доступа к сетевым службам: низкоуровневый и высокоуровневый доступ. Низкоуровневый доступ предлагает базовую поддержку сокетов операционной системы. В то время как доступ высокого уровня позволяет реализовывать такие протоколы, как FTP. HTTP и т. д.
Эта статья поможет вам получить общее представление о самой известной концепции сети в Python — программировании сокетов.
Что такое сокеты?
Сокеты обеспечивают двунаправленный канал связи между двумя конечными точками. Процессы на других машинах, процессы на той же машине, и сокет успевает общаться со всеми. Они могут быть реализованы на разных каналах, таких как UDP, TCP, доменные сокеты Unix и т. д. Библиотека сокетов в Python предоставляет различные классы для управления общей передачей данных или общий интерфейс для управления остальными. Сокеты используют различные типы протоколов для определения соединения порт-порт между серверами и клиентами. Эти протоколы используются для FTP, SMTP, электронной почты, IP-адреса, DNS и т. д. Словарь сокетов отличается. Взгляните на следующую иллюстрацию:
Срок | Описание |
Домен | Набор протоколов, используемых в качестве транспортного механизма. |
Тип | Определяет тип связи между сокетами. |
Протокол | Определяет тип протокола в пределах типа и домена. |
Порт | Точка прослушивания, через которую серверы прослушивают клиентские вызовы. Он состоит из имени службы, строки, содержащей номер порта, и номера порта Fixnum. |
Имя хоста | Идентифицирует сетевой интерфейс и состоит из следующих компонентов: Строка «<broadcast>», определяющая широковещательный адрес. Строка нулевой длины. Строка, содержащая имя хоста, двойной адрес или адрес IPv6. Целое число, которое определяет двоичный адрес в порядке байтов хоста. |
Что такое программирование сокетов?
Программирование сокетов соединяет два узла в сети связи. Один узел является слушателем, который обычно известен как сервер, а другой обращается к серверу, который обычно известен как клиент. Для программирования сокетов в Python необходимо включить модуль сокета.
Давайте рассмотрим несколько примеров, чтобы узнать, как реализовать сетевое программирование на Python.
Пример 1
В этом примере мы изучим синтаксис модуля сокета и как его импортировать в программу Python. Сначала мы импортируем модуль сокета в программу Python, используя оператор «import socket». Затем мы можем использовать функции модулей сокетов. Вот синтаксис модуля socket():
import socket
socketmodule = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(socketmodule)
Теперь давайте выполним оператор, чтобы увидеть, что он возвращает:
Вот следующий вывод:
Пример 2
Теперь давайте узнаем, как создать простой сервер и простой клиент и посмотрим, как они взаимодействуют друг с другом.
Вот серверная кодировка:
Сначала импортируйте сокет, а затем создайте объект сокета:
import socket as s
socketmodule = socket.socket()
Получите имя машины, вызвав оператор gethostname():
hostname = socket.gethostname()
Укажите номер порта, который вы хотите, чтобы сервер установил соединение между сервером и клиентом:
portnum = 12345
Теперь привяжите хост к порту, чтобы начать соединение:
s.bind((hostname, portnum))
Следующим шагом будет ожидание подключения клиента:
socketmodule.listen(5)
Наконец, установите соединение с клиентом:
while True:
a, adrs = s.accept()
print (‘Connection received from’, adrs )
a.send(b‘Thanks for connecting’)
a.close()
Ниже приведено кодирование на стороне клиента:
Чтобы начать соединение, модуль сокета должен быть импортирован на стороне клиента так же, как он был импортирован на стороне сервера:
import socket as s
socketmodule = socket.socket()
Выполните тот же процесс, получите имя локальной машины и зарезервируйте порт, который был зарезервирован сервером для установки соединения:
hostname = socket.gethostname()
portnum = 12345
Теперь соедините хост с портом и установите соединение между ними:
socketmodule.connect((‘127.0.0.1’, portnum))
print(socketmodule.recv(1024))
s.close()
Когда вы закончите кодирование на стороне клиента и на стороне сервера, запустите сервер и клиент в фоновом режиме, чтобы увидеть результаты:
После успешного подключения вы увидите следующий вывод:
Пример 3
Давайте рассмотрим еще один пример, чтобы лучше понять, как сервер соединяется с клиентом, а также как сервер слушает клиента.
Вот серверная кодировка:
Для кодирования на стороне сервера выполните тот же процесс. Импортируйте сокет, создайте модуль сокета, зарезервируйте номер порта, привяжите хост и порт и слушайте клиента. Если вы заметили, в цикл добавляется условие «если» для проверки конкретного условия. См. следующий код:
import socket
portnum = 60
IPadrs = ‘127.0.0.1’
bufferS = 30socketmodule = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
socketmodule.bind((IPadrs, portnum))
socketmodule.listen(1)
conn, adrs = socketmodule.accept()
print (‘The Address of the connection is: ‘ , adrs)
while True:
data = conn.recv(bufferS)
if not data:
breakprint («The received data is: «, data)
con.send(data)
con.close()
Ниже приведено кодирование на стороне клиента:
Процесс установления соединения на стороне клиента снова такой же. Импортируйте сокет, создайте модуль сокета, зарезервируйте номер порта и соедините порт с хостом:
import socket
portnum = 5006
IPadrs = ‘127.0.0.1’
bufferS = 1024
PrintMessage = «Hi! I’m a message from client.”
socketmodule = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
socketmodule.connect((IPadrs, portnum))
socketmodule.send(PrintMessage)
data = socketmodule.recv(bufferS)
socketmodule.close
Теперь обратите внимание, что клиент отправляет сообщение на сервер: «Привет! Я сообщение от клиента». Это сообщение принимается сервером и распечатывается.
После успешного соединения между сервером и клиентом вы увидите следующий вывод:
Заключение
Это базовый обзор программирования сокетов в Python и быстрый старт с реализацией. Тем не менее, это обширная тема, содержащая множество деталей со сложным кодированием. Как только вы освоите эти простые программы, вы сможете погрузиться в глубины программирования сокетов.