Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Sokcet [D6, Win2k]


Kaginava ©   (2003-08-21 15:20:00) 

Доброе время суток всем!
Подскажите пожалуйста как посредством сокета передать(принять) запись
примерно такого вида

TclientRequest=record
a:integer;
b:single;
..
..
end;

вроде как принять передать текст получается, а запись непонятно как. Всем спасибо


Digitman   (2003-08-21 16:09:00) [1]

тогда одним SendBuf() не обойтись

для каждого такого поля необходимо передавать его характеристики - размерность, число элементов в каждой размерности и т.п., прежде чем передавать собственно буфер данных дин.структуры ... иначе как на принимающей стороне выделить под принимаемую дин.структуру память и воссоздать ее ? никак) .... только - так !

например, в случае передачи поля типа String (AnsiString) следует выполнить это в два "приема"

TclientRequest= PACKEDrecord
..
str: string;
..
end;

var len: Integer;
clientRequest: TclientRequest;
...
len := Length(clientRequest.str);
socket.SendBuf(len, sizeof(len)); // длина строковых данных
socket.SendBuf(clientRequest.str[1], len); // собственно стр.данные


kaginava   (2003-08-21 16:08:00) [2]

ясно, спасибо


Polevi   (2003-08-21 16:04:00) [3]

>kaginava © (21.08.03 15:49) [3]
тогда надо писать процедуру сериализации экз структуры в поток и обратно


kaginava   (2003-08-21 15:49:00) [4]

прошу прощения, я хотел спросить ,а если содержатся поля являющиеся динамическими массивами ?


kaginava   (2003-08-21 15:30:00) [5]

а если содержит поля не являющиеся динамическими структурами, тогда как ?


Digitman   (2003-08-21 15:29:00) [6]

если TclientRequest не содердит полей, явл-ся динамическими структурами (а-ля String, array of чего-то и т.п), то

BytesSent := Socket.SendBuf(clientRequest, SizeOf(clientRequest));

+ обработка события OnWrite()


Наверх

Титульная страница Поиск, карта сайта Написать письмо