我有一个印第部分:

IdMappedPortTCP1: TIdMappedPortTCP;


以及以下初始化:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
  IdMappedPortTCP1.MappedHost := '189.200.10.71';
  IdMappedPortTCP1.MappedPort := 5300;
  IdMappedPortTCP1.Active := true;
end;

procedure TForm1.IdMappedPortTCP1Execute(AContext: TIdContext);
begin
  Memo1.Lines.Add(AContext.Data.ToString);
  Memo1.Lines.Add('------');
end;

procedure TForm1.IdMappedPortTCP1OutboundData(AContext: TIdContext);
begin
  Memo1.Lines.Add(AContext.Data.ToString);
  Memo1.Lines.Add('+++++++'); //
end;


我的其他应用程序连接到189.200.10.71:5300,但组件未触发...

我的错在哪里

将XE3与include indy组件一起使用

最佳答案

客户端连接后,MappedHost/MappedPort属性会告诉TIdMappedPortTCP它连接到的位置。您正在告诉TIdMappedPortTCP连接到189.200.10.71:5300。如果您的其他应用程序也连接到189.200.10.71:5300,则它将完全绕过TIdMappedPortTCP。这就解释了为什么不触发事件的原因(顺便说一句,TIdMappedPortTCP是多线程组件,但是事件处理程序不是线程安全的)。

要通过TIdMappedPortTCP,客户端需要连接到TIdMappedPortTCP.Bindings集合正在监听的IP /端口,而不是分配给MappedHost/MappedPort属性的IP /端口。

08-25 21:25