我创建了两个 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;