Форум: "Сети";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизПересылка variant массива по T*Socket Найти похожие ветки
← →
ISP © (2006-10-13 15:59) [0]Схема клиент/сервер. По запросу клиента, сервер генерирует таблицу и передает клиенту. Сложность в том, что структура таблицы на сервере не определена заранее и может состоять из различных переменных. В данной версии, таблица зашивается в StringList и пересылается клиенту, который в свою очередь конвертирует её в свой типизированый массив, но возникают проблеммы с форматом данных (TDate, TTime, Extended и т.д.) и лишней конвертацией, что весьма заметно при крупных объемах. Может посоветуете другой вариант?
Появилась идея пересылать variant массив, но не получается.
С типизированным делаю примерно так:
type TRec = record
int:array of array of integer;
end;
procedure TForm1.SendData(Socket:TCustomWinSocket; rec:TRec);
var msData : TMemoryStream;
begin
.....
msData := TMemoryStream.Create;
msData.Write(rec, SizeOf(rec));
msData.Position := 0;
Socket.SendStream(mydata);
end.
но с вариантом это не прокатывает.
type TRec = record
int:array of array of variant;
end;
Подскажите где покопатся?
← →
Reindeer Moss Eater © (2006-10-13 16:08) [1]Универсальный вариант - пересылать xml документ.
← →
ISP © (2006-10-13 16:37) [2]
> Reindeer Moss Eater © (13.10.06 16:08) [1]
>
> Универсальный вариант - пересылать xml документ.
Но ведь в xml переменые типа TDateTime, Currency тоже записываются в виде текста (или я что-то пропустил?), а значит опять возникает проблема с форматами при обратном конвертировании. В моём случае желательно не менять форматы установленные в системе на клиенте.
← →
Орион © (2006-10-13 17:22) [3]> [2] ISP © (13.10.06 16:37)
А что мешает ввести поле формата данных и в зависимости от него конвертировать?
← →
ISP © (2006-10-13 17:32) [4]
> Орион © (13.10.06 17:22) [3]
>
> > [2] ISP © (13.10.06 16:37)
>
> А что мешает ввести поле формата данных и в зависимости
> от него конвертировать?
В данном случае с xml я ни чего не выигрываю по сравнению со StringList. Таже конвертация туда/обратно, а хотелось от этого избавиться. Как-то не верится что нет иного решения.
← →
Polevi © (2006-10-13 17:42) [5]сериализуй варианты в поток и затем обратно
посмотри VarArray ф-ии - VarArrayLock, VarArrayCreate итд
← →
ISP © (2006-10-13 18:50) [6]
> Polevi © (13.10.06 17:42) [5]
Благодаствуем. Не уверен что до конца понял, но попробую поискать там...
← →
SpellCaster (2006-10-16 12:38) [7]Хм, а что мешает передавать поток байт, а на принимающей стороне уже его декодировать?
← →
Сергей М. © (2006-10-16 13:47) [8]
> ISP © (13.10.06 18:50) [6]
см. в кач-ве примера сериализации методы TDataBlockInterpreter.Read/WriteArray, TDataBlockInterpreter.Read/WriteVariant в юните sconnect.pas
← →
ISP © (2006-10-16 15:53) [9]
> Сергей М. © (16.10.06 13:47) [8]
Во теперь понял, оно самое :)
> Polevi © (13.10.06 17:42) [5]
> Сергей М. © (16.10.06 13:47) [8]
Спасибо за помощь.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.1 c