Delphi客户端服务器阵列发送

Delphi客户端服务器阵列发送,delphi,delphi-7,object-serialization,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; 但我认为这样做真的很糟糕

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

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

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

在Delphi7(及更高版本)下,您可以使用,它支持序列化为二进制或二进制。它将使用可用的RTTI直接执行所有操作。它适用于所有基本类型:整数、浮点、字符串、嵌套数组,但不适用于类实例


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

客户端运行的平台/语言是什么?也是Delphi吗?@SteveMayne yep,也是Delphi。Delphi中没有标准的pickle/marshall对象处理方法(据我所知)。您可以研究使用SOAP来进行通信:@Steve,Delphi中有可用的,但Delphi 7中还没有。@Danil,根本不需要将这些序列化数据存储到文件中。将它们存储在内存中(简单地存储在某个变量中或某个复杂的缓冲区中)肯定很好,而且效率更高。所以我没有办法直接这样做吗?哦我希望我能使用你的包装器,但我不能使用非本地/非我的delphi库来完成我的任务,对不起。@Danil,那么你就不走运了,因为编组是在delphi 2010[+1ed]中引入的。@TLama好吧,没关系。然而,我认为我需要学习如何序列化的东西!即使是更新版本的Delphi也无法对对象数组进行封送,除非每个类都有自己的序列化程序。对于Delphi7,您也可以这样做,一些类包括在我们的其他库mORMot中。