FMX、德尔福、TIdTCPClient

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

我创建了两个 TIdTCPClient 对象并将它们连接到同一台服务器。

服务器从一个客户端接收字节并将它们发送给另一个。这个客户端将它发送给第一个客户端,依此类推。

问题是在禁用计时器的情况下按下按钮后它不起作用。但是如果我激活定时器,它会以定时器的频率工作。

type
  TForm2 = class(TForm)
    Client1: TIdTCPClient;
    Client2: TIdTCPClient;
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    idThreadComponent : TIdThreadComponent;
    procedure IdThreadComponentRun(Sender: TIdThreadComponent);
    procedure IdTCPClientConnected(Sender: TObject);
  end;

procedure TForm2.FormCreate(Sender: TObject);
  begin
    idThreadComponent:= TIdThreadComponent.Create();
    idThreadComponent.OnRun := IdThreadComponentRun;

    Client1.Port:= 1202;
    Client1.Host:= 'localhost';
    Client2.Port:= 1203;
    Client2.Host:= 'localhost';

    Client1.OnConnected:= IdTCPClientConnected;
    Client2.OnConnected:= IdTCPClientConnected;

    Client1.Connect;
    Client2.Connect;
  end;

procedure TForm2.IdThreadComponentRun(Sender: TIdThreadComponent);
  var
    Rx: TIDBytes;
  begin
    if not Client1.IOHandler.InputBufferIsEmpty then
      begin
        Client1.IOHandler.ReadBytes(Rx, Client1.IOHandler.InputBuffer.Size);
        if Length(Rx) > 0 then
          begin
            Client2.IOHandler.Write(Rx);
          end
      end;

    if not Client2.IOHandler.InputBufferIsEmpty then
      begin
        Client2.IOHandler.ReadBytes(Rx, Client2.IOHandler.InputBuffer.Size);
        if Length(Rx) > 0 then
          begin
            Client1.IOHandler.Write(Rx);
          end;
      end;
  end;

procedure TForm2.IdTCPClientConnected(Sender: TObject);
  begin
    IdThreadComponent.Active  := True;
  end;

procedure TForm2.Button1Click(Sender: TObject);
  var
    Tx: TIDBytes;
  begin
    SetLength(Tx, 1);
    Client1.IOHandler.Write(Tx,length(Tx));
  end;

procedure TForm2.Timer1Timer(Sender: TObject);
  begin
    if not Client1.Connected then
      begin
      end;
    if not Client2.Connected then
      begin
      end;
  end;
delphi firemonkey tcpclient indy
© www.soinside.com 2019 - 2024. All rights reserved.