我有一个 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 与包含 indy 组件一起使用
最佳答案
MappedHost/MappedPort
属性告诉 TIdMappedPortTCP
一旦客户端连接到它,它就连接到哪里。您正在告诉 TIdMappedPortTCP
连接到 189.200.10.71:5300
。如果您的其他应用也连接到 189.200.10.71:5300
,那么它会完全绕过 TIdMappedPortTCP
。这解释了为什么事件没有触发(顺便说一句,TIdMappedPortTCP
是一个多线程组件,但您的事件处理程序不是线程安全的)。
要通过 TIdMappedPortTCP
,客户端需要连接到 TIdMappedPortTCP.Bindings
集合正在监听的 IP/端口,而不是分配给MappedHost/MappedPort
属性。
关于delphi - IdMappedPortTCP - 无事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966450/