Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > передача сложной структуры через сокеты


Автор: Vinnety 25.6.2003, 17:26
Помогите!
Как передать через сокет посредством SendBuf такую структуру:

const
kolvo_zap=100;
type
//-------------------------------------------
TCode = longint;
TData = double;
TName = string[15];
TType_pack = string[15];

TDatas = packed record
Code : Tcode;
Data : Tdata;
end;

Tarr = array of Tdatas;

TUser = packed record
Name : Tname;
Type_pack : Ttype_pack;
Datas : TArr;
end;
//-------------------------------------------

Например, я посылаю это так:
var
size,i : integer;
begin
size:=(4+8)*kolvo_zap+(15+1+15+1);
for i:=0 to serversocket1.Socket.ActiveConnections-1 do
serversocket1.Socket.Connections[i].SendBuf(user,size);
end;

А принимаю так (на клиенте такая же структура):
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
size,i: integer;
begin
size:=socket.ReceiveLength;
setlength(user.datas,kolvo_zap);
clientsocket1.Socket.ReceiveBuf(user,size);
end;

Но это не работает!!! Почему?


Автор: altarasjuk 25.6.2003, 17:39
Что такое user? это должна быть текстовая переменная. И соответственно у тебя должны быть два метода для кодирования этого массива в текстовую строку и для соответствующего раскодирования.

Автор: stab 25.6.2003, 19:33
если user это массив из TUser тогда размер того что нужно отправить:

size:=SizeOf(TUser) * Length(user);

а утебя:

size:=(4+8)*kolvo_zap+(15+1+15+1);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)