Чтение / запись структур C в / из C# по протоколу TCP/ip
Привет,
Может быть, я прошу слишком многого,но я попробую. Я работаю в C уже почти 30 лет
лет, C++ уже почти 15, но я новичок в C#.
У нас есть большое применение В С. Он поддерживает tcp / ip-сервер для
администрация. В настоящее время существует клиент графического интерфейса x-windows (на языке C), который
подключается к этому серверу для настройки и мониторинга приложения. Мы
хочу заменить старый клиент x-windows на что-то, что будет работать на ПК.
Нам сказали, что C# хорошо подходит.
Вся связь между серверным приложением и клиентским графическим интерфейсом осуществляется через
обмен сообщениями, причем формат сообщений высокого уровня:
< длина ><заголовок & gt; [необязательно < данные>]
2-байтовая фиксированная длина 0 или более фиксированной длины или строка
- "Длина" - это 16-битное целое число без знака с общим размером сообщения (не
включая саму "длину").
- ≪header> - Это структура в стиле C со смесью подписанных / неподписанных ints различных типов.
размеры (8, 16, 32 и 64-битные), некоторые C-style фиксированной длины, null-terminated
строки из 8-битных символов и некоторые битовые поля (unsigned int, где каждый
бит используется для обозначения отдельного флага)
- Поле<data & gt; (если оно существует) будет либо одной, либо несколькими структурами C-стиля, либо
строка символов, все они основаны на типе сообщения в заголовке <.
Существует более 100 различных структур, используемых в поле "Данные" (различные
элементы конфигурации, статистические элементы,...).
У меня возникли некоторые трудности с имитацией C-struct/c-strings в C#. Я
видел в интернете кучу вещей о маршаллинге, небезопасном коде, неуправляемом коде,
LPStr, UTF8,..., но не видел краткого примера:
а) чтение tcp/ip в C-структуре (с C-строками) и использование его в C#ec
б) выполнение обратного (перестройка C-структуры для отправки)
Вот вымышленная 40-октетная структура C, которую можно использовать в качестве заголовка в примерах (u16
это беззнаковый 16-битный инт, с16-это 16-разрядный инт ...):
typedef struct TestHeader { u16 messageType; s16 num1; char text1[4]; char text2[8]; u64 num2; s32 num3; u8 num4; u8 num5; u16 flag1; // each bit used as a flag char text3[4]; char text4[4]; } TestHeader;
Что я уже пробовал:
маршаллинг, небезопасный код, неуправляемый код,
LPStr, UTF8, ...,
Patrice T
И в чем же вопрос ?
Dave Kreskowiak
Я не совсем уверен, с чем у вас проблема, но поскольку вы исходите из фона C/C++, вы можете немного переосмыслить это.
Google для " двоичной сериализации C#". Посмотрим, что это даст тебе.