Программирование на языке Python - Прежде чем я начну с программирования на языке Python, надеюсь, у вас есть хорошие основы Python. Если вы также знаете Django, это будет еще проще для понимания. Нет, программирование сокетов не имеет отношения к Django, но термины в программировании сокетов Python и Django почти одинаковы, хотя это две разные категории. Итак, для начала, что такое Python Socket Programming? Программирование на языке Python Socket существует не только в Python, но также в Java и почти во всех других языках программирования. Но в случае с python программирование сокетов на самом деле очень легко понять. Программирование на Python Socket означает сетевое программирование. Он включает в себя клиентские и Python Socket серверные коды, связанные. Но это определение так же хорошо, как книга о том, что программирование на С используется для разработки программного обеспечения. И нет, я здесь не для этого. Я здесь, чтобы убедиться, что вы получите более глубокое понимание основ программирования сокетов Python, прежде чем вы начнете писать свои собственные модули сокетов. Итак, давайте начнем и посмотрим, как сокет работает на стороне клиента или на стороне сервера Python.

Что такое Python Socket Programming?

Если вы научились программировать на C, то изучение программирования сокетов Python на Python будет очень простым, поскольку они почти одинаковы. Чтобы сделать это проще, программирование на python-сокете - это просто кусок кода о том, как компьютеры в сети взаимодействуют друг с другом. И это не только сеть на основе ЛВС, но и поддержка сетей на основе WAN, MAN и интрасети. Мы даже используем розетки в нашей повседневной жизни. Не понимая? Позвольте мне привести простой пример. Когда вы хотите подключиться к, скажем, Facebook.com, вы просто вводите то же самое в адресной строке. Таким образом, это соединение, которое вы только что создали, не просто создается материалом DNS. Все это настраивается через программирование сокетов Python. Сокеты решают, как две сети взаимодействуют. Любое общение, проходящее через сеть, может ли это быть видео, VOIP-соединения или просто текст; все идет через сокет. Теперь, когда мы знаем, что такое сокеты, давайте разработаем наш собственный сокет на python.

Источник изображения: pixabay.com

Типы программирования Python Socket

Теперь есть множество розеток там. Но мы не будем говорить обо всех из них, так как я не могу охватить каждого из них здесь. Вы можете создать UDP-сокет, TCP-сокет или даже сокет порта, и, если я продолжу, их будет гораздо больше. Но я бы хотел больше взглянуть на сокеты TCP и UDP сегодня, так как они являются основными, и они могут быть очень полезны для начинающих, чтобы начать работать с программированием на Python Socket.

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

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

импорт сокета # импорт модуля сокета из библиотеки python # Теперь нам нужно создать AF_INET и socket dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print «Создание сокета прошло успешно»

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

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((«, port)) print« Запрос подключения к порту на машине », порт

пока 1:

data, address = s.recvfrom (1024)

печать данных

Это может показаться не так много, но это то, как оно на самом деле создано. Здесь можно использовать любой порт. Я только что выбрал случайный 2924. UDP-серверу нужен открытый порт для отправки и получения входящих соединений. Нет прослушивания порта или принятия соединений или запроса. Это просто происходит без какой-либо аутентификации. Попробуйте запустить вышеуказанный сервер в терминале и посмотрите, как он работает.

Это просто простой UDP-сервер, который мы создали. Давайте сделаем это немного интереснее и сложнее:

«Это простой сервер сокетов UDP» «импортировать socketimport sys

HOST = «» # Здесь можно попробовать все доступные интерфейсы

PORT = 2924 # Любой случайный порт, который по умолчанию не используется в дистрибутивах Windows или Linux

# Кодирование UDP-сокета

пытаться :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

печать «Сокет инициализирован»

кроме socket.error, msg:

печать «Создание сокета не удалось. Произошла следующая ошибка: «+ str (msg (0)) +« Message »+ msg (1)

sys.exit ()

# Теперь нам нужно привязать этот сокет к указанному выше хосту и порту.

пытаться:

s.bind ((HOST, PORT))

кроме socket.error, msg:

печать «Связывание сокета не выполнено. Следующая ошибка прервала привязку: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

печать 'Закрепление гнезда завершено'

# Поддерживать установленное соединение

пока 1:

# захватить данные от клиента, используя переменные данные и адрес

d = s.recvfrom (1024)

