6

我需要将一个动态的对象数组从服务器发送到客户端。一个数组的例子,它包含类对象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/Serveror Client/ServerSockets)?

4

1 回答 1

4

您必须在客户端和服务器之间序列化您的动态数组。

第一次尝试是使用您自己的序列化,例如,如果这是一个字符串数组,则使用#13#10 (CRLF) 分隔的内容,或者使用二进制序列化。

在 Delphi 7(及更高版本)下,您可以使用我们的动态数组包装器,它可以序列化为JSON或二进制文件。它将使用可用的 RTTI 直接完成所有操作。它适用于所有基本类型:整数、浮点数、字符串、嵌套数组,但不适用于类实例。

对于对象的动态数组(类实例),您需要手动进行序列化。使用TReader可能会有所帮助,或者您必须自己编写代码。最好将每一侧的所有项目序列化为一个流,然后一次发送内容,以获得更好的性能。

于 2012-11-21T16:12:23.510 回答