我有一个印第部分:
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 /端口。