Отправка нескольких структур
От: 17dufa  
Дата: 07.09.09 09:12
Оценка:
Добрый день.
Есть задача отправить по сети несколько структур. Есть низкоуровневые функции отправки long, short, double, char * и даже просто блока памяти. Проблема в том, что на клиентской машине и сервере разное физическое представление типа double. То есть отправить структуру просто по ее размеру блоком памяти не получается.
Есть ли способ при указанных ограничениях отправить все необходимые структуры как-то однотипно?
пока на ум приходит только отправка по полям. но 35 структур по 5 полей минимум — это ахтунг сколько копипастного бессмысленного кода.
Re: Отправка нескольких структур
От: OdesitVadim Украина  
Дата: 07.09.09 09:27
Оценка:
Здравствуйте, 17dufa, Вы писали:

1>Добрый день.

1>Есть задача отправить по сети несколько структур. Есть низкоуровневые функции отправки long, short, double, char * и даже просто блока памяти. Проблема в том, что на клиентской машине и сервере разное физическое представление типа double. То есть отправить структуру просто по ее размеру блоком памяти не получается.
А часто и int имеет разное представление. я знаю как минимум 3 способа представления целого 4байтового.
1>Есть ли способ при указанных ограничениях отправить все необходимые структуры как-то однотипно?
да. например, завернуть все в xml или что то подобное. или protobuf от Google.
А можно просто найти найти такие "double", которые выглядят одинаково на обоих платформах, либо ввести свой тип — например предствлять вещественное в виде двух целых — мантиса и порядок.
Re: Отправка нескольких структур
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 07.09.09 09:37
Оценка:
Здравствуйте, 17dufa, Вы писали:
1>Есть ли способ при указанных ограничениях отправить все необходимые структуры как-то однотипно?

Используйте сериализацию в xml-строку (например boost::serialization), и гоняйте её туда-сюда, сериализуя и десериализуя свои структуры.
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
boost::serialization
Re[2]: Отправка нескольких структур
От: 17dufa  
Дата: 07.09.09 10:01
Оценка:
Здравствуйте, Rakafon, Вы писали:
R>Используйте сериализацию в xml-строку (например boost::serialization), и гоняйте её туда-сюда, сериализуя и десериализуя свои структуры.

подтягивать весь boost ради одной сериализации — не вариант. Не объясните как работает boost::serialization? Зашоренные .Net Reflection мозги полностью отказываются понимать, как реализовывать подобное без .Net Reflection.
Re[2]: Отправка нескольких структур
От: 17dufa  
Дата: 07.09.09 10:22
Оценка:
Здравствуйте, Rakafon, Вы писали:
R>Используйте сериализацию в xml-строку (например boost::serialization), и гоняйте её туда-сюда, сериализуя и десериализуя свои структуры.

поднимать весь boost ради одной сериализации — не вариант. да к тому же как я вижу, все равно писать метод serialize. единственная радость, что вместо 2 методов отправки/приема достаточно будет одного.
все-таки хотелось бы функциональности .Net — поставил атрибут [Serializable] и усе, дальше компилятор и среда работают, программист отдыхает.
Re[3]: Отправка нескольких структур
От: byleas  
Дата: 07.09.09 10:24
Оценка:
Здравствуйте, 17dufa, Вы писали:

1>подтягивать весь boost ради одной сериализации — не вариант.

Ну отправляйте любым/своим текстовым протоколом и отпадут проблемы представления простых типов. Если не хочется делать это вручную, использовать какой-нить ORM, или написать свою, простейшую сериализацию.

1> Не объясните как работает boost::serialization?

Для каждой структуры пишется функция, отвечающая за сериализацию этой структуры. Потом она вызывается Там по документации всё понятно, читайте

1>Зашоренные .Net Reflection мозги полностью отказываются понимать, как реализовывать подобное без .Net Reflection.

Вручную.
Re: Отправка нескольких структур
От: K13 http://akvis.com
Дата: 07.09.09 10:37
Оценка:
1>Есть задача отправить по сети несколько структур. Есть низкоуровневые функции отправки long, short, double, char * и даже просто блока памяти. Проблема в том, что на клиентской машине и сервере разное физическое представление типа double. То есть отправить структуру просто по ее размеру блоком памяти не получается.
1>Есть ли способ при указанных ограничениях отправить все необходимые структуры как-то однотипно?
1>пока на ум приходит только отправка по полям. но 35 структур по 5 полей минимум — это ахтунг сколько копипастного бессмысленного кода.

Прикрутить генерацию этого кода по хидеру и прописать в makefile правило для апдейта сгенеренных исходников?
Re[3]: Отправка нескольких структур
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 07.09.09 11:14
Оценка:
Здравствуйте, 17dufa, Вы писали:
1>поднимать весь boost ради одной сериализации — не вариант. да к тому же как я вижу, все равно писать метод serialize. единственная радость, что вместо 2 методов отправки/приема достаточно будет одного.
Ежели не хотите затягивать весь boost, можете выковырять оттуда лишь boost::serialization, вопользовавшись утилитой BCP.

1>все-таки хотелось бы функциональности .Net — поставил атрибут [Serializable] и усе, дальше компилятор и среда работают, программист отдыхает. :beer:

Welcome to real world, Neo!
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Re: Отправка нескольких структур
От: MasterZiv СССР  
Дата: 07.09.09 13:16
Оценка:
17dufa пишет:

> Добрый день.

> Есть задача отправить по сети несколько структур. Есть низкоуровневые
> функции отправки long, short, double, char * и даже просто блока памяти.

С++ такими вещами не занимается. Такими вещами занимаются CORBA, DCOM
и подобные им аналоги. Вот их и смотри.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Отправка нескольких структур
От: evjiii  
Дата: 07.09.09 20:10
Оценка:
так а чем Вам не понравился вариант с protobuf, который подсказали в первом же ответе?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.