Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Внизпередача по сети массивов Найти похожие ветки
← →
l_v (2007-10-17 11:25) [0]Еще раз Здраствуйте!
Вообщем возникла проблема, помогите ее решить...
Использую компоненты TServerSocket, TClientSocket. Объявление:type
Tffff = packed record
X: double;
Y: double;
Z: double;
end;
type
TPaket = packed record
.....
ffff: array of Tffff;
end;
PPaket = ^TPaket;
var
aaa: PPacket;
Отсылаю вот так:GetMem(aaa,raz);
SetLength(aaa.ffff,raz1);
...........
Socket.SendBuf(aaa^,i);
Принимаю вот так:Socket.ReceiveBuf(aaa^,razmer);
Но все нормально передается, никаких исключений и т.п., но вот на стороне сервера в этом ffff одни нули, хотя в клиенте вроде все пишется в эту структуру...
Не подскажете как правильно так сделать? В чем моя ошибка?
← →
Reindeer Moss Eater © (2007-10-17 11:26) [1]ffff - это ссылка
← →
l_v (2007-10-17 11:33) [2]
> Reindeer Moss Eater
но как тогда быть, потому как в процессе всегда требуется изменять размер массива?
← →
Сергей М. © (2007-10-17 11:39) [3]
> но как тогда быть
Отправлять не ссылку, а данные, расположенные по адресу в ссылке.
← →
Reindeer Moss Eater © (2007-10-17 11:44) [4]но как тогда быть
С такими структурами данных потребуется разрабатывать прикладной протокол обмена.
← →
Slym © (2007-10-17 12:21) [5]
type
T3DPoint = packed record
X,Y,Z: double;
end;
P3DPoints=^T3DPoints;
T3DPoints=packed array[0..0] of T3DPoint;
PPacket = ^TPacket;
TPacket = packed record
//..
PointsCount:integer;
end;
procedure Otpravka;
var
aaa: PPacket;
Points: P3DPoints;
begin
//...
GetMem(Points,SizeOf(T3DPoint)*aaa.PointsCount);
//Заполняем
Socket.SendBuf(aaa,SizeOf(aaa));
Socket.SendBuf(Points^,SizeOf(T3DPoint)*aaa.PointsCount);
FreeMem(Points);
end;
procedure Priem;
var
aaa: PPacket;
Points: P3DPoints;
begin
Socket.ReceiveBuf(aaa,SizeOf(aaa));
if aaa.PointsCount>0 then
begin
GetMem(Points,SizeOf(T3DPoint)*aaa.PointsCount);
Socket.ReceiveBuf(Points^,SizeOf(T3DPoint)*aaa.PointsCount);
FreeMem(Points);
end;
← →
Slym © (2007-10-17 12:32) [6]или
type
T3DPoint = packed record
X,Y,Z: double;
end;
TPoints=array of T3DPoint;
TPacket = packed record
//...
Points:TPoints;
end;
procedure SendPacket(const Packet:TPacket);
var i,c:integer;
begin
Socket.SendBuf(Packet,SizeOf(Packet)-SizeOf(Packet.Points));
c:=Length(Packet.Points);
Socket.SendBuf(c,SizeOf(c));
for i:=Low(Packet.Points) to High(Packet.Points) do
Socket.SendBuf(Packet.Points[i],SizeOf(T3DPoint));
end;
procedure ReceivePacket(var Packet:TPacket);
var i,c:integer;
begin
Socket.ReceiveBuf(Packet,SizeOf(Packet)-SizeOf(Packet.Points));
Socket.ReceiveBuf(c,SizeOf(c));
SetLength(Packet.Points,c);
for i:=Low(Packet.Points) to High(Packet.Points) do
Socket.ReceiveBuf(Packet.Points[i],SizeOf(T3DPoint));
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c