Предположим, я определил свой собственный протокол прикладного уровня поверх TCP для обмена мгновенными сообщениями. Я использовал структуру пакета для сообщений. Поскольку я использую симметричное (AES) и асимметричное (RSA) шифрование, я получаю разный размер пакета для разных типов сообщений. Теперь к моим вопросам.
Как прочитать из сокета, что я получаю один пакет прикладного уровня? Какой размер указать?
Заранее спасибо.
Я имею в виду два подхода.
Считайте из потока TCP фиксированное количество байтов, которое представляет фактический размер пакета, и, наконец, повторно прочитайте из потока ранее собранный размер байтов.
Считайте максимальный размер пакета из потока. Проверьте фактический размер полученных байтов и решите, какой это был тип сообщения.
Теперь более общий вопрос. Должен ли я предоставлять метаданные, такие как размер пакета, метод шифрования, получатель, отправитель и т. д.? Если да, следует ли мне также шифровать эти метаданные?