Стратегия работы с 64-битной / 32-битной при передаче двоичных данных между машинами через TCP / IP - PullRequest
0 голосов
/ 23 октября 2009

Я работал над проектом, в котором мне нужно передавать большие объемы двоичных данных, некоторые из которых представляют собой структуры, перечисления, списки и т. Д., А некоторые - чисто двоичные данные. Я пытаюсь разработать стратегию для решения проблем, когда передача данных между 64-битной и 32-битной компиляцией.

В настоящее время я помечаю сборку как целевую 32-битную, чтобы избежать этой проблемы, но я хочу открыть и использовать 64-битную / 32-битную, выбрав Any.

Я знаю, что "мог" использовать сериализацию, но это добавляет к передаче довольно много дополнительных данных, и поскольку эти передачи могут проходить через VPN и т. Д., Было решено не использовать чистую сериализацию .Net из-за добавленной дополнительной нагрузки .

Поэтому, когда вы делаете этот процесс, было бы лучше:

  1. Добавить 1 байт в КАЖДЫЙ блок данных, который передается с указанием размера битов, который использовался для кодирования данных на начальном конце
  2. Добавить 1 байт, который используется в начальном рукопожатии между системами для указания размера битов, который будет использоваться для всей связи
  3. Не используйте типы данных по умолчанию (целочисленные, короткие и т. Д.), А вместо этого кодируйте их в данных, чтобы передача не зависела от системных размеров типов данных.

1 Ответ

1 голос
/ 23 октября 2009

.Net гарантирует, что Int32 всегда будет 32-битным:

Тип значения Int32 представляет подписанный целые числа со значениями от Отрицательный 2 147 483 648 через положительный 2 147 483 647

И int - это просто псевдоним для типа System.Int32. То же самое относится и к другим типам значений в .Net (байты, короткие, длинные и т. Д.).

Но если вам нужны доказательства, вот вывод:

Console.WriteLine(int.MaxValue);
Console.WriteLine(sizeof(int));

работает на моем компьютере под 64-битной Windows Server 2008 с таргетингом на x64:

2147483647
4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...