Главная страница
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.024 c
3-1182675084
Псалтырь
2007-06-24 12:51
2007.11.11
Delphi ADO асинхронно


4-1178601036
-=Germe$=-
2007-05-08 09:10
2007.11.11
Еще раз про глобальные ловушки


15-1191328457
Prohodil Mimo
2007-10-02 16:34
2007.11.11
Delphi + Unicode на Win98, как использовать unicows.dll


2-1192772617
ses
2007-10-19 09:43
2007.11.11
combobox. edit;


2-1192803968
greengeneral
2007-10-19 18:26
2007.11.11
генерация