Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.005 c
4-90432
Анатолий
2001-11-29 17:48
2002.01.28
Список процессов.


6-90330
VS
2001-11-06 12:32
2002.01.28
Наставьте на путь истинный!


14-90354
Semen
2001-11-21 10:42
2002.01.28
Отслеживание питания


7-90398
Kirill_SKTS
2001-10-17 21:50
2002.01.28
Добыть звук из звуковухи


1-90281
Leva
2002-01-10 12:36
2002.01.28
StayOnTop-форма исчезает





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский