Delphi客户端服务器数组发送

标签 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;

但我认为这样做确实很糟糕。那么,请您告诉我如何发送和接收某些对象数组的正确方法(使用 IdTCPClient/ServerClient/ServerSockets)?

最佳答案

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

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

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

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

关于Delphi客户端服务器数组发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495395/

相关文章:

Delphi 非阻塞 ShowModal

java - 什么是对象序列化?

php - 在 session 中序列化对象时 PHP 类不完整

Delphi7 - 如何复制正在写入的文件

delphi - TButton.Caption 中的特殊 unicode 字符(而不是图标)

delphi - 我们可以在Delphi中模拟gMSA帐户吗?

delphi - 如何从命令行部署 OSX 或 IOS Delphi 项目?

delphi - 如何访问 TPicture.Graphic 的调色板?

delphi - 接口(interface)对象从内存中转储