Название: Сериализация данных. как? Отправлено: ieroglif от Сентября 21, 2009, 01:34 подскажите - как мне собирать данные в пакет, этот пакет превращать в байтовый массив, и отправлять по сети.
а на обратной стороне принять его, разобрать, и получить информацию в удобном виде? проблемы следующие: 1. в каком виде "хранить" информацию? структуры или классы? 2. как их превращать в байты? 3. как передавать корректно эти байты? имеются базовые знания сети. имеется работающий удп клиент-сервер, который кидает друг другу всякую чушь (но при этом ещё и получает). но мне надо кидать не всякую чушь, а что-то получше =) и вот тут наступил полный ступор с сериализацией. ничего не понимаю. уже с неделю бъюсь, а весь инет твердит о бусте. а можно что-то без буста? как оно вообще работает? Название: Re: Сериализация данных. как? Отправлено: fuCtor от Сентября 21, 2009, 06:10 Если данные имеют свою структуру не содержат полей переменной длины, то их можно напрямую передать приведя тип к массиву байт.
Если имеет переменные поля, то просто укладывать определенным образом, например для строк длина и потом следом сами данные. Если используются стандартные классы, то они сами умеют себя сериализовывать, останется лишь описать некоторый протокол взаимодействия. Название: Re: Сериализация данных. как? Отправлено: Igors от Сентября 21, 2009, 12:31 подскажите - как мне собирать данные в пакет, этот пакет превращать в байтовый массив, и отправлять по сети. Это то же самое что писать данные в файл/поток. Используйте IFF teg'иа на обратной стороне принять его, разобрать, и получить информацию в удобном виде? имя tag (тип) - 4 байта число следующих байт (длина tag) - 4 байта сами данные - переменной длины Tag может содержать вложенные tag'и. Если длину сложно подсчитать, то обычно делают так (псевдокод): Код: theStream.writeUInt32('TAG1'); // write tag ID Если уж "по всем правилам" то надо писать данные в BIG_ENDIAN, но это можно не делать (становится историей) Название: Re: Сериализация данных. как? Отправлено: ieroglif от Сентября 21, 2009, 13:02 т.е. суть получается в том, что я создаю сокет, вешаю на него QDataStream, и туда пишу данные?
а при чтении читаю из сокета байт массив, вешаю на него дата-стрим, и уже читаю из него разбирая данные? Название: Re: Сериализация данных. как? Отправлено: Igors от Сентября 21, 2009, 13:42 т.е. суть получается в том, что я создаю сокет, вешаю на него QDataStream, и туда пишу данные? даа при чтении читаю из сокета байт массив, вешаю на него дата-стрим, и уже читаю из него разбирая данные? |