您使用的IOHandler类不正确。
TIdIOHandlerStream
使用
TStream
物体。它通常用于重放先前捕获的会话以进行调试,而不需要与真正的服务器进行物理连接。
你需要使用
TIdIOHandlerStack
相反,它使用TCP/IP套接字连接来执行I/O。它是indy的默认iohandler类,因此您甚至不需要创建它的实例。
一
,
TIdTCPClient::Connect()
如果不分配自己的,将在内部为您创建一个。
1:除非您需要更高级的用法,如通过代理服务器连接到服务器等,否则您需要自己的实例,以便根据需要进行配置。
为了你想要的,让
TIdTCPClient
使用
Tidiohandlerstack公司
然后你可以打电话给
TIdIOHandler::ReadStream()
方法。传球
TFileStream
让它读取并设置
AByteCount
参数-1和
AReadUntilDisconnect
参数设置为“真”,这样它将连续读取,直到套接字连接关闭。
而且,像印地的大多数业务一样,
ReadStream()
在完成之前阻塞调用线程,因此为了避免阻塞UI,应该调用
读流()
在工作线程中。但是,如果不想使用线程,可以交替地将
TIdAntiFreeze
而不是窗体上的组件。