Delphi客户端服务器阵列发送

Dan*_*man 6 delphi delphi-7 object-serialization

我需要从服务器向客户端发送动态对象数组.一个例子作为数组,它将类的对象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;
Run Code Online (Sandbox Code Playgroud)

但是我觉得这样做真的很糟糕.那么,拜托,您能告诉我如何发送和接收某些对象的数组(使用IdTCPClient/ServerClient/ServerSockets)的正确方法吗?

Arn*_*hez 4

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

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

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

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

  • @Danil,那么你就不走运了,因为编组是在 Delphi 2010 [+1ed] 中引入的。 (2认同)