将数据从TIdTCPClient发送到FMX中的TServerSocket不适用于Delphi XE8

工作2享受-享受2工作

我正在使用Delphi XE8 Trail版本开发应用程序移动应用程序。目前,我在下面已经很清楚地解释了一个非常关键的问题。

我的项目分为两个不同的应用程序:

应用程序A:此应用程序是使用Delphi XE8作为VCL应用程序开发的。该应用程序具有TServerSocket。并使用字节数组接收数据。通常,此应用程序以打包记录的形式接收数据,然后根据消息头进行下一步。

应用程序B:此应用程序是使用Delphi XE8作为多设备移动应用程序开发的。该应用程序具有TIdTCPClient。并按如下所述发送数据:

TSamplePacket = packed record
  strValue: array [0..10] of Char;
end;

Procedure SendData;
var
  SamplePacket: TSamplePacket;
begin
  SamplePacket.strValue := '1000';
  IdTCPClient1.IOHandler.Write(@SamplePacket, SizeOf(TSamplePacket));
end;

并且为IdTCPClient分配了IOHandler。

问题:当我在Delphi XE8 Multidevice移动应用程序中调用SendData过程时,它未在服务器应用程序中接收到任何数据,并且在客户端中也没有引发异常。我已经检查了Windows 7桌面版和Android移动版Lolipop移动版。在两个设备中,客户端应用程序均未发送数据。同样的代码在Windows应用程序和Android KitKat版本的移动应用程序的Delphi XE7中也能正常工作。在Delphi XE8 Multi Device移动应用程序中,我尝试将打包的记录转换为TIDBytes。但是我不知道该怎么做。

但是,当我创建了Delphi XC8 VCL应用程序并实现了相同的代码和相同的组件,并且尝试发送数据时,它会在Server应用程序中接收数据。

在Delphi XE8 Multidevice移动应用程序中,如果我尝试发送如下所示的文本:

IdTCPClient1.IOHandler.Writeln('test');

当我使用它时,我可以在服务器应用程序中接收数据。

请提供任何帮助,以将缓冲区数据正确发送到服务器套接字。并预先感谢

雷米·勒博(Remy Lebeau)

应用程序A:此应用程序是使用Delphi XE8作为VCL应用程序开发的。该应用程序具有TServerSocket。

TServerSocket已被弃用多年,并且默认情况下不再安装。提供它仅是为了与旧代码向后兼容。由于无论如何都在使用Indy,因此应考虑改用Indy TIdTCPServer

IdTCPClient1.IOHandler.Write(@SamplePacket,SizeOf(TSamplePacket));

没有任何TIdIOHandler.Write()接受此类参数值的重载版本您需要以形式发送数据TIdBytes

Procedure SendData;
var
  SamplePacket: TSamplePacket;
begin
  SamplePacket.strValue := '1000';
  IdTCPClient1.IOHandler.Write(RawToBytes(SamplePacket, SizeOf(TSamplePacket)));
end;

或作为TStream

Procedure SendData;
var
  SamplePacket: TSamplePacket;
  Strm: TIdMemoryBufferStream;
begin
  SamplePacket.strValue := '1000';
  Strm: TIdMemoryBufferStream.Create(@SamplePacket, SizeOf(TSamplePacket));
  try
    IdTCPClient1.IOHandler.Write(Strm);
  finally
    Strm.Free;
  end;
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Delphi XE8加载PDF文件

Delphi XE8 FMX Android 和 USSD 代码

用于delphi XE8的多设备Bcrypt库

prestashop中的delphi XE8 REST接口PUT

使用Delphi XE8进行XSLT转换的替代方法

Delphi XE8 idHttp Erromessage文本编码错误

Delphi Xe8,如何获取android设备令牌?

降序列表框项目Delphi XE8

在显示模态的Delphi XE8上将浮点除以零

如何在XE8中禁用Castalia?

如何使用delphi XE8 firemonkey项目更新数据库?

当“ |”时,IDE挂起。在源代码中。这是Delphi XE8中的错误吗?

如何知道Delphi XE8中位图的比例尺?

如何防止应用程序在Delphi XE8中进入睡眠模式

如何在Delphi XE8中添加64位目标平台?

TList <T>中的Delphi XE8错误,需要解决方法

在Delphi XE8的移动编译器中哪些指针相关的东西不起作用?

与其他Delphi版本相比XE8中的System.Generics.Collections差异

Delphi XE8中的数字分区算法生成器

德尔福XE8。FMX。为什么CLASS VAR在Android平台上的发布顺序不同?

将数据导出到CSV文件,错误无法编码字符'\ xe8'

我该如何配置新的Delphi XE8 Editor起始视觉提示?

Delphi-自XE8起如何正确注册图形类?

Delphi XE8在应用程序启动时优雅地处理ETetheringException

Delphi xe8,无法重命名组件xxx,该组件以祖先形式引入

Delphi XE8更新1-找不到随机文件

DELPHI XE8:OnCreate事件期间未刷新Android上的TRectangle

Delphi XE8 Firemonkey iOS应用程序仅通过TEdit崩溃

优雅地关闭了Indy TCPServer移动应用程序Delphi XE8