Delphi 从充当服务器的模块获取数据

Delphi 从充当服务器的模块获取数据,delphi,indy,Delphi,Indy,我们有一个在TCP服务器模式下运行的设备。因此,我必须连接到它才能开始发送和接收 我用IdTcpClient连接到它。但我不知道如何使用IdTcpClient获取它的数据 (IdTcpClient没有OneExecute事件) 我得到了发送数据的端口(端口是动态的)(我有一个防火墙)。但我不能用IdTCPServer监听这个消息,我得到一个错误:“不能绑定套接字。地址和端口已经在使用” 如何获取传入数据(使用IdTcpClient)并向其发送命令?我有什么地方出错吗?您需要先阅读“设备”的手册。

我们有一个在TCP服务器模式下运行的设备。因此,我必须连接到它才能开始发送和接收

我用IdTcpClient连接到它。但我不知道如何使用IdTcpClient获取它的数据 (IdTcpClient没有OneExecute事件)

我得到了发送数据的端口(端口是动态的)(我有一个防火墙)。但我不能用IdTCPServer监听这个消息,我得到一个错误:“不能绑定套接字。地址和端口已经在使用”


如何获取传入数据(使用IdTcpClient)并向其发送命令?我有什么地方出错吗?

您需要先阅读“设备”的手册。并了解您的设备在读取数据时希望您执行的操作。
无法打开同一端口2次。

一旦连接到设备,您可以在需要时对其进行读取和写入。如果不想挂起主UI线程,则应在工作线程中执行套接字I/O。这在Indy的阻塞I/O模型中非常有效。您可以为此使用
TThread
,并重写其
Execute()
方法。或者使用Indy的
TIdThreadComponent
组件。

这是一个TCP连接。我更喜欢阅读RFC相关的主题。互联网标准协议在RFC中发布。仅仅因为设备使用TCP并不能保证它使用标准的Internet协议进行通信。我如何读取?例如,IdTCPServer有一个OneExecute事件,我可以使用AContext.Connection.IOHandler.ReadLn读取数据,但IdTCPClient没有这样的内容(我找不到)。TIdTCPClient有一个IOHandler属性。