Latest web development tutorials

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

Python предлагает два уровня доступа к сети услуг. :

  • сети низкого уровня услуг для поддержки основной сокет, он обеспечивает стандартный BSD Sockets API, вы можете получить доступ ко всем методам базового интерфейса сокетов операционной системы.
  • Высокий уровень модуля сетевого сервиса SocketServer, он обеспечивает центральный класс сервера, вы можете упростить разработку сетевого сервера.

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

Разъем также известный как "гнездо", приложение, как правило, выдается на "гнездо" на запрос запроса сети или сети ответ, так что процесс между узлами или между компьютером на могут общаться.


Функция сокета ()

Python, мы используем функцию сокета () для создания сокета, синтаксис выглядит следующим образом:

socket.socket([family[, type[, proto]]])

параметры

  • семьи: семья может сделать сокет или AF_INET AF_UNIX
  • Тип: Тип сокета может быть ориентированным на соединение или в установления соединения SOCK_STREAM или SOCK_DGRAM
  • Протокол: Как правило, не заполняют по умолчанию к нулю.

Объект Socket (встроенный) метод

функция описание
Серверный сокет
s.bind () Связующий адрес (хост, порт) к разъему на AF_INET, в виде кортежа (хост, порт) указывает адрес.
s.listen () Запустить TCP прослушивания. Отставание указано до отказа соединения, то операционная система может приостановить максимальное количество подключений. Это значение по крайней мере 1, большинство приложений может быть установлен на 5.
s.accept () Пассивный прием клиентских соединений TCP (блокирование) в ожидании прихода
сокет клиента
s.connect () Активный инициализации соединения TCP сервера. Общий адрес формата кортежей (имя хоста, порт), если ошибка соединения, возвращается сообщение об ошибке socket.error.
s.connect_ex () подключиться () расширенная версия функции возвращает код ошибки при возникновении ошибки, вместо того, чтобы бросать исключение
Торцевые функции общественных целей
s.recv () Прием данных TCP, данные возвращаются в виде строки, указать максимальное количество данных, которые должны быть получены BUFSIZE. Предоставить дополнительную информацию о флаге сообщения, как правило, могут быть проигнорированы.
s.send () Отправка данных TCP, отправляет строку данных в сокет-соединение. Возвращаемое значение количество байт для отправки, это число может быть меньше, чем строки байтов.
s.sendall () Полное передача данных TCP, полные данные передачи TCP. Он посылает строку данных в сокет-соединения, но перед возвращением будет пытаться отправить все данные. Успешное возвращение None, исключение отказ не выбрасывается.
s.recvform () Прием UDP данных () похож на RECV, но возвращаемое значение (данные, адрес). В котором данные является строка, содержащая полученные данные, адрес данные передаются адрес сокета.
s.sendto () Передача данных по UDP, отправлять данные в сокет, адрес в виде (IPADDR, порт) кортежа указанный удаленный адрес. Возвращаемое значение количество отправленных байтов.
s.close () Закройте гнездо
s.getpeername () Возвращает сокет подключения удаленного адреса. Возвращаемое значение, как правило, кортеж (IPADDR, порт).
s.getsockname () Возвращает собственный адрес сокета. Обычно кортеж (IPADDR, порт)
s.setsockopt (уровень, optname, значение) Установите значение данного опции сокета.
s.getsockopt (уровень, optname [.buflen]) Возвращаемое значение опции сокета.
s.settimeout (тайм-аут) Установить гнезда период тайм-аута, тайм-аут представляет собой число с плавающей запятой, в секундах. Нет Значение указывает на отсутствие тайм-аута. Как правило, период тайм-аута должен просто создать набор сокетов, так как они могут быть использованы для управления соединения (например, Connect ())
s.gettimeout () Возвращает значение текущего тайм-аута в секундах, если нет установленного периода тайм-аута, возвращает None.
s.fileno () Возвращает файловый дескриптор сокета.
s.setblocking (флаг) Если флаг равен 0, то сокет установлен в неблокирующий режим, иначе сокет в режим блокировки (значение по умолчанию). режим без блокировки, если вы звоните ПРИЕМ () не нашли каких-либо данных, или отправить (вызов) не может сразу посылать данные, это вызовет socket.error исключение.
s.makefile () Создать соответствующие документы в связи с розеткой

Простой пример

сервер

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

Теперь мы можем указать службы с помощью вызоваBind (имя хоста, порт) функциюпорта (порта).

Далее, мы называем метод приниматьобъектов сокета. Метод ожидает подключения клиента и вернуть объектподключения,представляющий подключенное к клиенту.

Полный код выглядит следующим образом:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 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.connect (hosname, порт) метод открывает соединение TCP на хост дляимени хостапорта поставщикам услуг порта.После подключения к сети мы можем пост-данные с сервера, помните, что после завершения операции необходимо закрыть соединение.

Полный код выглядит следующим образом:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

Теперь мы должны даже открыть терминал, первый терминал выполняет server.py файл:

$ python server.py

Второй терминал выполняет client.py файл:

$ python client.py 
欢迎访问本教程!

Это наш первый, а затем откройте терминал, вы увидите следующую информацию выводится:

连接地址: ('192.168.0.118', 62461)

Модули Интернет Python

Вот некоторые из важных программирования сетевой модуль Python:

соглашение Полезные функции Номер порта Модули Python
HTTP веб-доступ 80 HTTPLIB, URLLIB, XMLRPCLIB
NNTP Чтение и размещение новостных статей, известный как "пост" 119 nntplib
FTP Передача файлов 20 ftplib, URLLIB
SMTP Отправить по электронной почте 25 smtplib
POP3 Получение почты 110 poplib
IMAP4 Получить почту 143 imaplib
Telnet Командная строка 23 telnetlib
суслик Найти информацию 70 gopherlib, URLLIB

Более подробную информацию можно найти в официальном сайте Питона сокета библиотеки и модули .