Отправка массива клиент-сервер Delphi

Мне нужно отправить динамический массив объектов с сервера на клиенты. Пример в виде массива, который содержит объекты класса Figure с информацией о его координатах, цвете и т. д.

Я пытался использовать что-то вроде этого для отправки данных:

for i := 0 to ServerSocket.Socket.ActiveConnections - 1 do
begin
  ServerSocket.Socket.Connections[i].SendText(some values); // then parsing this text to get values
end;

но это действительно плохой способ сделать так, я думаю. Так что, пожалуйста, не могли бы вы показать мне правильный способ отправки и получения массива некоторых объектов (используя IdTCPClient/Server или же Client/ServerSockets)?

1 ответ

Решение

Вы должны сериализовать ваши динамические массивы между клиентами и сервером.

Первая попытка состоит в том, чтобы использовать собственную сериализацию, например, использование содержимого с разделителями #13#10 (CRLF), если это массив строк, или двоичная сериализация в других случаях.

В Delphi 7 (и выше) вы можете использовать нашу оболочку динамического массива, которая обеспечивает сериализацию в JSON или двоичный файл. Все будет делать напрямую, используя доступные RTTI. Он будет работать со всеми основными типами: целыми числами, числами с плавающей запятой, строками, вложенными массивами, но не экземплярами классов.

Для динамического массива объектов (экземпляров классов) вам нужно будет выполнить сериализацию вручную. С помощью TReader может помочь, или вам придется кодировать его самостоятельно. Хорошей идеей было бы сериализовать все элементы на каждой стороне в один поток, а затем сразу отправить контент для повышения производительности.

Другие вопросы по тегам