Автор
Тема:

Модуль socket в Python

 (Прочитано 614 раз)

saitikdev

  • Administrator
  • Неплохо разбираюсь в сайтах
  • *****
  • Сообщений: 2073
  • Karma: +1000/-0
    • Просмотр профиля
Модуль socket в Python
« : Января 06, 2019, 09:56:45 am »
Модуль socket в Python

Сокет - это позволяет соединяться между процессами, даже если они запущены на разных компьютерах. Создать его - это как создать розетку (сервер, или принимающая сторона) , также можно его создавать и на отправляющей стороне (Клиент) - это как вилка(штепсель), которую втыкаем в розетку.

Этим сегодня и займемся...


Как видно на картинке и подытожим основные функции Api данного модуля:

  • socket()
  • bind()
  • listen()
  • accept()
  • connect()
  • connect_ex()
  • send()
  • recv()
  • close()



1. Сначала сервер инициализирует сокет и готовиться к прослушиванию
socket()
bind()
listen()
accept()

2. Далее идет соединение и обмен информацией с клиентом
connect()
connect_ex()
send()
recv()

3. Закрываем сокет
close()


Например, создадим Server
import socket

HOST = '127.0.0.1'
PORT = 1983

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

Расшифруем:

Для начала нужно понимать почему используется оператор with

строчка
socket.socket(socket.AF_INET, socket.SOCK_STREAM) - инициализирует сокет,
где:
AF_INET - сети ip-v4
SOCK_STREAM - показывает тип соединения через TCP

s.bind((HOST, PORT)) - связывает сокет с заданными выше хостом и портами, тут задается кортеж ,  первый параметр тут строка!

s.listen() - блокирует и ждет прослушку. Блокировке подвергается определенная очередь, которая задается цифрой в скобках, например s.listen(5) - 5 соединений встают в очередь и по очереди начнут слушать. Если не задать - то будет по умолчанию, часто ставят 1.

conn, addr = s.accept()
s.accept() - сокет устанавливается в режим ожидания прослушки / как клиент законнектился, то возвращает кортеж с (host, port) для IP-v4

После получения (host, port) от s.accept(), в бесконечном цикле while
data = conn.recv(1024) - получается информация при помощи метода recv (ограниченным объемом в 1024 байт)

и
conn.sendall(data) - отсылается обратно

если нет больше пакетов для отправки, оператор with сам закрывает сокет, без указания команды s.close() - в этом его и удобство.


Скрипт Клиента (тот, кто хочет подключиться)

Он чуть проще

import socket

HOST = '127.0.0.1'
PORT = 1983
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

тут все уже понятно:
1) инициализируется сокет
2) отправляется информация
3) s.sendall(b'Hello, world') - получается и буква b - необходима в Python3

« Последнее редактирование: Января 08, 2019, 09:19:02 am от saitikdev »
Качественное SeoСео консультации - от специалиста с опытом более 10 лет | Рекомендуем - Лучший хостинг

 

Новые темы IT

Новые темы по Маркетингу