Передача байтовых строк по сети в 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 передавать
данные по сети.