длина сообщения в python send() аналогична send() в C

#c #python-3.x #sockets #ssl #openssl

#c #python-3.x #сокеты #ssl #openssl

Вопрос:

Я пытаюсь отправить данные, используя сокеты и ssl в python. Сервер написан на C и поэтому ожидает получения:

 bytesRx = recv(socket, buffer, sizeof(buffer),0)
  

итак, в C функция отправки:

 send(socket, messsage, length, 0)
  

Я хочу имитировать функцию отправки, но в python внутри функции send () нет опции для отправки длины сообщения. Отправляется только само сообщение.

 secure_socket.send(message)
  

есть ли способ включить длину сообщения в функцию python send(), чтобы сервер был доволен?

Комментарии:

1. У вас есть доказательства того, что сервер недоволен?

2. 1) send Системный вызов НЕ отправляет длину сообщения, длина используется только потому, что ядру необходимо знать длину данных для отправки. 2) send Метод сокетов Python является версией send системного вызова более высокого уровня, и поскольку объекты python, которые могут быть отправлены через send , уже имеют длину (извлекаемую через len() ), нет необходимости указывать ее. — Функция Python выполнит соответствующий send системный вызов под капотом, добавив длину для вас. 3) «сделать сервер счастливым» ничего не значит. Если у вас возникли проблемы, покажите код.

3. @MarcoBonelli Спасибо за объяснение.

Ответ №1:

В Python длина сообщения равна… длина сообщения. Строки Python имеют длину, а строки C — нет. Вот почему вам нужно указать сообщение и длину отдельно в C, но не в Python.

Если вы хотите отправить только первые 100 байт сообщения, вы можете написать:

 secure_socket.send(message[:100])
  

В Python message[:100] означает первые 100 элементов в message — в данном случае, я предполагаю, message это строка байт, поэтому это означает первые 100 байт.

Комментарии:

1. «Сообщения Python имеют длину, а сообщения C — нет» — понятие сообщения не существует ни в C, ни в Python.

2. @MarcoBonelli Я использую слово «сообщение», чтобы было очевидно, как предложение относится к коду.