Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TidTCPClient] Как передать запись (record) через TidTCPClient?


MIB

Вопрос

Столкнулся с засадой: нужно передать с клиента (андроид) на сервер (Win) данные

TArray_Data = record
fText_a: String;
  a,b:double;
  ...
end;

Ранее всегда использовал стандартные ServerSocket / ClientSocket и соответственно ReceiveBuf / SendBuf, а вот в Инди такое не проходит.

Подскажите, плз, вариант решения? 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

пересылать в виде JSON
добавить в проект оба файлика отсюда

uses XSuperObject;

rec: TMyRecord; 
S: String;
 
//record to Json
S := TSuperRecord<TTestRec>.AsJSON(rec);

//Json to record
rec := TSuperRecord<TTestRec>.FromJSON(JsonString);
Ссылка на комментарий
  • 0

Спасибо за вариант - до такого пока еще "не дорос", зато есть ориентиры ... )))

Может кому понадобится, вопрос решился стандартными средствами:

uses ... IdGlobal; 
TArray_Data = record
	fText_a: array[0..19] of Char;
  a,b:double;
  end;

Клиент: 

var  data : TArray_Data;
 Buffer: TIdBytes;
begin
 data.fText_a:='Данные:';
 data.a:=2.0;
 data.b:=3.0;

 Buffer := RawToBytes(data, SizeOf(data));
 IdTCPClient1.IOHandler.write (buffer);
end;

Сервер: 

var
  MIRec: TArray_Data;
  Buffer: TIdBytes;
  b_size : integer;
begin
  AContext.Connection.IOHandler.ReadBytes(Buffer, SizeOf(MIRec));
  BytesToRaw(Buffer, MIRec, SizeOf(MIRec));
  memo1.Lines.Add(MIRec.fText_a);
  memo1.Lines.Add(MIRec.a.ToString);
  memo1.Lines.Add(MIRec.b.ToString);
end;

Самое веселое, что ночью этот код не работал, в связи с чем, собственно, и был задан вопрос ... 

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...