Передача байтовых строк по сети в Python

Передача байтовых строк по сети в Python

Передача байтовых строк по сети в Python

Здравствуйте. В сегодняшней статье мы рассмотрим , как перевести целое число в байтовую строку, а затем передать его по сети в Python.

Итак, когда мы говорим о числах, то мы обычно
имеем в виду десятичную систему счисления.
Однако, для компьютеров, которые работают в двоичной системе счисления, числа представляются
в виде битовых последовательностей (байтов), состоящих из нулей и единиц.
Таким образом, для обработки чисел в компьютерных системах необходимо преобразовывать
их из десятичной системы в двоичную, а затем представлять в виде байтовых строк.

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

Конвертация чисел в байтовые строки в Python выполняется с помощью функции to_bytes() встроенной
в класс int.


n = 123456789
b = n.to_bytes((n.bit_length() + 7) // 8, 'big')
print(b) # выводит: b'x07[xcdx15'

Один из примеров применения конвертации чисел в байтовые строки в Python — это работа
с сетевыми протоколами. Например, при работе с протоколом TCP/IP, данные передаются в
виде байтовых последовательностей, а для отправки числовых данных, таких как числа с
плавающей точкой или целые числа, их необходимо преобразовать в байтовые строки.

Рассмотрим пример отправки целого числа по сети с использованием байтовых строк:


import socket

HOST = 'localhost' # адрес сервера
PORT = 12345 # порт сервера

# создаем сокет и подключаемся к серверу
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))

# отправляем число в виде байтовой строки
n = 123456789
b = n.to_bytes((n.bit_length() + 7) // 8, 'big')
client_socket.sendall(b)

# закрываем соединение
client_socket.close()

В этом примере мы создали клиентское соединение с сервером, используя модуль socket.
Затем мы преобразовали целое число n в байтовую строку b с помощью метода to_bytes().
Далее мы отправили байтовую строку по сети с помощью метода sendall().
В конце мы закрыли клиентское соединение.

На стороне сервера мы можем получить отправленное число, прочитав байтовую строку из
сокета и декодируя ее обратно в целое число:

import socket

HOST = 'localhost' # адрес сервера
PORT = 12345 # порт сервера

# создаем сокет и привязываем его к адресу и порту
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(1)

# ожидаем подключения клиента
conn, addr = server_socket.accept()
print('connected by', addr)

# читаем байтовую строку из сокета и декодируем ее в целое число
data = conn.recv(1024)
n = int.from_bytes(data, 'big')
print(n)

# закрываем соединение
conn.close()
server_socket.close()

Для запуска клиентского скрипта и серверного скрипта необходимо запустить их в разных
терминальных окнах.

Откройте первое терминальное окно и перейдите в каталог, где находится клиентский
скрипт.


>>>cd my_project

# Запустите клиентский скрипт, введя следующую команду:

python client.py

# Откройте второе терминальное окно и перейдите в каталог, где находится серверный 
скрипт

>>> cd my_project

# Запустите серверный скрипт

python server.py

После запуска обоих скриптов, клиентское приложение должно отправить целое число на
сервер, который должен прочитать его и вывести на экран.

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

Таким образом, мы рассмотрели, как при помощи байтовых строк в Python передавать
данные по сети.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий