Если размер не требуется, я вижу два пути, чтобы получить его:
- отправить его в явном виде вместе с зашифрованными данными.
- Буфер все данные на стороне сервера, пока он не будет получен полностью. Следите за тем, сколько байтов вы получили.
С первых, вы могли бы попробовать что-то вроде этого:
<number of bytes to follow><separator symbol><message data>
Второй требует, чтобы вы смогли обнаружить конец сообщения правильно. Вы можете обнаружить это через определенные последовательности сообщений. Затем, однако, вам нужно избежать такой последовательности в сообщении, если оно появится. Что-то похожее на то, как символы экранируются в C/C++/Java/C# ... Если не использовать первый подход, который мне кажется самым простым, это то, что я бы предпочел бы против варианта ниже ...
Альтернативой может быть закрытие соединения после завершения сообщения. Затем, однако, вам нужно определить, если соединение было закрыто регулярно, или если он был сломан, потому что в последнем случае, вы не должны пытаться расшифровать ...
Можно даже сочетать оба подхода:
<message start sequence>
<number of bytes to follow>
<separator symbol>
<encrypted data>
<message end sequence>
Как последовательность запуска сообщения, так и последовательность сообщений должны быть экранированы. Если вы обнаружите последовательность запуска сообщения, то в зашифрованных данных или в конце последовательности сообщений до того, как количество байтов было прочитано, вы знаете на стороне сервера, что что-то пошло не так ...
Что говорит документация? Какой код вы используете? – tadman
При отправке зашифрованных данных вы также должны отправить длину. (Вы должны сделать это в любом случае с помощью comm comms, иначе получатель не узнает, когда пакет будет завершен) –
Вам просто нужно реализовать заполнение данных, которые нужно зашифровать. Он позволяет восстановить исходную длину потока после дешифрования. См. Https://en.wikipedia.org/wiki/Padding_(cryptography) для получения более подробной информации – Serge