Главная страница
    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.46 MB
Время: 0.004 c
3-90198
Havez
2001-12-20 23:11
2002.01.28
Сохранность данных под InterBase


6-90344
Darkf0x
2001-11-05 14:38
2002.01.28
socket!!!


3-90222
alextov
2001-12-24 19:39
2002.01.28
Как упорядочить значения в ComboBox е LookUp поля


1-90286
Ig
2002-01-08 22:43
2002.01.28
Внешние компоненты в 1С


3-90195
Вика
2001-12-21 22:25
2002.01.28
Хранимые процедуры и рефреш таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский