Форум: "Сети";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
ВнизПередача структуры по сокету Найти похожие ветки
← →
evgen_2001 (2001-11-05 16:10) [0]Помогите с сабжем!
← →
panov (2001-11-05 16:34) [1]Как правило, в любых компонентах(из сокетных) есть метод Send, позволяющий передавать непрерывный буфер данных.
Если использовать packed record, то запись у тебя будет располагаться в непрерывном участке памяти.
Останется посчитать длину этой записи(как сумму длин всех полей).
← →
Anatoly Podgoretsky (2001-11-05 16:38) [2]packed не обязательно
← →
panov (2001-11-05 16:42) [3]>Anatoly Podgoretsky
Но тогда ведь между полями могут быть "дырки" в памяти?
← →
Di_wind (2001-11-05 17:44) [4]а почему не зацинуть структуры в строку? разделяя поля каким-либо знаком к примеру * а на выходе опять преобразвововать в структуру, помойму так можно, если я неправ прошу поправить....
← →
Anatoly Podgoretsky (2001-11-05 18:00) [5]panov © (05.11.01 16:42)
Конечно, ну и что, главное что бы с обоих концов использовали одинаковый метод упаковки структуры. Если же речь идет об платформон-независимом решении, то packed тем более недостаточно, надо дополнительно к нему использовать только фундаментальные типы.
Di_wind © (05.11.01 17:44)
Какая разница, а если это двоичные данные то и невозможно в принципе.
← →
Alien (2001-11-05 23:04) [6]Обычно такие задачи решаются путём реализации методов SaveToStream и LoadFromStream, которые принимают указатель на базовый класс TStream. Практически все компоненты, которым требуется пересылка данных, знают как работать с потоками, и сокеты здесь не исключение. А упаковка в поток осуществляется уже по методам указанным выше. Конечно принципиально это не отличается от передачи обычного буфера, но при таком подходе вы получаете универсальность и отделяете котлет от мух.
← →
Digitman (2001-11-06 09:26) [7]type
TMyEnum = (meOne, meTwo, meThree, meFour);
TMyStruc = packed record
F1: Integer;
F2: Double;
F3: String[255];
F4: TMyEnum;
end;
PMyStruc = ^TMyStruc;
var
MyStruc : TMyStruc;
MyStrucPtr : PMyStruc;
...
MyStrucPtr := @MyStruc;
...
ClientSocket.Socket.SendBuf(MyStruc, SizeOf(TMyStruc));
или
ClientSocket.Socket.SendBuf(MyStrucPtr^, SizeOf(TMyStruc));
или
ClientSocket.Socket.SendBuf(@MyStruc, SizeOf(TMyStruc));
выбирай на вкус)
← →
panov (2001-11-06 09:47) [8]>evgen_2001
По поводу предыдущего примера:
Обрати внимание на строку
F3: String[255];
Если будешь определять просто как F3: String;,
то размер SizeOf(TMyStruc) будет определяться неверно.
← →
Anatoly Podgoretsky (2001-11-06 11:21) [9]Будет определяться верно, но результат будет далек от нужного :-)
Правда тоже не беда, просто изменить алгоритм передачи данных
структура, длина, данные ...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c