Передача байтовых строк по сети в Python
Здравствуйте. В сегодняшней статье мы рассмотрим , как перевести целое число в байтовую строку, а затем передать его по сети в Python.
Итак, когда мы говорим о числах, то мы обычно имеем в виду десятичную систему счисления. Однако, для компьютеров, которые работают в двоичной системе счисления, числа представляются в виде битовых последовательностей (байтов), состоящих из нулей и единиц. Таким образом, для обработки чисел в компьютерных системах необходимо преобразовывать их из десятичной системы в двоичную, а затем представлять в виде байтовых строк.
Это может быть полезно, например, для передачи числовых данных по сети, для сохранения числовых значений в файлы или базы данных, для обработки и анализа данных в программном коде и т.д. Кроме того, преобразование чисел в байтовые строки может быть полезным для представления данных в удобном для компьютера формате, что может повысить скорость и эффективность обработки данных.
Конвертация чисел в байтовые строки в Python выполняется с помощью функции to_bytes() встроенной в класс int.
n = 123456789
b = n.to_bytes((n.bit_length() + 7) // 8, 'big')
print(b) # выводит: b'\x07[\xcd\x15'
Один из примеров применения конвертации чисел в байтовые строки в 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 передавать данные по сети.
-
- Михаил Русаков
Комментарии (1):
Уже лет 7 сижу на этом сайте и все с него беру. Отличная у вас команда. Работа. Виктор МАрчевский, если ты тут сидишь, дай знать. Привет тебе от кво-мастера. Всем мира благополучия!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.