Название: Работа с данными Отправлено: demaker от Июня 16, 2011, 14:01 Подскажите :) Допустим я - сервер и посылаю данные в несколько пакетов (тип данных QByteArray) как мне сделать так, чтобы клиент во время получения данных с меня не послал еще один запрос??? Как сохранить целостность буффера???
можно ли сделать свою структуру типа списка: struct Data{ QByteArray *ptr_arrData; Data *next; }; ??? Название: Re: Работа с данными Отправлено: asvil от Июня 16, 2011, 14:09 Первыми двумя байтами посылать размер массива.
Название: Re: Работа с данными Отправлено: demaker от Июня 16, 2011, 14:20 Клиент сам заранее знает сколько он с меня хочет считать. Мне нужно ему выдать неколько посылок с данными за один запрос, как мне грамотно ему обознчить что это начало, а это конец, чтобы он мог их соединить корректно??? Начало понятно, что я ему вышлю код команды на его запрос и поехали и буду слать в буффер у которого объем ограничен. Хочу понять как грамотно сделать связь между посылками и обозначить их окончание на запрос, что готов к следующему???
Название: Re: Работа с данными Отправлено: kuzulis от Июня 16, 2011, 14:21 Имхо, лучше адаптируй какой нить протокол обмена типа XModem и т.п. под себя, или же сам придумай алгоритм обмена сообщениями при передаче данных.
Например, клиент запрашивает какие то данные, кадром с форматом (в hex): <старт байт><код запрашиваемых данных><стоп байт> например: 68 33 16 где: старт байт = 68h код = 33h стоп байт = 16h сервер, приняв этот пакет, проверяет его на старт, стоп, и на код данных и если всё правильно, то начинает слать клиенту данные, например в таком виде: <старт байт><контрольный байт><длина данных><данные><стоп байт> где старт байт, стоп байт - аналогично контрольный байт (в битах) : бит 7 = 1 - значит этот кадр - начало данных (т.е. первый кадр) бит 6 = 1 - значит кадр - конец данных (т.е. последний) если все биты в единице - значит кадр не первый и не последний биты 5-4 - резерв биты 3-0 - номер последовательности (номер кадра) от 0 - до 15 Сервер при передаче следующего кадра увеличивает номер кадра на единицу. Клиент, получив кадр от сервера проверяет его на старт/стоп байты, на биты в контрольном байте и, если кадр валидный - то извлекает из него пользовательские данные и шлет серверу кадр "положительная квитанция" (ACK) иначе - шлет NACK Формат ACK/NACK придумай сам. Если сервер принял ACK - то он передает следующий кадр, если NACK - то повторяет предыдущий. Вот, как-то так. Будет сурово и надежно :) Название: Re: Работа с данными Отправлено: demaker от Июня 16, 2011, 14:39 Протокол есть только по нему более 250 байт нельзя полслать а мне надо заделать около 800 байт, я хочу разбить посылку на 4 посылки, как мне это сделать грамотно??? ???
|