如何在 Delphi 7 中的 Indy 10 TCP/IP 中从服务器接收文本到客户端?

问题描述 投票:0回答:1

我正在 Delphi 7 中使用 Indy 10 开发聊天应用程序。现在,在客户端,Indy 没有

OnDataReceived
OnRead
事件,那么我如何从服务器向客户端接收文本?

我确实尝试将

OnWork
事件与计时器一起使用,但我的计时器没有启动。

以下是我使用的

OnWork
TTimer
的代码:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if zb_FDataReceived then
  begin
    ShowMessage('Timer triggered!');
    ClientOutput.Lines.Add('Server: ' + zb_FReceivedData);
    zb_FDataReceived := False;
  end;
end;

procedure TForm1.IdTime1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  if zb_FDataReceived then
  begin
    ShowMessage('Timer triggered!');
    ClientOutput .Lines.Add('Server: ' + zb_FReceivedData);
    zb_FDataReceived := False;
  end;
end;
delphi tcp timer indy10
1个回答
1
投票

大多数 Indy 客户端都是同步操作,这就是为什么当传入数据到达时

TIdTCPClient
中没有事件。在您告诉它读取之前,它不会读取数据

因此,为了做您正在尝试的事情,您可以使用计时器,但不是以您尝试的方式。在每个计时器事件上,您需要以较短的超时时间查询套接字以查看是否有数据等待,如果有,则读取并显示它。

话虽这么说,通常最好使用单独的线程而不是计时器。让线程运行一个循环,每次迭代都会从套接字读取数据,直到新消息到达,然后通知主 UI 线程显示该消息。

© www.soinside.com 2019 - 2024. All rights reserved.