данные = d (0)

адрес = d (1)

если не данные:

перемена

ответ = "ОК …" + данные

s.sendto (ответ, адрес)

выведите 'Token message (' + address (0) + ':' + str (address (1)) + ') -' + data.strip ()

s.close ()

Запустите вышеуказанную программу, и вы запустите UDP-сервер на порту 2924. Поздравляем, вы успешно создали Socket в Python. И убедитесь, что вы заметили, что UDP-сервер может обрабатывать множество клиентов в отличие от TCP-сервера, основная причина в том, что на UDP-сервере нет фиксированной связи, как в случае с TCP-сервером.

Рекомендуемые курсы

  • Сертификационный курс по Ruby Debugging
  • Курс PHP MySQL
  • Сертификационный курс по программированию на VB.NET
  • Завершить базовое обучение ITIL
  • Программирование клиента UDP

Теперь, когда мы успешно создали сервер UDP, нам нужен клиент, чтобы установить правильное соединение с ним, чтобы мы знали, как он работает. Итак, давайте поработаем над созданием правильного UDP-клиента на Python. Этот клиент подключится к нашему UDP-серверу, который мы создали выше:

”'Создание простого UDP-клиента с использованием usind-сокетов”' import socketimport sys

# Создание UDP-сокета

пытаться:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

кроме socket.error:

печать 'Создание сокета не удалось'

sys.exit ()

host = '127.0.0.1'; # Вы также можете попробовать использовать localhost из этого IP, оба одинаковы.

порт = 2924;

пока (1):

msg = raw_input ('Введите сообщение для отправки на сервер:')

пытаться :

# Теперь нам нужно установить строки

s.sendto (msg, (хост, порт))

# Теперь нам нужно получить данные и адрес от клиента, используя данные и адрес

d = s.recvfrom (1024)

ответ = d (0)

адрес = d (1)

print 'Ответ с сервера:' + ответить

кроме socket.error, msg:

напечатайте 'Появление следующей ошибки:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

Ага. Создание UDP-клиента в программировании на Python Socket намного проще, чем создание UDP-сервера. Но это так. Я не думаю, что мне нужно что-либо объяснять из приведенного выше фрагмента кода, поскольку я уже упомянул все необходимые вещи в комментариях к тегу #. Просто убедитесь, что IP-адрес и порт, который вы ввели, правильные, и ваш брандмауэр не блокирует соединение, иначе это всегда приведет к сбою, несмотря ни на что.

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

Теперь, когда мы узнали, как создать UDP-клиент и сервер, давайте взглянем на программирование TCP-сокетов. Мы будем использовать ту же функцию socket.socket для создания здесь сокета TCP.

импортировать сокет # Импортировать сокет модуля из библиотек Python # создать AF_INET и потоковые сокеты = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Создание сокета успешно'

Здесь AF_INET используется для подключения адреса Ipv4, а поток sock является протоколом, ориентированным на TCP. Это простой сокет TCP, который мы создали. Теперь мы будем создавать расширенную версию того же самого. Здесь мы также будем выдавать исключения, так же, как и при создании UDP-серверов и клиентов, чтобы в случае сбоя подключения мы знали, где находится настоящая программа. Socket.error будет использоваться для обработки всех этих ошибок, похожих на ошибки программирования UDP.

Итак, теперь давайте создадим сокет с вышеуказанной обработкой ошибок и подключимся к хосту facebook.com. Вот как это должно быть сделано:

импорт сокета # импорт модуля сокета import systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

кроме socket.error, msg:

print 'Создание сокета не выполнено. Произошла следующая ошибка: '+ str (msg (0)) +', сообщение об ошибке: '+ msg (1)

sys.exit ();

печать «Создание сокета успешно»

host = 'www.facebook.com'

порт = 2924

пытаться:

remote_ip = socket.gethostbyname (хост)

кроме socket.gaierror:

напечатайте 'Неправильное имя хоста. Выход …

sys.exit ()

печать ”+ хост + IP-адрес 'is' + remote_ip

s.connect ((remote_ip, порт))

выведите 'Socket Connected to' + host + 'на ip' + remote_ip

Теперь этого достаточно, если нам нужно просто установить соединение. Но это не наша цель. Мы намерены создать соединение, где мы могли бы также отправлять и получать данные на обоих концах. Мы можем отправить данные, используя функцию sendall. Итак, вот как это происходит:

