Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.28;
Скачать: CL | DM;

Вниз

Передача структуры по сокету   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
3-90185
mashinist
2001-12-19 01:32
2002.01.28
DB DBase IV


14-90378
limon
2001-12-05 19:16
2002.01.28
> Merlin. Глюк при записи ответа


14-90383
mashinist
2001-11-28 00:46
2002.01.28
Апроксимация графика функции.


1-90257
ЛамерОК
2002-01-09 14:01
2002.01.28
Как сделать так чтобы edit не реагировал бипом на нажатие заперщенных клавиш?


4-90412
Art
2001-11-27 15:53
2002.01.28
Как запретить запускать ехе шник ???