Python — сетевое программирование
Предыдущая страницаСледующая страница
Python предоставляет два уровня доступа к сетевым службам. На низком уровне вы можете получить доступ к базовой поддержке сокетов в базовой операционной системе, что позволяет реализовывать клиенты и серверы как для протоколов, ориентированных на установление соединения, так и для протоколов без установления соединения.
В Python также есть библиотеки, обеспечивающие высокоуровневый доступ к определенным сетевым протоколам уровня приложений, таким как FTP, HTTP и т. д.
В этой главе вы познакомитесь с самой известной концепцией сетевых технологий — программированием сокетов.
Что такое сокеты?
Сокеты — это конечные точки двунаправленного канала связи. Сокеты могут взаимодействовать внутри процесса, между процессами на одном компьютере или между процессами на разных континентах.
Сокеты могут быть реализованы через ряд различных типов каналов:сокеты домена Unix, TCP, UDP и т. д. сокет библиотека предоставляет специальные классы для работы с общими транспортами, а также общий интерфейс для работы с остальными.
У сокетов есть свой словарь —
Серийный номер | Термин и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>
Сокет Модуль
Чтобы создать сокет, вы должны использовать socket.socket() функция доступна в сокете модуль, который имеет общий синтаксис —
s = socket.socket (socket_family, socket_type, protocol=0)
Вот описание параметров —
-
семейство_сокетов − Это либо AF_UNIX, либо AF_INET, как объяснялось ранее.
-
тип_сокета − Это либо SOCK_STREAM, либо SOCK_DGRAM.
-
протокол − Обычно это не учитывается, по умолчанию используется значение 0.
Если у вас есть сокет объект, то вы можете использовать необходимые функции для создания клиентской или серверной программы. Ниже приведен список необходимых функций —
Методы сокета сервера
Серийный номер | Метод и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
Методы клиентских сокетов
Серийный номер | Метод и описание |
---|---|
1 | <тд>
Общие методы сокетов
Серийный номер | Метод и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>
Простой сервер
Для записи интернет-серверов мы используем сокет функция, доступная в модуле сокета, для создания объекта сокета. Затем объект сокета используется для вызова других функций для настройки сервера сокетов.
Теперь вызовите bind(hostname, port) функция для указания порта за вашу услугу на данном хосте.
Затем вызовите accept метод возвращаемого объекта. Этот метод ожидает, пока клиент подключится к указанному вами порту, а затем возвращает connection объект, представляющий соединение с этим клиентом.
#!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection
Простой клиент
Давайте напишем очень простую клиентскую программу, которая открывает соединение с заданным портом 12345 и заданным хостом. Очень просто создать клиент сокета, используя socket Python. функция модуля.
socket.connect(имя хоста, порт) открывает TCP-соединение с hostname на порт . Когда у вас открыт сокет, вы можете читать его, как любой объект ввода-вывода. Когда закончите, не забудьте закрыть его, как если бы вы закрыли файл.
Следующий код представляет собой очень простой клиент, который подключается к заданному хосту и порту, считывает все доступные данные из сокета и затем завершает работу —
#!/usr/bin/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close() # Close the socket when done
Теперь запустите этот server.py в фоновом режиме, а затем запустите выше client.py, чтобы увидеть результат.
# Following would start a server in background. $ python server.py & # Once server is started run client as follows: $ python client.py
Это даст следующий результат —
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Интернет-модули Python
Список некоторых важных модулей сетевого/интернет-программирования на Python.
Протокол | Общая функция | Номер порта | Модуль Python |
---|---|---|---|
HTTP | Веб-страницы | <тд>80тд>httplib, urllib, xmlrpclib | |
ННТП | Новости Usenet | 119 | nntplib |
FTP | Передача файлов | 20 | ftplib, urllib |
SMTP | Отправка электронной почты | 25 | смтплиб |
POP3 | Получение электронной почты | 110 | поплиб |
IMAP4 | Получение электронной почты | 143 | imaplib |
Телнет | Командные строки | <тд>23тд>telnetlib | |
Суслик | Передача документов | <тд>70тд>gopherlib, urllib |
Пожалуйста, проверьте все упомянутые выше библиотеки для работы с протоколами FTP, SMTP, POP и IMAP.
Дополнительная литература
Это был быстрый старт с программированием сокетов. Это обширная тема. Рекомендуется перейти по следующей ссылке, чтобы найти более подробную информацию –
-
Программирование сокетов Unix.
-
Библиотека сокетов Python и модули.
Python