Исключить из наших наслаждений воображение — значит свести их на нет (М. Пруст).

Python 3 – Сетевое программирование

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
16 октября 2018
Python обеспечивает два уровня доступа к сетевым службам. На низком уровне вы можете получить доступ к базовой поддержке сокетов в базовой операционной системе, которая позволяет вам реализовывать клиенты и сервера как для протоколов, ориентированных на соединение, так и без установления соединения.

Python также имеет библиотеки, обеспечивающие более высокий уровень доступа к определенным сетевым протоколам уровня приложения, таким как FTP, HTTP и т. д.

В этой главе вы узнаете о самой известной концепции как программирование сетевых сокетов.

Что такое сокеты?

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

Сокеты могут быть реализованы по нескольким различным типам каналов: сокеты домена Unix, TCP, UDP и т. д. Библиотека socket предоставляет определенные классы для обработки общих транспортов, а также общий интерфейс для работы с остальными.

У сокетов есть своя лексика:

Термины и описание
1Domain

Семейство протоколов, которое используется в качестве транспортного механизма. Эти значения являются константами, такими как AF_INET, PF_INET, PF_UNIX, PF_X25 и т. д.

2type

Тип связи между двумя конечными точками, обычно SOCK_STREAM для протоколов, ориентированных на соединение, и SOCK_DGRAM для протоколов без установления соединения.

3protocol

Обычно нуль, он может использоваться для идентификации варианта протокола внутри домена и типа.

4hostname

Идентификатор сетевого интерфейса:

  • Строка, которая может быть именем хоста, адресом с точками-квадратами или адресом IPV6 в двоеточии (и, возможно, точкой)
  • Строка «<broadcast>», которая указывает на адрес INADDR_BROADCAST.
  • Строка нулевой длины, которая указывает INADDR_ANY
  • Целое число, интерпретируемое как двоичный адрес в порядке байтов хоста.
5port

Каждый сервер слушает клиентов, вызывающих один или несколько портов. Порт может быть номером порта Fixnum, строкой, содержащей номер порта или имя службы.

Модуль socket

Чтобы создать сокет, вы должны использовать функцию socket.socket(), доступную в модуле socket, который имеет общий синтаксис:

s = socket.socket (socket_family, socket_type, protocol=0)

 

Вот описание параметров:

  • socket_family – это либо AF_UNIX, либо AF_INET, как объяснялось ранее.
  • socket_type – это либо SOCK_STREAM, либо SOCK_DGRAM.
  • protocol – обычно не указан, по умолчанию 0.

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

Способы подключения сервера

Способ и описание
1s.bind()

Этот метод связывает адрес (имя хоста, пару портов порта) сокетом.

2s.listen()

Этот метод устанавливает и запускает прослушиватель TCP.

3s.accept()

Пассивно принимает TCP-клиентское соединение, ожидая, пока не придет соединение (блокировка).

Методы сокета клиента

Способ и описание
1s.connect()

Метод активно инициирует подключение к серверу TCP.

Общие методы сокета

Способ и описание
1s.recv()

Этот метод получает сообщение TCP

2s.send()

Этот метод передает сообщение TCP

3s.recvfrom()

Этот метод получает сообщение UDP

4s.sendto()

Этот метод передает сообщение UDP

5s.close()

Этот метод закрывает сокет

6socket.gethostname()

Возвращает имя хоста.

Простой сервер

Чтобы писать интернет-серверы, мы используем функцию socket, доступную в модуле socket, для создания объекта socket. Затем объект socket используется для вызова других функций для настройки сервера сокетов.

Теперь вызовите функцию bind(hostname, port), чтобы указать порт для вашей службы на данном хосте.

Затем вызовите метод accept возвращаемого объекта. Этот метод ожидает, когда клиент подключится к указанному вами порту, а затем вернет объект connection, который представляет соединение с этим клиентом.

#!/usr/bin/python           

import socket               # Импорт модуля socket

s = socket.socket()         # Создание object socket
host = socket.gethostname() # Получить имя компьютера 
port = 12345                # Зарезервируйте порт для обслуживания
s.bind((host, port))        # Привязка к порту

s.listen(5)                 # Теперь дождитесь подключения клиента.
while True:
   c, addr = s.accept()     # Установить соединение с клиентом.
   print 'Получил соединение от', addr
   c.send('Спасибо за подключение')
   c.close()                # Закрываем соединение

Простой клиент

Давайте напишем очень простую клиентскую программу, которая открывает соединение с портом 12345 и данным хостом. Это очень просто создать сокет клиента, используя функцию модуля socket в Python.

socket.connect(hosname, port ) открывает соединение TCP с Hostname и port. Как только у вас открыт сокет, вы можете читать его, как любой объект ввода-вывода. Когда это будет сделано, не забудьте закрыть его, так как вы закроете файл.

Следующий код – очень простой клиент, который подключается к данному хосту и порту, считывает любые доступные данные из сокета и затем выходит:

#!/usr/bin/python           

import socket               # Импорт модуля socket

s = socket.socket()         # Создание объекта socket
host = socket.gethostname() # Получить имя компьютера 
port = 12345                # Зарезервируйте порт для обслуживания

s.connect((host, port))
print s.recv(1024)
s.close                     # Закройте сокет, когда закончите

 

Теперь запустите файл server.py в фоновом режиме, а затем запустите файл client.py, чтобы увидеть результат.

# Следование запустило бы сервер в фоне.
$ python server.py & 

# После запуска сервера запустите клиент следующим образом:
$ python client.py

 

Это приведет к следующему результату:

Got connection from ('127.0.0.1', 48437)
Спасибо за подключение

 

Интернет-модули Python

Список некоторых важных модулей программирования сети/интернета в Python.

ПротоколОбщая функцияНомер портаМодуль Python
HTTPИнтернет страницы80httplib, urllib, xmlrpclib
NNTPНовости сети Usenet119nntplib
FTPПередача файлов20ftplib, urllib
SMTPОтправка электронной почты25smtplib
POP3Получение электронной почты110poplib
IMAP4Получение электронной почты143imaplib
TelnetКомандные строки23telnetlib
сусликПередача документов70gopherlib, urllib

 

Пожалуйста, проверьте все упомянутые выше библиотеки для работы с протоколами FTP, SMTP, POP и IMAP.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 31

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close