Отправка массива клиент-сервер 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
может помочь, или вам придется кодировать его самостоятельно. Хорошей идеей было бы сериализовать все элементы на каждой стороне в один поток, а затем сразу отправить контент для повышения производительности.