![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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()