Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

передача по сети массивов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
15-1191247447
wesel
2007-10-01 18:04
2007.11.11
Как отфильтровать вопросы


2-1192502547
npr2
2007-10-16 06:42
2007.11.11
dbgrid


2-1192455837
фыва
2007-10-15 17:43
2007.11.11
Вставка в мемо


15-1191793301
SKIPtr
2007-10-08 01:41
2007.11.11
Перкевод в спящий режим


1-1188202326
member
2007-08-27 12:12
2007.11.11
Действия в расшаренном ресурсе