Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
15-1191930668
Nucer
2007-10-09 15:51
2007.11.11
Как правильно писать программы?


2-1192950817
2pac
2007-10-21 11:13
2007.11.11
CreateWindowEx - первый и четвертый параметры


15-1191682768
новый админ
2007-10-06 18:59
2007.11.11
медленный доступ к удаленному серверу


4-1178303102
Dmitry___
2007-05-04 22:25
2007.11.11
Хендл формы из dll


15-1190827861
Kolan
2007-09-26 21:31
2007.11.11
MVC — спрашивали? :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский