Форум: "Сети";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизSokcet Найти похожие ветки
← →
Kaginava (2003-08-21 15:20) [0]Доброе время суток всем!
Подскажите пожалуйста как посредством сокета передать(принять) запись
примерно такого вида
TclientRequest=record
a:integer;
b:single;
..
..
end;
вроде как принять передать текст получается, а запись непонятно как. Всем спасибо
← →
Digitman (2003-08-21 15:29) [1]если TclientRequest не содердит полей, явл-ся динамическими структурами (а-ля String, array of чего-то и т.п), то
BytesSent := Socket.SendBuf(clientRequest, SizeOf(clientRequest));
+ обработка события OnWrite()
← →
kaginava (2003-08-21 15:30) [2]а если содержит поля не являющиеся динамическими структурами, тогда как ?
← →
kaginava (2003-08-21 15:49) [3]прошу прощения, я хотел спросить ,а если содержатся поля являющиеся динамическими массивами ?
← →
Polevi (2003-08-21 16:04) [4]>kaginava © (21.08.03 15:49) [3]
тогда надо писать процедуру сериализации экз структуры в поток и обратно
← →
kaginava (2003-08-21 16:08) [5]ясно, спасибо
← →
Digitman (2003-08-21 16:09) [6]тогда одним SendBuf() не обойтись
для каждого такого поля необходимо передавать его характеристики - размерность, число элементов в каждой размерности и т.п., прежде чем передавать собственно буфер данных дин.структуры ... иначе как на принимающей стороне выделить под принимаемую дин.структуру память и воссоздать ее ? никак) .... только - так !
например, в случае передачи поля типа String (AnsiString) следует выполнить это в два "приема"
TclientRequest= PACKED record
..
str: string;
..
end;
var len: Integer;
clientRequest: TclientRequest;
...
len := Length(clientRequest.str);
socket.SendBuf(len, sizeof(len)); // длина строковых данных
socket.SendBuf(clientRequest.str[1], len); // собственно стр.данные
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c