импорт сокета # импорт модуля сокета import systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

кроме socket.error, msg:

print 'Создание сокета не выполнено. Произошла следующая ошибка: '+ str (msg (0)) +', сообщение об ошибке: '+ msg (1)

sys.exit ();

печать «Создание сокета успешно»

host = 'www.facebook.com'

порт = 2924

пытаться:

remote_ip = socket.gethostbyname (хост)

кроме socket.gaierror:

напечатайте 'Неправильное имя хоста. Выход …

sys.exit ()

печать ”+ хост + IP-адрес 'is' + remote_ip

s.connect ((remote_ip, порт))

выведите 'Socket Connected to' + host + 'на ip' + remote_ip

# передача данных с использованием функции sendall

сообщение = «GET / HTTP / 1.1 \ r \ n \ r \ n»

пытаться :

s.sendall (сообщение)

кроме socket.error:

# Отправка не удалась

распечатать 'Отказ передачи'

sys.exit ()

распечатать «Статус сообщения: Отправлено»

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

импорт сокета # импорт модуля сокета import systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

кроме socket.error, msg:

print 'Создание сокета не выполнено. Произошла следующая ошибка: '+ str (msg (0)) +', сообщение об ошибке: '+ msg (1)

sys.exit ();

печать «Создание сокета успешно»

host = 'www.facebook.com'

порт = 2924

пытаться:

remote_ip = socket.gethostbyname (хост)

кроме socket.gaierror:

напечатайте 'Неправильное имя хоста. Выход …

sys.exit ()

печать ”+ хост + IP-адрес 'is' + remote_ip

s.connect ((remote_ip, порт))

выведите 'Socket Connected to' + host + 'на ip' + remote_ip

# передача данных с использованием функции sendall

сообщение = «GET / HTTP / 1.1 \ r \ n \ r \ n»

пытаться :

s.sendall (сообщение)

кроме socket.error:

# Отправка не удалась

распечатать 'Отказ передачи'

sys.exit ()

распечатать «Статус сообщения: Отправлено»

# Теперь, чтобы получить данные, мы используем функцию recv для их получения.

reply = s.recv (4096)

распечатать ответ

Наконец, нам нужно закрыть сокет, что мы могли бы сделать с помощью следующего кода:

s.close ()

И, наконец, обязательная часть. Мы можем использовать функцию bind для связывания сокетов с ip-адресами и портами.

import socketimport sysHOST = ”# Это то же самое, что мы сделали в порту UDP protocolPORT = 2924 # для доступа к данным.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

печать 'Создание сокета успешно'

пытаться:

s.bind ((HOST, PORT))

кроме socket.error, msg:

печать 'Связывание не удалось. Произошла следующая ошибка '+ str (msg (0)) + "Message" + msg (1)

sys.exit ()

печать «Привязка сокета успешно»

Теперь нам нужно прослушивать входящие подключения, если нам нужен сервер для подключения. Это можно сделать с помощью следующей простой команды:

s.listen (10) print 'Слушатель запущен'

И, наконец, нам нужно создать сокет для приема этих соединений:

импортный сокетимпорт sysHOST = ”PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

печать «Создание сокета успешно»

пытаться:

s.bind ((HOST, PORT))

кроме socket.error, msg:

печать 'Связывание не удалось. Произошла следующая ошибка '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

печать 'Связывание сокета успешно'

s.listen (10)

печать «Слушатель запущен»

# Прием соединений

conn, addr = s.accept ()

# Предоставление информации о подключенном клиенте

print 'Соединение установлено с' + addr (0) + ':' + str (addr (1))

На самом деле это намного больше. Мы также можем писать коды для обработчиков и прочего. Но я думаю, что это будет на данный момент. Убедитесь, что вы правильно поняли эти основы, после чего оставшиеся части - всего лишь кусок пирога, который нужно выучить.

Первый источник изображения: pixabay.com

Статьи по Теме:-

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

  1. 25 самых удивительных вопросов и ответов на Python.
  2. Карьера в Python
  3. Каковы преимущества и ограничения использования Python?
  4. Важное отличие Python от производительности Ruby
  5. Введение в сокет-программирование в PHP
  6. Socket Программирование на Java | Метод класса сокетов