我有一个indy组件:
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组件一起使用
答案 0 :(得分:3)
MappedHost/MappedPort
属性告诉TIdMappedPortTCP
客户端连接到它后它连接的位置。您告诉TIdMappedPortTCP
要连接到189.200.10.71:5300
。如果您的其他应用也连接到189.200.10.71:5300
,则它完全绕过TIdMappedPortTCP
。这就解释了为什么事件没有触发(BTW,TIdMappedPortTCP
是一个多线程组件,但你的事件处理程序不是线程安全的。)
要通过TIdMappedPortTCP
,客户端需要连接到TIdMappedPortTCP.Bindings
集合正在侦听的IP /端口,而不是分配给MappedHost/MappedPort
属性的IP /端口。< / p>