#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 Я использую слово «сообщение», чтобы было очевидно, как предложение относится к коду.