Программирование сокетов на Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании мы исследуем мир программирования сокетов на Python, разыгрывая сказочную сцену в динамичном карнавале с участием фантастического художника-мастера воздушных шаров. Карнавал кипит жизнью и энергией, а фентезийный художник-мастер воздушных шаров завораживает публику своими потрясающими творениями. Целью этого лабораторного задания является погружение в область программирования сокетов и создание наших собственных волшебных сетевых соединений, подобно завораживающим воздушным шарам на карнавале.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/NetworkingGroup(["Networking"]) python/NetworkingGroup -.-> python/socket_programming("Socket Programming") subgraph Lab Skills python/socket_programming -.-> lab-271592{{"Программирование сокетов на Python"}} end

Создание базовой коммуникации между клиентом и сервером

В этом шаге мы создадим простое соединение между клиентом и сервером с использованием программирования сокетов на Python. Клиент и сервер будут общаться и обмениваться данными в рамках базового взаимодействия.

  1. Откройте новый файл Python под названием server.py в директории ~/project.
  2. Реализуйте код сервера в server.py.
## server.py
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(1)

connection, address = server_socket.accept()
with connection:
    print('Connected by', address)
    while True:
        data = connection.recv(1024)
        if not data:
            break
        connection.sendall(data)
  1. Откройте другой файл Python под названием client.py в директории ~/project.
  2. Реализуйте код клиента в client.py.
## client.py
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
client_socket.sendall(b'Hello, server')
data = client_socket.recv(1024)
print('Received', repr(data))

Запустите эти два файла одновременно и нажмите "Разделить терминал", чтобы это осуществить. На вашем терминале должны быть отображены следующие сведения:

labex:project/ $ python server.py
Connected by ('127.0.0.1', 40082)
labex:project/ $ python client.py
Received b'Hello, server'

Повышение эффективности сериализации данных для коммуникации

В этом шаге мы повысим эффективность коммуникации между клиентом и сервером путём сериализации и десериализации данных для передачи.

  1. Измените код server.py для включения сериализации и десериализации данных.
## server.py
import socket
import pickle

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(1)

connection, address = server_socket.accept()
with connection:
    print('Connected by', address)
    while True:
        data = connection.recv(1024)
        if not data:
            break
        deserialized_data = pickle.loads(data)
        processed_data = deserialized_data.upper()
        connection.sendall(processed_data.encode())
  1. Измените код client.py для включения сериализации и десериализации данных.
## client.py
import socket
import pickle

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
data_to_send = pickle.dumps('Hello, server')
client_socket.sendall(data_to_send)
received_data = client_socket.recv(1024)
print('Received', received_data.decode())

Запустите эти два файла одновременно и нажмите "Разделить терминал", чтобы это осуществить. На вашем терминале должны быть отображены следующие сведения:

labex:project/ $ python server.py
Connected by ('127.0.0.1', 40082)
labex:project/ $ python client.py
Received HELLO, SERVER

Резюме

В этом лабораторном задании мы погрузились в очаровательный мир программирования сокетов на Python, вдохновлённые магическим атмосферой карнавала и творениями фантастического художника-мастера воздушных шаров. Руководствуя вас по шагам создания соединений между клиентом и сервером, повышения эффективности коммуникации с использованием сериализации данных и др., мы стремились дать погружённое и образовательное впечатление, чтобы вы овладели искусством программирования сокетов и радовались чудесным соединениям, которые вы можете создать.