如何通过TCP Delphi发送多个数据包

时间:2018-08-07 22:46:15

标签: delphi tcp record

如果我需要发送不同类型的记录,该如何确定 服务器接收的记录类型?

TRecord1 = packet record
String1: String[10];
String2: String[25];
end;

TRecord2 = packet record
String3: String[30];
MyInt: Integer;
end;

我可以轻松发送选择的记录,但是如何让服务器知道 正在发送哪个记录?

2 个答案:

答案 0 :(得分:0)

答案很简单:你不能。

最后,记录只是通过TCP以字节数组的形式传输。 接收端不知道它正在查看哪种结构。 更糟糕的是,如果接收器和发送器在不同的平台上运行,它们甚至可能在字节顺序上不一致!

  • 您必须通过首先发送代码来“帮助”接收器,该代码宣布即将发生的记录类型。可选地,您甚至可以传输记录的大小(这使您可以跳过“外星人”的结构和/或您以后发明的接收器尚不了解的记录-无需脱离轨道)。
  • 按照惯例,您可以选择使每个记录的第一个字段对于记录类型而言都是唯一的。这样,接收者可以从第一个字段中知道它正在处理的记录。

答案 1 :(得分:-1)

您应该将整个对象序列化为JSON之类的东西,另一方面将接收对象反序列化为正确的对象。

您可以使用这些开源项目或编写自己的序列化器/反序列化器: