Модуль socket

Створення сокет-сервера

import socket

# Створення сокета
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Прив'язка сокета до адреси і порта
server_socket.bind(('localhost', 12345))

# Прослуховування вхідних з'єднань
server_socket.listen(5)
print("Сервер очікує з'єднання...")

while True:
    # Прийняття нового з'єднання
    client_socket, client_address = server_socket.accept()
    print(f"З'єднання встановлено з {client_address}")

    # Отримання даних від клієнта
    data = client_socket.recv(1024)
    print(f"Отримано: {data.decode('utf-8')}")

    # Відправка даних клієнту
    client_socket.sendall(b'Hello, client!')

    # Закриття з'єднання з клієнтом
    client_socket.close()

Тут socket.AF_INET вказує, що ми використовуємо IPv4 для мережевого протоколу, а socket.SOCK_STREAM означає, що ми використовуємо TCP. Ці параметри найчастіше використовуються для створення мережевих додатків.

Після того, як надійшло вхідне повідомлення, потрібно зробити ще чотири дії:

  1. Встановити (accept) з'єднання з клієнтом.
  2. Отримати (receive) запит (дані) від клієнта.
  3. Надіслати (send) клієнту відповідь — теж якісь дані.
  4. Закрити (close) з'єднання.

Метод sendall() використовується замість send(), тому що він гарантує, що всі дані будуть відправлені. Метод send() може відправити тільки частину даних, якщо буфер заповниться.

Число 1024 у recv(1024) вказує максимальну кількість байтів, яку можна отримати за один раз. Це допомагає контролювати обсяг даних, оброблюваних за одну операцію.

Створення сокет-клієнта

import socket

# Створення сокета
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Встановлення з'єднання з сервером
client_socket.connect(('localhost', 12345))

# Відправка даних на сервер
client_socket.sendall(b'Hello, server!')

# Отримання даних від сервера
data = client_socket.recv(1024)
print(f"Отримано від сервера: {data.decode('utf-8')}")

# Закриття сокета
client_socket.close()
2015-2026 © SumyNikNet