Я пытаюсь написать сервер на Python для связи с уже существующим клиентом, пакеты сообщений которого представляют собой строки ASCII, но с добавлением четырехбайтовых целочисленных значений без знака, представляющих длину оставшейся строки.
Я сделал приемник, но я уверен, что есть более питонический способ. Пока я не найду его, я не сделал отправителя. Я могу легко вычислить длину сообщения, преобразовать его в байты и передать сообщение. Бит, с которым я борюсь, - это создание целого числа, которое представляет собой массив из четырех байтов.
Позвольте мне уточнить: если моя строка имеет длину 260 символов, я хочу добавить четырехбайтовое целочисленное представление 260 с обратным порядком байтов. Итак, я не хочу, чтобы строка ASCII «0260» находилась перед строкой, нужны четыре (не ASCII) байта, представляющие 0x00000104.
Мой код для получения строки с добавленной длиной от клиента выглядит следующим образом:
sizeBytes = 4 # size of the integer representing the string length
# receive big-endian 4 byte integer from client
data = conn.recv(sizeBytes)
if not data:
break
dLen = 0
for i in range(sizeBytes):
dLen = dLen + pow(2,i) * data[sizeBytes-i-1]
data = str(conn.recv(dLen),'UTF-8')
Я мог бы просто сделать наоборот. Я новичок в Python и чувствую, что то, что я сделал, вероятно, от руки!!
1) Есть ли лучший способ получения и декодирования длины?
2) Что такое «сестринский» метод кодирования длины для передачи?
Спасибо.