Главная страница
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.021 c
9-1163003459
DevilDevil
2006-11-08 19:30
2007.11.11
Альфаканал


2-1192512037
saintninja
2007-10-16 09:20
2007.11.11
Работа Без VCL


2-1192272904
apic
2007-10-13 14:55
2007.11.11
Права пользователя


11-1176036483
Bmouradov
2007-04-08 16:48
2007.11.11
FontOrientation или текст под углом


15-1191322414
dumka
2007-10-02 14:53
2007.11.11
Юридический вопрос