Получение метаданных из TCP - PullRequest
1 голос
/ 24 февраля 2020

Я преобразовываю объект в байтовый массив и отправляю эту информацию от Клиента 1 к Клиенту 2 через TCP (TCPListener), используя c. Я хочу сказать клиенту 2, с какой целью я должен использовать эту информацию. Как я могу достичь этого?

Есть ли способ, как я могу отправлять метаданные с байтами?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Вы являетесь отправителем и получателем пакета TCP. Вы можете создать свой собственный протокол поверх TCP, который может быть чем-то вроде. Первые 3 байта сообщения TCP являются метаданными для (1), (2) целей. Чем вы могли бы соответственно проанализировать полезную нагрузку TCP-сообщения на стороне получателя.

0 голосов
/ 24 февраля 2020

TCP - это просто поток байтов; у него нет понятия «метаданные» против «сообщения», фактически у него нет понятия «сообщение» - любой логический разрыв между последовательным сообщением целиком зависит от вас. Из-за этого обычно существует понятие «фреймы». Например, мы могли бы определить «фрейм» (где мы используем заголовки для метаданных):

  • 4 байта, int32 с прямым порядком байтов: {количество заголовков} (= H)
  • 4 байта, младший порядковый номер int32: {длина полезной нагрузки в байтах} (= N)
  • H ×
    • чистый ASCII: {header-name} = {header- значение} \ r \ n
  • полезная нагрузка: {N байт}

, но буквально нам доступна любая схема. В некоторых случаях метаданные просты и предсказуемы, и вы можете, по сути, рассматривать их как часть сообщения, а сообщение real - это субданные; например, представьте, что мы отправляем JSON; вместо отправки:

{
    "somedata": 12345,
    // ...
}

отправляем:

{
    "blah-meatadata-whatever": "foo",
    "more-metadata": true,
    "content":
    {
        "somedata": 12345,
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...